Cuttlefish: Snapshot und Wiederherstellung

In Android 15 wird eingeführt, wie ein Snapshot eines virtuellen Cuttlefish-Geräts erstellt und wiederhergestellt wird. Wenn Sie einen Snapshot eines Cuttlefish-Geräts erstellen, wird der Status des Geräts in einem Image auf der Festplatte gespeichert. Anschließend können Sie den Snapshot wiederherstellen, um ein Cuttlefish-Gerät in den zuvor gespeicherten Zustand zu versetzen.

Sie können Snapshots in verschiedenen automatisierten oder manuellen Workflows verwenden. Wenn Sie eine Prozedur ausführen, die das Gerät ändert, können Sie einen Snapshot des Geräts erstellen, um es in einen bestimmten Zustand zurückversetzen zu können. Wenn Sie beispielsweise Testsuiten ausführen, die den Status des Geräts ändern und möglicherweise Probleme oder Instabilitäten bei den folgenden Tests verursachen können, können Sie einen Snapshot erstellen, um das Gerät nach einem Test in einen gespeicherten Zustand zurückzusetzen. So wird sichergestellt, dass nachfolgende Tests sauber ausgeführt werden.

Ein weiterer Beispiel-Workflow, in dem Snapshots nützlich sind, ist das Testen des Verhaltens einer App. Wenn Sie das Verhalten einer App basierend auf einer Reihe von Aktionen testen, können Sie während der Ausführung der App zwischen den Aktionen einen Snapshot erstellen. So können Sie den Snapshot wiederherstellen, ohne von vorn beginnen zu müssen. Wenn das Starten eines Spiels beispielsweise lange dauert, können Sie einen Snapshot erstellen, nachdem Sie das Hauptmenü erreicht haben. So können Sie das Gerät in diesen Zustand zurücksetzen und die Startzeit überspringen.

Snapshot eines Cuttlefish-Geräts erstellen

Wenn Sie einen Snapshot eines Geräts erstellen, muss das Cuttlefish-Gerät angehalten werden, damit es sich in einem stabilen Zustand befindet. Wenn das Gerät angehalten wird, werden alle virtuellen CPUs und Geräte beendet und alle Puffer übertragen ihren Status an die VM. Im Snapshot werden dann der vCPU-Status, der Arbeitsspeicher und der Gerätestatus in einem angegebenen Zielordner auf der Festplatte gespeichert.

VirtiosFS wird nicht unterstützt und muss beim Erstellen eines Snapshots deaktiviert werden. Wenn Sie VirtioFS deaktivieren möchten, übergeben Sie das Argument --enable_virtiofs=false, wenn Sie cvd create oder cvd start ausführen.

Für Snapshots wird nur der SwiftShader-GPU-Modus (guest_swiftshader) unterstützt. Andere beschleunigte Grafikmodi werden nicht unterstützt.

In den folgenden Schritten wird beschrieben, wie Sie ein Cuttlefish-Gerät starten und einen Snapshot erstellen.

  1. Starten Sie ein Gerät und deaktivieren Sie VirtioFS. Anschließend können Sie das Gerät verwenden.

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. Erstellen Sie einen Snapshot, indem Sie cvd snapshot_take mit den folgenden Flags ausführen:

    • --force: Wenn am angegebenen Snapshot-Pfad ein Ordner vorhanden ist, wird durch dieses Flag dafür gesorgt, dass der vorhandene Ordner gelöscht und ein neuer Ordner mit dem Snapshot am Snapshot-Pfad erstellt wird.

    • --auto_suspend: Das Gerät wird vor dem Erstellen des Snapshots in den Ruhezustand versetzt und nach dem Erstellen des Snapshots wieder aktiviert.

    • --snapshot_path: Der angegebene Pfad, in dem ein neuer Ordner mit dem Snapshot erstellt wird.

    cvd snapshot_take --force --auto_suspend \
    --snapshot_path=PATH

Cuttlefish-Gerät wiederherstellen

Beim Wiederherstellen eines Cuttlefish-Geräte-Snapshots muss die Cuttlefish-Instanz, für die der Snapshot erstellt wurde, beendet werden. Wenn die Instanz bereits beendet ist, ist keine weitere Aktion erforderlich und der Snapshot kann wiederhergestellt werden.

Wenn Sie einen Snapshot eines Cuttlefish-Geräts wiederherstellen möchten, starten Sie ein Gerät mit cvd create und geben Sie den Snapshot-Pfad an. Wenn sich die Basisinstanznummer des Cuttlefish-Geräts, auf dem der Snapshot erstellt wurde, von der Basisinstanznummer der aktuellen Cuttlefish-Instanz unterscheidet, übergeben Sie diese Basisinstanznummer mit dem Flag --base_instance_num.

cvd create --snapshot_path=PATH \
--base_instance_num=ID

Cuttlefish-Gerät anhalten

Sie können ein Cuttlefish-Gerät anhalten, ohne einen Snapshot zu erstellen. In diesem Fall wird kein Speicherplatz zum Speichern des Status verwendet. So wird ein Cuttlefish-Gerät in den Ruhezustand versetzt:

cvd suspend

Cuttlefish-Gerät fortsetzen

So setzen Sie ein angehaltenes Cuttlefish-Gerät fort:

cvd resume

Snapshot-/Wiederherstellungsfunktion validieren

Die Funktion „Snapshot/Restore“ kann mit dem folgenden Test überprüft werden:

atest SnapshotTest