Chocos: Multilocação

A multilocação Cuttlefish permite que sua máquina host inicie vários dispositivos convidados virtuais com uma única invocação de inicialização.

Essas múltiplas máquinas virtuais Cuttlefish podem compartilhar alguns dos recursos do disco host, permitindo economizar espaço em disco. Cada máquina virtual obtém uma sobreposição de disco distinta cobrindo as partições do Android (como super , userdata , boot ). Qualquer modificação no disco convidado é colocada em uma sobreposição de disco específica do convidado, dando a cada máquina virtual Cuttlefish uma visualização de cópia na gravação de suas partições de disco. À medida que cada dispositivo virtual grava mais dados em sua visualização do disco, os arquivos de sobreposição no disco host aumentam de tamanho porque capturam o delta entre o estado original e seu estado atual.

Os arquivos de sobreposição podem ser redefinidos para retornar o disco Cuttlefish ao seu estado original. Este processo é conhecido como powerwashing .

Números de instância

Os dispositivos Cuttlefish criam e consomem recursos no host vinculados ao seu número de instância . Por exemplo, uma conexão adb é exposta por meio de 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 adicional.

Modifique o número máximo de instâncias suportadas

Os recursos do lado do host, como dispositivos de rede TAP, devem ser pré-alocados para máquinas virtuais Cuttlefish. Por padrão, o pacote Debian baseado em choco fornece recursos para os números de instância 1 a 10 .

Isso pode ser alterado modificando num_cvd_accounts em /etc/default/cuttlefish-host-resources e reiniciando 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 dos dispositivos Cuttlefish no formato JSON. Você pode criar arquivos JSON de configuração canônica para descrever a configuração de vários dispositivos Cuttlefish em um cenário multilocatário.

A seguir descreve-se o formato usado para arquivos JSON de configuração canônica (substituir espaços reservados por configurações de dispositivo).

{
  "common": {
    CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
  },
  "instances": [
    {
      FIRST_DEVICE_CONFIGURATION
    },
    {
      NTH_DEVICE_CONFIGURATION
    }
  ]
}

A seguir está um exemplo de arquivo de configuração de uma configuração com dois dispositivos, um dispositivo telefônico e um dispositivo vestível:

{
  "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 utilizados no exemplo de configuração com dois dispositivos:

Elemento Tipo Descrição
instances Variedade Matriz de objetos JSON, cada um descrevendo um único dispositivo no grupo de dispositivos multilocatários a ser iniciado.
@import Corda Indica o tipo de dispositivo e define valores padrão para a configuração do dispositivo. Os tipos de dispositivos suportados são phone e wearable .
vm Objeto Especifica propriedades que se aplicam ao ambiente 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 Corda Especifica se o assistente de configuração do dispositivo será executado para o usuário na primeira execução do dispositivo. As opções suportadas 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 propriedades relevantes para localizar artefatos do sistema de arquivos usados ​​para executar uma única instância de VM.
default_build Corda Caminho do sistema de arquivos local para uma pasta que contém uma imagem de dispositivo virtual Cuttlefish.

Para obter 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 multilocatários

Esta seção descreve como iniciar e parar dispositivos em um cenário multilocatário. Você pode 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 único : inicie vários dispositivos a partir de uma única imagem de convidado.

Inicie várias VMs a partir da configuração canônica

Para iniciar múltiplas VMs usando uma configuração canônica que descreve o cenário multilocatário, invoque o comando cvd start com o prefixo do sinalizador --config_file= conforme a seguir:

cvd start --config_file=CONFIG_FILE

A seguir está um exemplo de invocação que faz referência a um arquivo de configuração canônico chamado /etc/phone.json .

cvd start --config_file=/etc/phone.json

Inicie várias VMs a partir de uma única imagem de convidado

Para iniciar vários dispositivos Cuttlefish usando uma única imagem de convidado, use o sinalizador --num_instances= N , onde N é o número de dispositivos a serem iniciados. Por padrão, os dispositivos iniciam na instância número 1 .

cvd start --num_instances=N

Para alterar o número da instância inicial, siga um destes procedimentos:

  • Adicione o sinalizador --base_instance_num= N com N como o número da primeira instância.

    cvd start --base_instance_num=N
    
  • Inicie o Cuttlefish com uma conta de usuário correspondente a vsoc- NN , onde NN é o número base da instância em formato de dois dígitos. Por exemplo, para iniciar o Cuttlefish com uma conta de usuário vsoc- 01 , execute:

    cvd start --base_instance_num=1
    

Como parar dispositivos

Para parar todos os dispositivos iniciados pela última invocação cvd start , execute:

cvd stop