Seppia: multi-tenancy

L'architettura multi-tenancy della seppia consente alla tua macchina host di avviare con una singola chiamata di avvio.

Queste diverse macchine virtuali Cuttlefish possono condividere parte del disco host per risparmiare spazio su disco. Ogni macchina virtuale riceve overlay del disco distinto che copre le partizioni Android (ad esempio super, userdata e boot). Qualsiasi modifica al disco guest viene un overlay di disco specifico per gli ospiti, che offre a ogni macchina virtuale Cuttlefish un copia alla scrittura delle partizioni dei dischi. Man mano che ogni dispositivo virtuale scrive di più dati alla sua vista sul disco, i file overlay sul disco host aumentano perché stanno acquisendo il delta tra lo stato originale e lo stato attuale.

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

Numeri di istanza

I dispositivi seppia creano e consumano risorse nell'host collegato al proprio numero di istanza. Ad esempio, una connessione adb è esposta tramite una porta TCP socket del server alla porta 6520 per il dispositivo Cuttlefish con numero di istanza 1. Quando vengono avviate più istanze, viene creato un socket del server TCP sulla porta 6520 per il primo dispositivo, 6521 per il secondo e incrementa il valore di porta di 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 Macchine virtuali Seppia. Per impostazione predefinita, Pacchetto Debian cuttlefish-base esegue il provisioning delle risorse per le istanze numeri da 1 a 10.

Questo valore può essere modificato modificando num_cvd_accounts in /etc/default/cuttlefish-host-resources e riavvio di cuttlefish-host-resources eseguendo il comando seguente:

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 un ambiente multi-tenant in questo scenario.

Di seguito viene descritto il formato utilizzato per i file JSON di configurazione canonici (sostituisci i segnaposto con le configurazioni dei dispositivi).

{
  "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_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 in gruppo di dispositivi multi-tenant da avviare.
@import Stringa Indica il tipo di dispositivo e imposta i relativi valori predefiniti configurazione. I tipi di dispositivi supportati sono phone e wearable.
vm Oggetto Specifica le proprietà che si applicano all'ambiente VM specifico per un'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 configurazione guidata del dispositivo viene eseguita o meno per l'utente corsa 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 alla localizzazione degli artefatti del file system utilizzati per l'esecuzione di una singola istanza VM.
default_build Stringa Percorso del file system locale di una cartella contenente un dispositivo virtuale Cuttlefish dell'immagine.

Per altri esempi di file di configurazione distribuiti con cvd, consulta la cvd_test_configs nell'albero del codice di Cuttlefish.

Controlla le istanze multi-tenant

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

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

Avvia più VM dalla configurazione canonica

Per avviare più VM utilizzando una configurazione canonica che descriva scenario multi-tenant, richiama il comando cvd start con --config_file= come segue:

cvd start --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 start --config_file=/etc/phone.json

Avvia più VM da una singola immagine guest

Per avviare più dispositivi Seppia utilizzando una singola immagine ospite, utilizza la Flag --num_instances=N, dove N è il numero di dispositivi da lanciare. Per impostazione predefinita, i dispositivi vengono avviati dal numero di istanza 1.

cvd start --num_instances=N

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

  • Aggiungi il flag --base_instance_num=N con N come primo numero di istanza.

    cvd start --base_instance_num=N
    
  • Lancia seppia con una corrispondenza tra account utente vsoc-NN, dove NN è l'istanza di base numero in formato a due cifre. Ad esempio, per avviare Seppia con un utente account vsoc-01, esegui:

    cvd start --base_instance_num=1
    

Come interrompere i dispositivi

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

cvd stop