Seppie: Multi-locazione

La multi-tenancy di Cuttlefish consente al tuo computer host di avviare più dispositivi guest virtuali con un'unica invocazione di avvio.

Queste più macchine virtuali Cuttlefish possono condividere alcune delle risorse del disco host, consentendo di risparmiare spazio su disco. Ogni macchina virtuale ottiene un overlay del disco distinto che copre le partizioni Android (come super , userdata , boot ). Qualsiasi modifica al disco guest viene inserita in un overlay del disco specifico del guest, offrendo a ciascuna macchina virtuale Cuttlefish una visualizzazione copia su scrittura delle sue partizioni del disco. Man mano che ciascun dispositivo virtuale scrive più dati nella propria visualizzazione del disco, i file di sovrapposizione sul disco host aumentano di dimensioni perché catturano il delta tra lo stato originale e lo stato corrente.

I file di sovrapposizione possono essere ripristinati per riportare il disco Cuttlefish al suo stato originale. Questo processo è noto come powerwashing .

Numeri di istanza

I dispositivi Cuttlefish creano e consumano risorse sull'host legate al loro numero di istanza . Ad esempio, una connessione adb viene esposta tramite un socket del server TCP sulla porta 6520 per il dispositivo Cuttlefish con numero di istanza 1 . Quando vengono avviate più istanze, crea un socket del server TCP sulla porta 6520 per il primo dispositivo, 6521 per il secondo dispositivo e incrementa il numero di porta per ciascun 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 base-cuttlefish fornisce le risorse per le istanze numeriche da 1 a 10 .

Questo può essere cambiato 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. È possibile creare file JSON di configurazione canonici 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 (sostituire 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, un dispositivo telefonico 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_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 Vettore Matrice di oggetti JSON, ciascuno dei quali descrive un singolo dispositivo nel gruppo multi-tenant di dispositivi da avviare.
@import Corda 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 per l'istanza del dispositivo.
memory_mb Numero La quantità di memoria da allocare per una macchina virtuale specifica in megabyte.
setupwizard_mode Corda Specifica se la configurazione guidata 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à rilevanti per individuare gli artefatti del file system utilizzati per l'esecuzione di una singola istanza VM.
default_build Corda Percorso del file system locale a una cartella contenente un'immagine del dispositivo virtuale Cuttlefish.

Per ulteriori esempi di file di configurazione distribuiti con cvd , vedere la cartella cvd_test_configs nell'albero del codice Cuttlefish.

Controlla le istanze multi-tenant

Questa sezione descrive come avviare e arrestare i dispositivi in ​​uno scenario multi-tenant. Puoi avviare più dispositivi Cuttlefish utilizzando le seguenti opzioni:

  • Configurazione canonica : avvia configurazioni personalizzate per ciascun dispositivo utilizzando un file di configurazione JSON che descrive l'elenco delle istanze da avviare.
  • Immagine ospite singola : avvia più dispositivi da una singola immagine ospite.

Avvia più VM dalla configurazione canonica

Per avviare più macchine virtuali utilizzando una configurazione canonica che descrive lo scenario multi-tenant, richiamare il comando cvd start con il prefisso --config_file= flag come segue:

cvd start --config_file=CONFIG_FILE

Di seguito è riportato un esempio di invocazione che fa riferimento a un file di configurazione canonico denominato /etc/phone.json .

cvd start --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 start --num_instances=N

Per modificare il numero di istanza iniziale, effettuare una delle seguenti operazioni:

  • Aggiungi il flag --base_instance_num= N con N come numero della prima istanza.

    cvd start --base_instance_num=N
    
  • Avvia Cuttlefish con un account utente corrispondente vsoc- NN , dove NN è il numero dell'istanza di base sotto forma di due cifre. Ad esempio, per avviare Cuttlefish con un account utente vsoc- 01 , eseguire:

    cvd start --base_instance_num=1
    

Come fermare i dispositivi

Per arrestare tutti i dispositivi avviati dall'ultima invocazione di cvd start , eseguire:

cvd stop