Sepia: Mehrinstanzenfähigkeit

Mit der Multi-Tenant-Funktion von Cuttlefish können Sie auf Ihrem Hostcomputer mehrere virtuelle Gastgeräte mit einer einzigen Startaufforderung starten.

Diese Cuttlefish-VMs können einige der Speicherressourcen des Hosts 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, nehmen die Overlay-Dateien auf dem Hostlaufwerk zu, da sie die Differenz zwischen dem ursprünglichen und dem aktuellen Status erfassen.

Die Overlay-Dateien können zurückgesetzt werden, um das Cuttlefish-Laufwerk in seinen ursprünglichen Zustand zu versetzen. Dieser Vorgang wird als Hochdruckreinigung 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.

Das lässt sich ä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
    }
  ]
}

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_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 zu startenden Multi-Tenant-Gruppe von Geräten beschreiben.
@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 spezifisch für die Geräteinstanz gelten.
memory_mb Zahl Die Menge des Arbeitsspeichers, die einer bestimmten VM zugewiesen werden soll, in Megabyte.
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 „Einrichtungsassistent“ sind DISABLED, OPTIONAL und REQUIRED.
cpus Zahl Die Anzahl der virtuellen CPUs, die der VM zugewiesen sind.
disk Objekt Gibt Eigenschaften an, die für das Auffinden von 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.

Mehrmandanteninstanzen verwalten

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

  • Kanonische Konfiguration: Sie können benutzerdefinierte Konfigurationen für jedes Gerät mithilfe 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 Mehrfachkundenszenario beschreibt, rufen Sie den Befehl cvd create mit dem Flag-Präfix --config_file= 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

So ändern Sie die Startinstanznummer:

  • 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 mit vsoc-NN übereinstimmt. Dabei ist NN die zweistellige Basisinstanznummer. 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 zum Neustarten von angehaltenen Geräten Folgendes aus:

cvd start

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

cvd remove