Il multitenancy di Cuttlefish consente alla macchina host di avviare più dispositivi guest virtuali con una singola chiamata di avvio.
Queste più macchine virtuali Cuttlefish possono condividere alcune risorse del disco host, consentendoti di risparmiare spazio su disco. Ogni macchina virtuale ottiene un overlay del disco distinto che copre le partizioni Android (ad esempio super
, userdata
, boot
). Qualsiasi modifica al disco guest viene inserita in un overlay del disco specifico per il guest, in modo che ogni macchina virtuale Cuttlefish abbia una visualizzazione copy-on-write delle partizioni del disco. Man mano che ogni dispositivo virtuale scrive più
dati nella sua visualizzazione del disco, le dimensioni dei file overlay sul disco host aumentano
perché acquisiscono la differenza tra lo stato originale e lo stato
attuale.
I file di overlay possono essere reimpostati per riportare il disco Cuttlefish al suo stato originale. Questa procedura è nota come powerwash.
Numeri di istanza
I dispositivi Cuttlefish creano e utilizzano risorse sull'host associate al relativo
numero di istanza. Ad esempio, una connessione adb
viene esposta tramite un socket server TCP sulla porta 6520
per il dispositivo Cuttlefish con numero di istanza 1
.
Quando vengono avviate più istanze, viene creato un socket server TCP sulla porta
6520
per il primo dispositivo, 6521
per il secondo dispositivo e il numero di porta viene incrementato
per ogni dispositivo aggiuntivo.
Modifica il numero massimo di istanze supportate
Le risorse lato host, come i dispositivi di rete TAP, devono essere preallocate per le macchine virtuali Cuttlefish. Per impostazione predefinita, il pacchetto Debian cuttlefish-base fornisce risorse per i numeri di istanza da 1
a 10
.
Puoi modificare questo valore modificando num_cvd_accounts
in
/etc/default/cuttlefish-host-resources
e riavviando il
servizio cuttlefish-host-resources
eseguendo il seguente comando:
sudo systemctl restart cuttlefish-host-resources
Configurazioni canoniche
Le configurazioni canoniche rappresentano la configurazione per i dispositivi Cuttlefish in formato JSON. Puoi creare file JSON di configurazione canonica per descrivere la configurazione di più dispositivi Cuttlefish in uno scenario multi-tenant.
Di seguito viene descritto il formato utilizzato per i file JSON di configurazione canonica (sostituisci i segnaposto con le configurazioni del dispositivo).
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
Di seguito è riportato un esempio di file di configurazione di una configurazione con due dispositivi, uno smartphone e un dispositivo indossabile:
{
"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"
}
}
]
}
Questa tabella descrive gli elementi utilizzati nella configurazione di esempio con due dispositivi:
Elemento | Tipo | Descrizione |
---|---|---|
instances |
Array | Array di oggetti JSON, ognuno dei quali descrive un singolo dispositivo nel gruppo multitenant di dispositivi da avviare. |
@import |
Stringa | Indica il tipo di dispositivo e imposta i valori predefiniti per la configurazione del dispositivo. I tipi di dispositivi supportati sono
phone e wearable . |
vm |
Oggetto | Specifica le proprietà che si applicano all'ambiente VM specifico dell'istanza del dispositivo. |
memory_mb |
Numero | La quantità di memoria da allocare per una VM specifica in megabyte. |
setupwizard_mode |
Stringa | Specifica se la procedura guidata di configurazione del dispositivo viene eseguita per l'utente alla prima
esecuzione del dispositivo. Le opzioni supportate per la modalità di configurazione guidata sono
DISABLED , OPTIONAL e
REQUIRED . |
cpus |
Numero | Il numero di CPU virtuali allocate alla VM. |
disk |
Oggetto | Specifica le proprietà pertinenti per individuare gli artefatti del file system utilizzati per l'esecuzione di una singola istanza VM. |
default_build |
Stringa | Percorso del file system locale a una cartella contenente un'immagine del dispositivo virtuale Cuttlefish. |
Per altri esempi di file di configurazione distribuiti con cvd
, consulta la cartella
cvd_test_configs
nell'albero del codice di Cuttlefish.
Controllare le istanze multi-tenant
Questa sezione descrive come creare ed eliminare dispositivi in uno scenario multi-tenant. Puoi avviare più dispositivi Cuttlefish utilizzando le seguenti opzioni:
- Configurazione canonica: avvia configurazioni personalizzate per ogni dispositivo utilizzando un file di configurazione JSON che descrive l'elenco delle istanze da avviare.
- Singola immagine guest: avvia più dispositivi da una singola immagine guest.
Avviare più VM dalla configurazione canonica
Per creare più VM utilizzando una configurazione canonica che descrive lo scenario multi-tenant, richiama il comando cvd create
con il prefisso del flag --config_file=
come segue:
cvd create --config_file=CONFIG_FILE
Di seguito è riportato un esempio di chiamata che fa riferimento a un file di configurazione canonico denominato
/etc/phone.json
.
cvd create --config_file=/etc/phone.json
Avvia più VM da una singola immagine guest
Per avviare più dispositivi Cuttlefish utilizzando una singola immagine guest, utilizza il flag --num_instances=N
, dove N è il numero di dispositivi da avviare. Per impostazione predefinita, i dispositivi iniziano dal numero di istanza 1
.
cvd create --num_instances=N
Per modificare il numero di istanza iniziale, procedi in uno dei seguenti modi:
Aggiungi il flag
--base_instance_num=N
con N come primo numero di istanza.cvd create --base_instance_num=N
Avvia Cuttlefish con un account utente corrispondente a
vsoc-NN
, dove NN è il numero dell'istanza di base in formato a due cifre. Ad esempio, per avviare Cuttlefish con un account utentevsoc-01
, esegui:cvd create --base_instance_num=1
Come interrompere i dispositivi
Per arrestare tutti i dispositivi avviati dall'ultima chiamata cvd create
, esegui:
cvd stop
Per riavviare i dispositivi che sono stati arrestati, esegui:
cvd start
Per rimuovere completamente un dispositivo dal sistema, esegui:
cvd remove