Sepia: Mehrinstanzenfähigkeit

Mit Cuttlefish-Multi-Tenancy können auf Ihrem Hostcomputer mehrere virtuelle Gastgeräte mit einem einzigen Startaufruf gestartet werden.

Diese mehreren virtuellen Cuttlefish-Maschinen können einige der Host-Festplattenressourcen gemeinsam nutzen, sodass Sie Festplattenspeicher sparen können. Jede VM erhält ein eigenes Laufwerk-Overlay für die Android-Partitionen (z. B. super, userdata, boot). Alle Änderungen am Gastlaufwerk werden in einem gastspezifischen Laufwerk-Overlay gespeichert. So erhält jede Cuttlefish-VM eine Copy-on-Write-Ansicht ihrer Laufwerkspartitionen. Wenn jedes virtuelle Gerät mehr Daten in seine Ansicht der Festplatte schreibt, werden die Overlay-Dateien auf der Hostfestplatte größer, da sie die Differenz zwischen dem ursprünglichen und dem aktuellen Zustand erfassen.

Die Overlay-Dateien können zurückgesetzt werden, um die Cuttlefish-Festplatte in ihren ursprünglichen Zustand zurückzuversetzen. Dieser Vorgang wird als Zurücksetzen auf die Werkseinstellungen bezeichnet.

Instanznummern

Cuttlefish-Geräte erstellen und nutzen Ressourcen auf dem Host, die an ihre Instanznummer gebunden sind. Beispielsweise wird eine adb-Verbindung über einen TCP-Serversocket am Port 6520 für das Cuttlefish-Gerät mit der Instanznummer 1 bereitgestellt. Wenn mehrere Instanzen gestartet werden, wird für das erste Gerät ein TCP-Serversocket an Port 6520, für das zweite Gerät an Port 6521 und für jedes weitere Gerät ein inkrementierter Port erstellt.

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 Instanznummern von 1 bis 10 bereit.

Dies kann durch Ändern von num_cvd_accounts in /etc/default/cuttlefish-host-resources und Neustarten des cuttlefish-host-resources-Dienstes mit dem folgenden Befehl geändert werden:

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 Konfigurations-JSON-Dateien erstellen, um die Konfiguration mehrerer Cuttlefish-Geräte in einem Multi-Tenant-Szenario zu beschreiben.

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

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

Im Folgenden finden Sie ein Beispiel für 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_only_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 Array Array von JSON-Objekten, die jeweils ein einzelnes Gerät in der Multi-Tenant-Gruppe von Geräten beschreiben, die gestartet werden sollen.
@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 Eigenschaften an, die für die VM-Umgebung gelten, die für die Geräteinstanz spezifisch ist.
memory_mb Zahl Die Menge an Arbeitsspeicher, die einer bestimmten VM in Megabyte zugewiesen werden soll.
setupwizard_mode String Gibt an, ob der Einrichtungsassistent für das Gerät beim ersten Ausführen des Geräts für den Nutzer ausgeführt wird. Die unterstützten Optionen für den 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, der ein Cuttlefish-Image für ein virtuelles Gerät enthält.

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

Mehrmandantenfähige Instanzen steuern

In diesem Abschnitt wird beschrieben, wie Sie Geräte in einem Mandantenszenario erstellen und löschen. Sie können mehrere Cuttlefish-Geräte mit den folgenden Optionen starten:

  • Kanonische Konfiguration: Starten Sie benutzerdefinierte Konfigurationen für jedes Gerät mit einer JSON-Konfigurationsdatei, in der die Liste der zu startenden Instanzen beschrieben wird.
  • Einzelnes Gast-Image: Sie können mehrere Geräte mit einem einzelnen Gast-Image starten.

Mehrere VMs aus kanonischer Konfiguration starten

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

cvd create --config_file=CONFIG_FILE

Das folgende Beispiel zeigt einen Aufruf, der auf eine kanonische Konfigurationsdatei namens /etc/phone.json verweist.

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

Mehrere VMs aus einem einzelnen Gast-Image starten

Wenn Sie mehrere Cuttlefish-Geräte mit einem einzelnen 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 Startinstanznummer 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 Basisinstanznummer in zweistelliger Form 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 stoppen

So beenden Sie alle Geräte, die durch den letzten cvd create-Aufruf gestartet wurden:

cvd stop

So starten Sie gestoppte Geräte neu:

cvd start

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

cvd remove