La multitenance Cuttlefish permet à votre machine hôte de lancer plusieurs appareils virtuels invités avec une seule invocation de lancement.
Ces multiples machines virtuelles Cuttlefish peuvent partager certaines ressources de disque hôte, ce qui vous permet d'économiser de l'espace disque. Chaque machine virtuelle reçoit un recouvrement de disque distinct couvrant les partitions Android (telles que super
, userdata
, boot
). Toute modification apportée au disque invité est placée dans un recouvrement de disque spécifique à l'invité, ce qui donne à chaque machine virtuelle Cuttlefish une vue en copie sur écriture de ses partitions de disque. À mesure que chaque appareil virtuel écrit davantage de données dans 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 rétablir l'état d'origine du disque Cuttlefish. Ce processus est appelé réinitialisation.
Numéros d'instance
Les appareils Cuttlefish créent et consomment des ressources sur l'hôte associé à leur numéro d'instance. Par exemple, une connexion adb
est exposée via un socket de serveur TCP au port 6520
pour l'appareil Cuttlefish avec le numéro d'instance 1
.
Lorsque plusieurs instances sont lancées, un socket de serveur TCP est créé au port 6520
pour le premier appareil, 6521
pour le deuxième appareil, et le numéro de port est incrémenté pour chaque appareil supplémentaire.
Modifier le nombre maximal d'instances compatibles
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 package Debian cuttlefish-base provisionne des ressources pour les numéros d'instance 1
à 10
.
Pour modifier cette valeur, modifiez num_cvd_accounts
dans /etc/default/cuttlefish-host-resources
et redémarrez 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 canoniques pour décrire la configuration de plusieurs appareils Cuttlefish dans un scénario multitenant.
La section suivante décrit le format utilisé pour les fichiers JSON de configuration canonique (remplacez les espaces réservés par les configurations de l'appareil).
{
"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 téléphone et un wearable :
{
"instances": [
{
"@import": "phone",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "OPTIONAL",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_x86_64_only_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 :
Element | Saisie | Description |
---|---|---|
instances |
Tableau | Tableau d'objets JSON, chacun décrivant un seul appareil dans le groupe d'appareils multilocataires à lancer. |
@import |
Chaîne | Indique le type d'appareil et définit les valeurs par défaut pour la configuration de l'appareil. Les types d'appareils compatibles sont phone et wearable . |
vm |
Objet | Spécifie les propriétés qui s'appliquent à l'environnement de VM spécifique à l'instance de l'appareil. |
memory_mb |
Nombre | Quantité de mémoire à allouer à une VM spécifique, en mégaoctets. |
setupwizard_mode |
Chaîne | Indique si l'assistant de configuration de l'appareil est exécuté pour l'utilisateur lors de la première exécution de l'appareil. Les options compatibles pour le mode Assistant de configuration sont DISABLED , OPTIONAL et REQUIRED . |
cpus |
Nombre | Nombre de processeurs virtuels alloués à la VM. |
disk |
Objet | Spécifie les propriétés permettant de localiser les artefacts du système de fichiers utilisés pour exécuter une seule instance de VM. |
default_build |
Chaîne | Chemin d'accès au système de fichiers local vers un dossier contenant une image de périphérique virtuel Cuttlefish. |
Pour obtenir d'autres exemples de fichiers de configuration distribués avec cvd
, consultez le dossier cvd_test_configs
dans l'arborescence du code Cuttlefish.
Contrôler les instances mutualisées
Cette section explique comment créer et supprimer des appareils dans un scénario multitenant. 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ée unique : lancez plusieurs appareils à partir d'une seule image invitée.
Démarrer plusieurs VM à partir d'une configuration canonique
Pour créer plusieurs VM à l'aide d'une configuration canonique décrivant le scénario multitenant, appelez la commande cvd create
avec le préfixe d'option --config_file=
comme suit :
cvd create --config_file=CONFIG_FILE
Voici un exemple d'appel faisant référence à un fichier de configuration canonique nommé /etc/phone.json
.
cvd create --config_file=/etc/phone.json
Démarrer plusieurs VM à partir d'une seule image invitée
Pour lancer plusieurs appareils Cuttlefish à l'aide d'une seule image invitée, utilisez l'indicateur --num_instances=N
, où N correspond au nombre d'appareils à lancer. Par défaut, les appareils commencent par le numéro d'instance 1
.
cvd create --num_instances=N
Pour modifier le numéro de l'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 create --base_instance_num=N
Lancez Cuttlefish avec un compte utilisateur correspondant à
vsoc-NN
, où NN est le numéro d'instance de base au format à deux chiffres. Par exemple, pour lancer Cuttlefish avec un compte utilisateurvsoc-01
, exécutez la commande suivante :cvd create --base_instance_num=1
Arrêter des appareils
Pour arrêter tous les appareils lancés par la dernière invocation cvd create
, exécutez la commande suivante :
cvd stop
Pour redémarrer les appareils qui ont été arrêtés, exécutez la commande suivante :
cvd start
Pour supprimer complètement un appareil du système, exécutez la commande suivante :
cvd remove