Cuttlefish: criar e restaurar snapshots

O Android 15 mostra como fazer e restaurar um snapshot de um dispositivo virtual Cuttlefish. Ao tirar um snapshot de um dispositivo Cuttlefish, você salva o estado dele em uma imagem no disco. Em seguida, restaure o snapshot para ativar um dispositivo Cuttlefish no estado salvo anteriormente.

É possível usar snapshots em vários fluxos de trabalho automatizados ou manuais. Ao realizar um procedimento que modifica o dispositivo, você pode tirar um snapshot para garantir que é possível restaurar o dispositivo a um estado especificado. Por exemplo, ao executar conjuntos de testes que modificam o estado do dispositivo e podem causar problemas ou instabilidades nos testes a seguir, é possível fazer um snapshot para restaurar o dispositivo a um estado salvo após um teste, garantindo que os testes subsequentes sejam executados sem problemas.

Outro exemplo de fluxo de trabalho em que os snapshots são úteis é ao testar o comportamento de um app. Ao testar o comportamento de um app com base em um conjunto de ações, é possível tirar um snapshot entre as ações enquanto o app está em execução para restaurar esse snapshot sem precisar reiniciar do começo. Por exemplo, se o lançamento de um jogo tiver um longo tempo de inicialização, você poderá tirar um snapshot depois de chegar ao menu principal para restaurar o dispositivo a esse estado, pulando o tempo de inicialização.

Criar um instantâneo de um dispositivo Cuttlefish

Ao tirar um snapshot de um dispositivo, o Cuttlefish precisa ser suspenso para garantir que ele esteja em um estado estável. Quando o dispositivo é suspenso, todas as vCPUs e dispositivos são interrompidos, e todos os buffers enviam o estado deles para a VM. Em seguida, o snapshot salva o estado da vCPU, a memória e o estado do dispositivo no disco em uma pasta de destino especificada.

O VirtiosFS não é compatível e precisa ser desativado ao criar um snapshot. Para desativar o VirtioFS, transmita o argumento --enable_virtiofs=false ao executar cvd create ou cvd start.

Somente o modo de GPU SwiftShader (guest_swiftshader) é compatível com snapshots. Outros modos de gráficos acelerados não são compatíveis.

As etapas a seguir descrevem o processo de inicialização de um dispositivo Cuttlefish e de criação de um snapshot.

  1. Inicie um dispositivo e desative o VirtioFS. Em seguida, você pode usar o dispositivo.

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. Tire um snapshot executando cvd snapshot_take com as seguintes flags:

    • --force: se uma pasta existir no caminho de snapshot especificado, esta flag garante que a pasta atual seja excluída e uma nova pasta seja criada no caminho de snapshot contendo o snapshot.

    • --auto_suspend: suspende o dispositivo antes de o snapshot ser tirado e retoma o dispositivo depois que o snapshot é tirado.

    • --snapshot_path: o caminho especificado em que uma nova pasta é criada com o snapshot.

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

Restaurar um dispositivo Cuttlefish

Ao restaurar um snapshot de dispositivo Cuttlefish, a instância do Cuttlefish em que o snapshot foi criado precisa ser interrompida. Se a instância já estiver parada, nenhuma outra ação será necessária e o snapshot poderá ser restaurado.

Para restaurar um snapshot de um dispositivo Cuttlefish, inicie um dispositivo com cvd create e inclua o caminho do snapshot. Se o número da instância base do dispositivo Cuttlefish em que o snapshot foi capturado for diferente do número da instância base da instância atual do Cuttlefish, transmita esse número usando a flag --base_instance_num.

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

Suspender um dispositivo Cuttlefish

É possível suspender um dispositivo Cuttlefish sem criar um snapshot. Nenhum espaço em disco é usado para salvar o estado. Para suspender um dispositivo Cuttlefish, execute:

cvd suspend

Retomar um dispositivo Cuttlefish

Para retomar um dispositivo Cuttlefish suspenso, execute:

cvd resume

Validar o recurso de snapshot/restauração

Para validar o recurso de snapshot/restauração, execute o seguinte teste:

atest SnapshotTest