Cuttlefish: Instantánea y restablecimiento

Android 15 presenta cómo tomar una instantánea y restablecer una instantánea de un dispositivo virtual Cuttlefish. Tomar una instantánea de un dispositivo Cuttlefish te permite guardar el estado del dispositivo en una imagen en el disco. Luego, puedes restablecer la instantánea para que un dispositivo Cuttlefish vuelva al estado guardado anteriormente.

Puedes usar instantáneas en varios flujos de trabajo automáticos o manuales. Cuando se realiza un procedimiento que modifica el dispositivo, puedes tomar una instantánea del dispositivo para asegurarte de restablecerlo a un estado específico. Por ejemplo, cuando ejecutas paquetes de pruebas que modifican el estado del dispositivo y pueden causar problemas o inestabilidades en las siguientes pruebas, puedes tomar una instantánea para restablecer el dispositivo a un estado guardado después de una prueba, lo que garantiza que las pruebas posteriores se ejecuten de forma correcta.

Otro flujo de trabajo de ejemplo en el que las instantáneas son útiles es cuando se prueba el comportamiento de una app. Cuando pruebas el comportamiento de una app según un conjunto de acciones, puedes tomar una instantánea entre acciones mientras se ejecuta la app para permitirte restablecer a esa instantánea sin tener que reiniciar desde el principio. Por ejemplo, si el inicio de un juego tiene un tiempo de activación largo, puedes tomar una instantánea después de llegar al menú principal para restablecer el dispositivo en ese estado y omitir el tiempo de activación.

Cómo tomar una instantánea de un dispositivo Cuttlefish

Cuando se toma una instantánea de un dispositivo, el dispositivo Cuttlefish debe suspenderse para asegurarse de que el dispositivo Cuttlefish esté en un estado estable. Cuando se suspende el dispositivo, se detienen todas las vCPU y los dispositivos, y todos los búferes envían su estado a la VM. Luego, la instantánea guarda el estado de la CPU virtual, la memoria y el estado del dispositivo en el disco en una carpeta de destino especificada.

VirtiosFS no es compatible y se debe inhabilitar cuando se toma una instantánea. Para inhabilitar VirtioFS, pasa el argumento --enable_virtiofs=false cuando ejecutes cvd create o cvd start.

Solo se admite el modo de GPU de SwiftShader (guest_swiftshader) para instantáneas. No se admiten otros modos de gráficos acelerados.

En los siguientes pasos, se describe el proceso de iniciar un dispositivo Cuttlefish y tomar una instantánea.

  1. Inicia un dispositivo y, luego, inhabilita VirtioFS. (Luego, podrás usar el dispositivo).

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. Ejecuta cvd snapshot_take con las siguientes marcas para tomar una instantánea:

    • --force: Si existe una carpeta en la ruta de acceso de la instantánea especificada, esta marca garantiza que se borre la carpeta existente y se cree una nueva en la ruta de acceso de la instantánea que la contiene.

    • --auto_suspend: Suspende el dispositivo antes de tomar la instantánea y lo reanuda después de tomarla.

    • --snapshot_path: Es la ruta de acceso especificada en la que se crea una carpeta nueva con la instantánea.

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

Cómo restablecer un dispositivo Cuttlefish

Cuando se restablece una instantánea del dispositivo Cuttlefish, se debe detener la instancia de Cuttlefish para la que se tomó la instantánea. Si la instancia ya está detenida, no se requiere ninguna acción adicional y se puede restablecer la instantánea.

Para restablecer una instantánea de un dispositivo Cuttlefish, inicia un dispositivo con cvd create e incluye la ruta de acceso de la instantánea. Si el número de instancia base del dispositivo Cuttlefish en el que se tomó la instantánea es diferente del número de instancia base de la instancia actual de Cuttlefish, pasa ese número de instancia base usando la marca --base_instance_num.

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

Cómo suspender un dispositivo de Cuttlefish

Puedes suspender un dispositivo Cuttlefish sin tomar una instantánea (no se usa espacio en el disco para guardar el estado). Para suspender un dispositivo Cuttlefish, ejecuta lo siguiente:

cvd suspend

Cómo reanudar un dispositivo Cuttlefish

Para reanudar un dispositivo Cuttlefish suspendido, ejecuta lo siguiente:

cvd resume

Valida la función Snapshot/Restore

La función Instantánea/Restablecer se puede validar ejecutando la siguiente prueba:

atest SnapshotTest