A possibilidade de ter vários locatários no Cuttlefish permite que sua máquina host inicie vários dispositivos virtuais convidados com uma única invocação de inicialização.
Essas várias máquinas virtuais do Cuttlefish podem compartilhar alguns recursos do
disco do host, permitindo economizar espaço no disco. Cada máquina virtual recebe uma
cobertura de sobreposição de disco distinta, que inclui as partições do Android (como super
,
userdata
, boot
). Qualquer modificação no disco do convidado é colocada em uma
sobreposição de disco específica do convidado, permitindo que cada máquina virtual do Cuttlefish tenha uma
visualização copy-on-write das partições do disco. À medida que cada dispositivo virtual grava mais
dados na visualização do disco, os arquivos de sobreposição no disco do host aumentam de
tamanho, porque capturam o delta entre o estado original e o
atual.
Os arquivos de sobreposição podem ser redefinidos para retornar o disco do Cuttlefish ao estado original. Esse processo é conhecido como Powerwash.
Números de instância
Os dispositivos Cuttlefish criam e consomem recursos no host vinculado ao
número da instância. Por exemplo, uma conexão adb
é exposta por um soquete de servidor
TCP na porta 6520
para o dispositivo Cuttlefish com número de instância 1
.
Quando várias instâncias são iniciadas, ele cria um soquete de servidor TCP na porta
6520
para o primeiro dispositivo, 6521
para o segundo dispositivo e aumenta
o número da porta para cada dispositivo extra.
Modificar o número máximo de instâncias com suporte
Os recursos do host, como os dispositivos de rede TAP, precisam ser pré-alocados para
máquinas virtuais do Cuttlefish. Por padrão, o
pacote Debian cuttlefish-base (link em inglês)
provisiona recursos para os números de instância de 1
a 10
.
Isso pode ser mudado ao modificar num_cvd_accounts
em
/etc/default/cuttlefish-host-resources
e reiniciar o
serviço cuttlefish-host-resources
executando o seguinte comando:
sudo systemctl restart cuttlefish-host-resources
Configurações canônicas
As configurações canônicas representam a configuração para dispositivos Cuttlefish no formato JSON. É possível criar arquivos JSON de configuração canônicos para descrever a configuração de vários dispositivos Cuttlefish em um cenário de vários locatários.
Veja a seguir o formato usado para arquivos JSON de configuração canônica (substitua os marcadores de posição pelas configurações do dispositivo).
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
Confira abaixo um exemplo de arquivo de configuração de uma configuração com dois dispositivos, um smartphone e um wearable:
{
"instances": [
{
"@import": "phone",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "OPTIONAL",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_x86_64_phone-userdebug"
}
},
{
"@import": "wearable",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "REQUIRED",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_gwear_x86-userdebug"
}
}
]
}
Esta tabela descreve os elementos usados no exemplo de configuração com dois dispositivos:
Elemento | Tipo | Descrição |
---|---|---|
instances |
Array | Matriz de objetos JSON, cada um descrevendo um único dispositivo no grupo de dispositivos multilocatários a ser iniciado. |
@import |
String | Indica o tipo de dispositivo e define valores padrão para a configuração do
dispositivo. Os tipos de dispositivos compatíveis são
phone e wearable . |
vm |
Objeto | Especifica as propriedades que se aplicam ao ambiente da VM específico da instância do dispositivo. |
memory_mb |
Número | A quantidade de memória a ser alocada para uma VM específica em megabytes. |
setupwizard_mode |
String | Especifica se o assistente de configuração do dispositivo será executado para o usuário na primeira
execução. As opções compatíveis para o modo do assistente de configuração são
DISABLED , OPTIONAL e
REQUIRED . |
cpus |
Número | O número de CPUs virtuais alocadas para a VM. |
disk |
Objeto | Especifica as propriedades relevantes para localizar artefatos do sistema de arquivos usados para executar uma única instância de VM. |
default_build |
String | Caminho do sistema de arquivos local para uma pasta que contém uma imagem de dispositivo virtual Cuttlefish. |
Para conferir mais exemplos de arquivos de configuração distribuídos com cvd
, consulte a
pasta cvd_test_configs
na árvore de código do Cuttlefish.
Controlar instâncias de vários locatários
Esta seção descreve como criar e destruir dispositivos em um cenário multilocatário. É possível iniciar vários dispositivos Cuttlefish usando as seguintes opções:
- Configuração canônica: inicie configurações personalizadas para cada dispositivo usando um arquivo de configuração JSON que descreve a lista de instâncias a serem iniciadas.
- Imagem de convidado única: inicie vários dispositivos usando uma única imagem de convidado.
Iniciar várias VMs a partir da configuração canônica
Para criar várias VMs usando uma configuração canônica que descreve o cenário de multilocatário, invoque o comando cvd create
com o prefixo de sinalização --config_file=
da seguinte maneira:
cvd create --config_file=CONFIG_FILE
Veja a seguir um exemplo de invocação que faz referência a um arquivo de configuração canônico chamado
/etc/phone.json
.
cvd create --config_file=/etc/phone.json
Iniciar várias VMs de uma única imagem de convidado
Para iniciar vários dispositivos Cuttlefish com uma única imagem de convidado, use a
flag --num_instances=N
, em que N é o número
de dispositivos a serem iniciados. Por padrão, os dispositivos começam com o número de instância 1
.
cvd create --num_instances=N
Para mudar o número de instância inicial, siga um destes procedimentos:
Adicione a flag
--base_instance_num=N
, com N como o primeiro número de instância.cvd create --base_instance_num=N
Inicie o Cuttlefish com uma conta de usuário correspondente a
vsoc-NN
, em que NN é o número de instância base com dois dígitos. Por exemplo, para iniciar o Cuttlefish com uma conta de usuáriovsoc-01
, execute:cvd create --base_instance_num=1
Como parar dispositivos
Para interromper todos os dispositivos iniciados pela última invocação de cvd create
, execute:
cvd stop
Para reiniciar dispositivos que foram interrompidos, execute:
cvd start
Para remover completamente um dispositivo da execução do sistema:
cvd remove