Seiche : multilocation

La multilocation Cuttlefish permet à votre machine hôte de lancer plusieurs appareils invités virtuels avec une seule invocation de lancement.

Ces multiples machines virtuelles Cuttlefish peuvent partager certaines des ressources du disque hôte, vous permettant ainsi d'économiser de l'espace disque. Chaque machine virtuelle reçoit une superposition de disque distincte couvrant les partitions Android (telles que super , userdata , boot ). Toute modification apportée au disque invité est placée dans une superposition de disque spécifique à l'invité, donnant à chaque machine virtuelle Cuttlefish une vue en copie sur écriture de ses partitions de disque. À mesure que chaque périphérique virtuel écrit davantage de données sur sa vue du disque, la taille des fichiers de superposition sur le disque hôte augmente car ils capturent le delta entre l'état d'origine et leur état actuel.

Les fichiers de superposition peuvent être réinitialisés pour ramener le disque Cuttlefish à son état d'origine. Ce processus est connu sous le nom de powerwashing .

Numéros d'instance

Les appareils Cuttlefish créent et consomment des ressources sur l'hôte liées à leur numéro d'instance . Par exemple, une connexion adb est exposée via un socket de serveur TCP sur le port 6520 pour le périphérique Cuttlefish avec le numéro d'instance 1 . Lorsque plusieurs instances sont lancées, il crée un socket de serveur TCP sur le port 6520 pour le premier périphérique, 6521 pour le deuxième périphérique, et incrémente le numéro de port pour chaque périphérique supplémentaire.

Modifier le nombre maximum d'instances prises en charge

Les ressources côté hôte, telles que les périphériques réseau TAP, doivent être pré-allouées pour les machines virtuelles Cuttlefish. Par défaut, le paquet Debian basé sur la seiche provisionne les ressources pour les instances numérotées 1 à 10 .

Cela peut être modifié en modifiant num_cvd_accounts dans /etc/default/cuttlefish-host-resources et en redémarrant le service cuttlefish-host-resources en exécutant la commande suivante :

sudo systemctl restart cuttlefish-host-resources

Configurations canoniques

Les configurations canoniques représentent la configuration des appareils Cuttlefish au format JSON. Vous pouvez créer des fichiers JSON de configuration canonique pour décrire la configuration de plusieurs appareils Cuttlefish dans un scénario multi-tenant.

Ce qui suit décrit le format utilisé pour les fichiers JSON de configuration canonique (remplacez les espaces réservés par les configurations de périphérique).

{
  "common": {
    CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
  },
  "instances": [
    {
      FIRST_DEVICE_CONFIGURATION
    },
    {
      NTH_DEVICE_CONFIGURATION
    }
  ]
}

Voici un exemple de fichier de configuration d'une configuration avec deux appareils, un appareil téléphonique et un appareil portable :

{
  "instances": [
    {
      "@import": "phone",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "OPTIONAL",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_x86_64_phone-userdebug"
      }
    },
    {
      "@import": "wearable",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "REQUIRED",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_gwear_x86-userdebug"
      }
    }
  ]
}

Ce tableau décrit les éléments utilisés dans l'exemple de configuration avec deux appareils :

Élément Taper Description
instances Tableau Tableau d'objets JSON, chacun décrivant un seul appareil dans le groupe d'appareils multi-locataires à lancer.
@import Chaîne Indique le type de périphérique et définit les valeurs par défaut pour la configuration du périphérique. Les types d'appareils pris en charge sont phone et wearable .
vm Objet Spécifie les propriétés qui s'appliquent à l'environnement de VM spécifique à l'instance de périphérique.
memory_mb Nombre Quantité de mémoire à allouer à une machine virtuelle spécifique en mégaoctets.
setupwizard_mode Chaîne Spécifie si l'assistant de configuration du périphérique est exécuté pour l'utilisateur lors de la première exécution du périphérique. Les options prises en charge pour le mode assistant de configuration sont DISABLED , OPTIONAL et REQUIRED .
cpus Nombre Le nombre de processeurs virtuels alloués à la VM.
disk Objet Spécifie les propriétés pertinentes pour localiser les artefacts du système de fichiers utilisés pour exécuter une seule instance de VM.
default_build Chaîne Chemin du système de fichiers local vers un dossier contenant une image de périphérique virtuel Cuttlefish.

Pour plus d'exemples de fichiers de configuration distribués avec cvd , consultez le dossier cvd_test_configs dans l'arborescence de code de Cuttlefish.

Contrôler les instances multi-locataires

Cette section décrit comment démarrer et arrêter des appareils dans un scénario multi-tenant. Vous pouvez lancer plusieurs appareils Cuttlefish à l'aide des options suivantes :

  • Configuration canonique : Lancez des configurations personnalisées pour chaque appareil à l'aide d'un fichier de configuration JSON décrivant la liste des instances à lancer.
  • Image invité unique : lancez plusieurs appareils à partir d’une seule image invité.

Démarrer plusieurs VM à partir de la configuration canonique

Pour démarrer plusieurs VM à l'aide d'une configuration canonique décrivant le scénario multi-tenant, appelez la commande cvd start avec le préfixe d'indicateur --config_file= comme suit :

cvd start --config_file=CONFIG_FILE

Ce qui suit est un exemple d'appel faisant référence à un fichier de configuration canonique nommé /etc/phone.json .

cvd start --config_file=/etc/phone.json

Démarrer plusieurs VM à partir d'une seule image d'invité

Pour lancer plusieurs appareils Cuttlefish à l'aide d'une seule image invitée, utilisez l'indicateur --num_instances= N , où N est le nombre d'appareils à lancer. Par défaut, les appareils démarrent à partir du numéro d'instance 1 .

cvd start --num_instances=N

Pour modifier le numéro d'instance de départ, effectuez l'une des opérations suivantes :

  • Ajoutez l'indicateur --base_instance_num= N avec N comme premier numéro d'instance.

    cvd start --base_instance_num=N
    
  • Lancez Cuttlefish avec un compte utilisateur correspondant à vsoc- NN , où NN est le numéro d'instance de base sous forme à deux chiffres. Par exemple, pour lancer Cuttlefish avec un compte utilisateur vsoc- 01 , exécutez :

    cvd start --base_instance_num=1
    

Comment arrêter les appareils

Pour arrêter tous les périphériques lancés par la dernière invocation cvd start , exécutez :

cvd stop