Cuttlefish: スナップショットの作成と復元

Android 15(AOSP 試験運用版)では、Cuttlefish 仮想デバイスのスナップショットの作成 / 復元方法が導入されました。Cuttlefish デバイスのスナップショットを作成することで、ディスク上のイメージにデバイスの状態を保存できます。そのスナップショットを復元して、Cuttlefish デバイスを以前保存した状態に戻すことができます。

スナップショットは、さまざまな自動化ワークフローや手動ワークフローで使用できます。デバイスを変更する手順を行った場合は、デバイスのスナップショットを作成することでデバイスを指定の状態に戻すことができます。たとえば、デバイスの状態を変更するテストスイートを実行すると、後続のテストで問題や不安定さが生じる可能性がある場合は、スナップショットを作成すると、テスト後にデバイスを保存した状態に復元できるため、後続のテストを適切に実行できます。

また、アプリの動作をテストする際にスナップショットが役立つワークフロー例もあります。一連の操作に基づくアプリの動作をテストする場合は、アプリの実行中に操作と操作の間でスナップショットを作成すると、最初からやり直す必要なくそのスナップショットに復元できます。たとえば、起動時間が長いゲームでは、メインメニューが表示された後でスナップショットを作成すれば、起動時間をスキップしてその状態にデバイスを復元できます。

Cuttlefish デバイスのスナップショットを作成する

デバイスのスナップショットを作成する場合は、Cuttlefish デバイスが安定した状態になるよう Cuttlefish デバイスを一時停止する必要があります。デバイスを一時停止すると、vCPU とデバイスがすべて停止し、すべてのバッファで状態が VM にプッシュされます。その後、スナップショットを作成すると、vCPU の状態、メモリ、デバイスの状態がディスクの指定された保存先フォルダに保存されます。

VirtioFS はサポートされていません。スナップショットを作成する場合は無効にする必要があります。VirtioFS を無効にするには、cvd start の実行時に引数 --enable_virtiofs=false を渡します。

スナップショットでサポートされている GPU モードは SwiftShader(guest_swiftshader)のみです。その他のアクセラレーテッド グラフィック モードはサポートされていません。

Cuttlefish デバイスを起動してスナップショットを作成する手順は以下のとおりです。

  1. VirtioFS を無効にした状態で、デバイスを起動します(デバイスを使用できるようになります)。

    cvd start --enable_virtiofs=false --gpu_mode=guest_swiftshader
    
  2. 以下のフラグを指定して cvd snapshot_take を実行し、スナップショットを作成します。

    • --force: 指定されたスナップショット パスにフォルダがある場合、このフラグによって既存のフォルダが削除され、そのスナップショット パスに、スナップショットを含む新しいフォルダが作成されます。

    • --auto_suspend: スナップショットの作成前にデバイスを一時停止し、スナップショットが作成されたらデバイスを再開します。

    • --snapshot_path: スナップショットを含む新しいフォルダが作成される、指定パスです。

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

Cuttlefish デバイスを復元する

Cuttlefish デバイスのスナップショットを復元する場合は、スナップショットを作成した Cuttlefish インスタンスを停止する必要があります。インスタンスがすでに停止している場合は、特に他の操作は必要ありません。スナップショットを復元できます。

Cuttlefish デバイスのスナップショットを復元するには、cvd start でデバイスを起動し、スナップショット パスを含めます。スナップショットを作成した Cuttlefish デバイスのベース インスタンス番号が現在の Cuttlefish インスタンスのベース インスタンス番号と異なる場合は、--base_instance_num フラグを使用してそのベース インスタンス番号を渡します。

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

Cuttlefish デバイスを一時停止する

スナップショットを作成せずに Cuttlefish デバイスを一時停止できます(状態の保存にディスク容量は使用されません)。Cuttlefish デバイスを一時停止するには、以下を実行します。

cvd suspend

Cuttlefish デバイスを再開する

一時停止した Cuttlefish デバイスを再開するには、以下を実行します。

cvd resume

スナップショットの作成 / 復元機能を検証する

スナップショットの作成 / 復元機能は、以下のテストを実行して検証できます。

atest SnapshotTest