Sepia: multiinquilino

El multiinquilino de Cuttlefish permite que su máquina host inicie múltiples dispositivos invitados virtuales con una única invocación de inicio.

Estas múltiples máquinas virtuales Cuttlefish pueden compartir algunos de los recursos del disco host, lo que le permite conservar espacio en el disco. Cada máquina virtual obtiene una superposición de disco distinta que cubre las particiones de Android (como super , userdata , boot ). Cualquier modificación realizada en el disco invitado se coloca en una superposición de disco específica del invitado, lo que le brinda a cada máquina virtual Cuttlefish una vista de copia en escritura de sus particiones de disco. A medida que cada dispositivo virtual escribe más datos en su vista del disco, los archivos superpuestos en el disco host aumentan de tamaño porque capturan el delta entre el estado original y su estado actual.

Los archivos de superposición se pueden restablecer para devolver el disco Cuttlefish a su estado original. Este proceso se conoce como powerwashing .

Números de instancia

Los dispositivos Cuttlefish crean y consumen recursos en el host vinculados a su número de instancia . Por ejemplo, una conexión adb se expone a través de un socket de servidor TCP en el puerto 6520 para el dispositivo Cuttlefish con el número de instancia 1 . Cuando se lanzan varias instancias, crea un socket de servidor TCP en el puerto 6520 para el primer dispositivo, 6521 para el segundo dispositivo e incrementa el número de puerto para cada dispositivo adicional.

Modificar el número máximo de instancias admitidas

Los recursos del lado del host, como los dispositivos de red TAP, deben estar preasignados para las máquinas virtuales Cuttlefish. De forma predeterminada, el paquete Debian basado en sepia proporciona recursos, por ejemplo, los números 1 al 10 .

Esto se puede cambiar modificando num_cvd_accounts en /etc/default/cuttlefish-host-resources y reiniciando el servicio cuttlefish-host-resources ejecutando el siguiente comando:

sudo systemctl restart cuttlefish-host-resources

Configuraciones canónicas

Las configuraciones canónicas representan la configuración para dispositivos Cuttlefish en formato JSON. Puede crear archivos JSON de configuración canónica para describir la configuración de múltiples dispositivos Cuttlefish en un escenario multiinquilino.

A continuación se describe el formato utilizado para los archivos JSON de configuración canónica (reemplace los marcadores de posición con configuraciones de dispositivos).

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

El siguiente es un archivo de configuración de ejemplo de una configuración con dos dispositivos, un dispositivo telefónico y un dispositivo portátil:

{
  "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 tabla describe los elementos utilizados en la configuración de ejemplo con dos dispositivos:

Elemento Tipo Descripción
instances Formación Matriz de objetos JSON, cada uno de los cuales describe un único dispositivo en el grupo de dispositivos multiinquilino que se lanzará.
@import Cadena Indica el tipo de dispositivo y establece valores predeterminados para la configuración del dispositivo. Los tipos de dispositivos compatibles son phone y wearable .
vm Objeto Especifica propiedades que se aplican al entorno de VM específico de la instancia del dispositivo.
memory_mb Número La cantidad de memoria que se debe asignar para una máquina virtual específica en megabytes.
setupwizard_mode Cadena Especifica si el asistente de configuración del dispositivo se ejecuta para el usuario la primera vez que ejecuta el dispositivo. Las opciones admitidas para el modo del asistente de configuración son DISABLED , OPTIONAL y REQUIRED .
cpus Número La cantidad de CPU virtuales asignadas a la VM.
disk Objeto Especifica propiedades relevantes para localizar artefactos del sistema de archivos utilizados para ejecutar una única instancia de VM.
default_build Cadena Ruta del sistema de archivos local a una carpeta que contiene una imagen de dispositivo virtual Cuttlefish.

Para obtener más ejemplos de archivos de configuración distribuidos con cvd , consulte la carpeta cvd_test_configs en el árbol de código de Cuttlefish.

Controlar instancias multiinquilino

Esta sección describe cómo iniciar y detener dispositivos en un escenario multiinquilino. Puede iniciar varios dispositivos Cuttlefish utilizando las siguientes opciones:

  • Configuración canónica : inicie configuraciones personalizadas para cada dispositivo utilizando un archivo de configuración JSON que describe la lista de instancias para iniciar.
  • Imagen de invitado única : inicie varios dispositivos desde una única imagen de invitado.

Inicie varias máquinas virtuales desde la configuración canónica

Para iniciar varias máquinas virtuales utilizando una configuración canónica que describa el escenario multiinquilino, invoque el comando cvd start con el prefijo de indicador --config_file= de la siguiente manera:

cvd start --config_file=CONFIG_FILE

El siguiente es un ejemplo de invocación que hace referencia a un archivo de configuración canónico llamado /etc/phone.json .

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

Inicie varias máquinas virtuales desde una única imagen de invitado

Para iniciar varios dispositivos Cuttlefish usando una única imagen invitada, use la opción --num_instances= N , donde N es la cantidad de dispositivos que se iniciarán. De forma predeterminada, los dispositivos comienzan desde la instancia número 1 .

cvd start --num_instances=N

Para cambiar el número de instancia inicial, realice una de las siguientes acciones:

  • Agregue el indicador --base_instance_num= N con N como primer número de instancia.

    cvd start --base_instance_num=N
    
  • Inicie Cuttlefish con una cuenta de usuario que coincida con vsoc- NN , donde NN es el número de instancia base en formato de dos dígitos. Por ejemplo, para iniciar Cuttlefish con una cuenta de usuario vsoc- 01 , ejecute:

    cvd start --base_instance_num=1
    

Cómo detener dispositivos

Para detener todos los dispositivos iniciados por la última invocación cvd start , ejecute:

cvd stop