La mutualisation 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 de disque de l'hôte, ce qui vous permet 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é, ce qui donne à chaque machine virtuelle Cuttlefish une vue de 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 l'é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é 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 serveur TCP sur le port 6520 pour l'appareil Cuttlefish avec le numéro d'instance 1.
Lorsque plusieurs instances sont lancées, un socket serveur TCP est créé sur le port 6520 pour le premier appareil, 6521 pour le deuxième, 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 appareils 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.
Vous pouvez modifier ce comportement 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 mutualisé.
Voici le format utilisé pour les fichiers JSON de configuration canonique (remplacez les espaces réservés par les configurations d'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 appareil connecté :
{
"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 :
| Élément | Type | Description |
|---|---|---|
instances |
Tableau | Tableau d'objets JSON, chacun décrivant un seul appareil dans le groupe d'appareils mutualisés à 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 d'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 d'assistant de configuration sont
DISABLED, OPTIONAL et
REQUIRED. |
cpus |
Nombre | Nombre de CPU 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 d'appareil virtuel Cuttlefish image. |
Pour obtenir d'autres exemples de fichiers de configuration distribués avec cvd, consultez le
cvd_test_configs
dossier dans l'arborescence de code Cuttlefish.
Contrôler les instances mutualisées
Cette section explique comment créer et détruire des appareils dans un scénario mutualisé. 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 mutualisé, 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'invocation 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'
--num_instances=N option, où N correspond au nombre
d'appareils à lancer. Par défaut, les appareils commencent à partir du numéro d'instance 1.
cvd create --num_instances=N
Pour modifier le numéro d'instance de départ, effectuez l'une des opérations suivantes :
Ajoutez l'option
--base_instance_num=N, où N correspond au premier numéro d'instance.cvd create --base_instance_num=N
Lancez Cuttlefish avec un compte utilisateur correspondant à
vsoc-NN, où NN correspond au numéro d'instance de base sous forme de 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