Cuttlefish:快照和恢复

Android 15(AOSP 实验版)介绍了如何拍摄 Cuttlefish 虚拟设备的快照以及如何恢复 Cuttlefish 虚拟设备的快照。拍摄 Cuttlefish 设备的快照后,您就可以将设备状态保存在磁盘上的映像中。然后,您可以恢复快照,将 Cuttlefish 设备恢复到之前保存的状态。

您可以在各种自动或手动工作流中使用快照。执行修改设备的程序时,您可以拍摄设备快照,以确保可以将设备恢复到指定状态。例如,在运行会修改设备状态并可能导致后续测试出现问题或不稳定性状况的测试套件时,您可以拍摄快照,以便在测试后将设备恢复到已保存的状态,从而确保后续测试能够顺利运行。

在测试应用的行为时,快照也非常有用。在根据一组操作测试应用的行为时,您可以在应用运行期间的各操作之间拍摄快照,以便您恢复到该快照,而无需从头开始。例如,如果启动游戏需要很长时间,您可以在显示主菜单后拍摄快照,以便将设备恢复到该状态,从而跳过启动时间。

拍摄 Cuttlefish 设备的快照

在拍摄设备快照时,必须暂停 Cuttlefish 设备,以确保 Cuttlefish 设备处于稳定状态。当设备暂停时,所有 vCPU 和设备都会暂停,所有缓冲区都会将其状态推送到虚拟机。然后,快照会将 vCPU 状态、内存和设备状态保存到磁盘的指定目标文件夹中。

VirtioFS 不受支持,因此必须在拍摄快照时将其停用。如需停用 VirtioFS,请在运行 cvd start 时传递参数 --enable_virtiofs=false

快照仅支持 SwiftShader (guest_swiftshader) GPU 模式。不支持其他加速图形模式

以下步骤介绍了启动 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