Sepia: Mehrinstanzenfähigkeit

Mit der Mehrmandantenfähigkeit von Cuttlefish kann Ihr Hostcomputer mehrere virtuelle Gastgeräte mit einem einzigen Startaufruf starten.

Diese Cuttlefish-VMs können einige der Host-Speicherressourcen gemeinsam nutzen, wodurch Sie Speicherplatz sparen. Jede virtuelle Maschine erhält ein eigenes Laufwerk-Overlay, das die Android-Partitionen (z. B. super, userdata, boot) abdeckt. Alle Änderungen am Gastlaufwerk werden in einem gastspezifischen Laufwerk-Overlay gespeichert. So erhält jede Cuttlefish-VM eine Copy-on-Write-Ansicht ihrer Laufwerkpartitionen. Da jedes virtuelle Gerät mehr Daten in seine Ansicht des Laufwerks schreibt, werden die Overlay-Dateien auf dem Hostlaufwerk größer, da sie das Delta zwischen dem ursprünglichen und ihrem aktuellen Zustand erfassen.

Die Overlay-Dateien können zurückgesetzt werden, um das Cuttlefish-Laufwerk in den ursprünglichen Zustand zurückzuversetzen. Dieser Vorgang wird als Powerwashing bezeichnet.

Instanznummern

Cuttlefish-Geräte erstellen und verbrauchen Ressourcen auf dem Host, die mit ihrer Instanznummer verknüpft sind. Beispielsweise wird eine adb-Verbindung über einen TCP-Server-Socket an Port 6520 für das Cuttlefish-Gerät mit der Instanznummer 1 freigegeben. Wenn mehrere Instanzen gestartet werden, wird ein TCP-Server-Socket an Port 6520 für das erste Gerät, 6521 für das zweite Gerät usw. erstellt. Die Portnummer wird für jedes zusätzliche Gerät erhöht.

Maximale Anzahl unterstützter Instanzen ändern

Hostseitige Ressourcen wie TAP-Netzwerkgeräte müssen für Cuttlefish-VMs vorab zugewiesen werden. Standardmäßig stellt das Debian-Paket cuttlefish-base Ressourcen für die Instanznummern 1 bis 10 bereit.

Sie können dies ändern, indem Sie num_cvd_accounts in /etc/default/cuttlefish-host-resources ändern und den cuttlefish-host-resources-Dienst mit dem folgenden Befehl neu starten:

sudo systemctl restart cuttlefish-host-resources

Kanonische Konfigurationen

Kanonische Konfigurationen stellen die Konfiguration für Cuttlefish-Geräte im JSON-Format dar. Sie können kanonische JSON-Konfigurationsdateien erstellen, um die Konfiguration mehrerer Cuttlefish-Geräte in einem Mehrfachkundenszenario zu beschreiben.

Im Folgenden wird das Format beschrieben, das für kanonische JSON-Konfigurationsdateien verwendet wird. Ersetzen Sie die Platzhalter durch Gerätekonfigurationen.

{
  "common": {
    CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
  },
  "instances": [
    {
      FIRST_DEVICE_CONFIGURATION
    },
    {
      NTH_DEVICE_CONFIGURATION
    }
  ]
}

Das folgende Beispiel zeigt eine Konfigurationsdatei für eine Einrichtung mit zwei Geräten, einem Smartphone und einem Wearable:

{
  "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"
      }
    }
  ]
}

In dieser Tabelle werden die Elemente beschrieben, die in der Beispielkonfiguration mit zwei Geräten verwendet werden:

Element Eingeben Beschreibung
instances Matrix Array von JSON-Objekten, die jeweils ein einzelnes Gerät in der mehrmandantenfähigen Gerätegruppe beschreiben, die gestartet werden soll.
@import String Gibt den Gerätetyp an und legt Standardwerte für die Gerätekonfiguration fest. Die unterstützten Gerätetypen sind phone und wearable.
vm Objekt Gibt Attribute an, die für die VM-Umgebung für die Geräteinstanz gelten.
memory_mb Zahl Die Größe des Arbeitsspeichers, der einer bestimmten VM in Megabyte zugewiesen werden soll.
setupwizard_mode String Gibt an, ob der Einrichtungsassistent für das Gerät beim ersten Start ausgeführt wird. Die unterstützten Optionen für den Modus des Einrichtungsassistenten sind DISABLED, OPTIONAL und REQUIRED.
cpus Zahl Die Anzahl der virtuellen CPUs, die der VM zugewiesen sind.
disk Objekt Gibt Attribute an, die für die Suche nach Dateisystemartefakten relevant sind, die zum Ausführen einer einzelnen VM-Instanz verwendet werden.
default_build String Lokaler Dateisystempfad zu einem Ordner mit einem Cuttlefish-virtuellen Geräte-Image.

Weitere Beispiele für Konfigurationsdateien, die mit cvd ausgeliefert werden, finden Sie im Ordner cvd_test_configs im Cuttlefish-Codebaum.

Mehrmandantenfähige Instanzen steuern

In diesem Abschnitt wird beschrieben, wie Geräte in einem mandantenfähigen Szenario erstellt und gelöscht werden. Mit den folgenden Optionen können Sie mehrere Sepia-Geräte starten:

  • Kanonische Konfiguration: Sie können benutzerdefinierte Konfigurationen für jedes Gerät mit einer JSON-Konfigurationsdatei starten, die die Liste der zu startenden Instanzen beschreibt.
  • Einzelnes Gast-Image: Mehrere Geräte können über ein einzelnes Gast-Image gestartet werden.

Mehrere VMs aus der kanonischen Konfiguration starten

Wenn Sie mehrere VMs mit einer kanonischen Konfiguration erstellen möchten, die das mehrmandantenfähige Szenario beschreibt, rufen Sie den Befehl cvd create mit dem Flag-Präfix --config_file= so auf:

cvd create --config_file=CONFIG_FILE

Im folgenden Beispiel wird auf eine kanonische Konfigurationsdatei namens /etc/phone.json verwiesen.

cvd create --config_file=/etc/phone.json

Mehrere VMs aus einem einzigen Gast-Image starten

Wenn Sie mehrere Cuttlefish-Geräte mit einem einzigen Gast-Image starten möchten, verwenden Sie das Flag --num_instances=N, wobei N die Anzahl der zu startenden Geräte ist. Standardmäßig beginnen Geräte mit der Instanznummer 1.

cvd create --num_instances=N

Führen Sie einen der folgenden Schritte aus, um die Ausgangsinstanznummer zu ändern:

  • Fügen Sie das Flag --base_instance_num=N mit N als erster Instanznummer hinzu.

    cvd create --base_instance_num=N
    
  • Starten Sie Cuttlefish mit einem Nutzerkonto, das vsoc-NN entspricht, wobei NN die zweistellige Basisinstanznummer ist. Wenn Sie Cuttlefish beispielsweise mit dem Nutzerkonto vsoc-01 starten möchten, führen Sie Folgendes aus:

    cvd create --base_instance_num=1
    

Geräte anhalten

Wenn Sie alle Geräte beenden möchten, die durch die letzte cvd create-Aufruf ausgeführt wurden, führen Sie Folgendes aus:

cvd stop

Führen Sie folgenden Befehl aus, um angehaltene Geräte neu zu starten:

cvd start

So entfernen Sie ein Gerät vollständig aus dem System:

cvd remove