Seppia: multi-tenancy

L'architettura multi-tenancy 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 delle risorse del disco host, consentendo di risparmiare spazio su disco. Ogni macchina virtuale ottiene un overlay del disco distinto che copre le partizioni di Android (ad esempio super,userdata, boot). Qualsiasi modifica al disco guest viene inserita in un overlay del disco specifico per il guest, fornendo a ogni macchina virtuale Cuttlefish una visualizzazione di copia su scrittura delle relative partizioni del disco. Man mano che ogni dispositivo virtuale scrive più dati nella propria visualizzazione del disco, le dimensioni dei file in overlay sul disco host aumentano perché acquisiscono il delta tra lo stato originale e il loro stato corrente.

I file di overlay possono essere reimpostati per ripristinare lo stato originale del disco Cuttlefish. Questo processo è noto come powerwashing.

Numeri di istanze

I dispositivi Cuttlefish creano e consumano risorse sull'host associate al loro numero di istanza. Ad esempio, una connessione adb è esposta tramite una socket del server TCP sulla porta 6520 per il dispositivo Cuttlefish con il numero di istanza 1. Quando vengono lanciate più istanze, viene creato un socket del server TCP sulla porta6520 per il primo dispositivo, 6521 per il secondo dispositivo e viene incrementato il numero di porta per ogni dispositivo aggiuntivo.

Modifica il numero massimo di istanze supportate

Le risorse lato host, ad esempio i dispositivi di rete TAP, devono essere preallocate per le macchine virtuali Cuttlefish. Per impostazione predefinita, il pacchetto Debian cuttlefish-base esegue il provisioning delle risorse per i numeri di istanza da 1 a 10.

Per cambiare questo valore, modifica num_cvd_accounts in /etc/default/cuttlefish-host-resources e riavvia il servizio cuttlefish-host-resources eseguendo questo comando:

sudo systemctl restart cuttlefish-host-resources

Configurazioni canoniche

Le configurazioni canoniche rappresentano la configurazione dei dispositivi Cuttlefish in formato JSON. Puoi 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 canonici (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 file di configurazione di esempio di una configurazione con due dispositivi, un telefono 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 Digitazione Descrizione
instances Array array di oggetti JSON, ognuno dei quali descrive un singolo dispositivo nel gruppo di dispositivi multi-tenant 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, espressa 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 elementi del file system utilizzati per eseguire 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 cvd_test_configs cartella nella struttura del codice di Cuttlefish.

Controlla le istanze multi-tenant

Questa sezione descrive come creare ed eliminare i 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 ospite: avvia più dispositivi da una singola immagine ospite.

Avvia più VM dalla configurazione canonica

Per creare più VM utilizzando una configurazione canonica che descriva lo scenario multi-tenant, invoca 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 ospite, 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 istanze iniziali, 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 Seppia con un account utente vsoc-01, esegui:

    cvd create --base_instance_num=1
    

Come arrestare i dispositivi

Per interrompere tutti i dispositivi avviati dall'ultima chiamata di cvd create, esegui:

cvd stop

Per riavviare i dispositivi che sono stati arrestati, esegui:

cvd start

Per rimuovere completamente un dispositivo dal sistema, procedi nel seguente modo:

cvd remove