Каракатица: многопользовательская аренда

Многопользовательская среда Cuttlefish позволяет хост-машине запускать несколько виртуальных гостевых устройств с помощью одного вызова запуска.

Эти несколько виртуальных машин Cuttlefish могут совместно использовать некоторые ресурсы хост-диска, что позволяет вам экономить дисковое пространство. Каждая виртуальная машина получает отдельный дисковый оверлей, покрывающий разделы Android (например, super , userdata , boot ). Любое изменение гостевого диска помещается в гостевой дисковый оверлей, предоставляя каждой виртуальной машине Cuttlefish вид копирования при записи ее дисковых разделов. Поскольку каждое виртуальное устройство записывает больше данных в свой вид диска, файлы оверлея на хост-диске увеличиваются в размере, поскольку они фиксируют разницу между исходным состоянием и их текущим состоянием.

Файлы наложения можно сбросить, чтобы вернуть диск Cuttlefish в исходное состояние. Этот процесс известен как powerwashing .

Номера экземпляров

Устройства Cuttlefish создают и потребляют ресурсы на хосте, привязанные к их номеру экземпляра . Например, соединение adb предоставляется через сокет TCP-сервера на порту 6520 для устройства Cuttlefish с номером экземпляра 1 При запуске нескольких экземпляров он создает сокет TCP-сервера на порту 6520 для первого устройства, 6521 для второго устройства и увеличивает номер порта для каждого дополнительного устройства.

Изменить максимальное количество поддерживаемых экземпляров

Ресурсы хоста, такие как сетевые устройства TAP, должны быть предварительно выделены для виртуальных машин Cuttlefish. По умолчанию пакет Debian cuttlefish-base предоставляет ресурсы для экземпляров с номерами от 1 до 10 .

Это можно изменить, изменив num_cvd_accounts в /etc/default/cuttlefish-host-resources и перезапустив службу cuttlefish-host-resources выполнив следующую команду:

sudo systemctl restart cuttlefish-host-resources

Канонические конфигурации

Канонические конфигурации представляют собой конфигурацию для устройств Cuttlefish в формате JSON. Вы можете создать канонические файлы конфигурации JSON для описания конфигурации нескольких устройств Cuttlefish в многопользовательском сценарии.

Ниже описан формат, используемый для канонических файлов конфигурации JSON (замените заполнители конфигурациями устройств).

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

Ниже приведен пример файла конфигурации для установки с двумя устройствами: телефоном и носимым устройством:

{
  "instances": [
    {
      "@import": "phone",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "OPTIONAL",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_x86_64_only_phone-userdebug"
      }
    },
    {
      "@import": "wearable",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "REQUIRED",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_gwear_x86-userdebug"
      }
    }
  ]
}

В этой таблице описаны элементы, используемые в примере конфигурации с двумя устройствами:

Элемент Тип Описание
instances Множество Массив объектов JSON, каждый из которых описывает одно устройство в многопользовательской группе устройств, которые необходимо запустить.
@import Нить Указывает тип устройства и устанавливает значения по умолчанию для конфигурации устройства. Поддерживаемые типы устройств: phone и wearable .
vm Объект Указывает свойства, которые применяются к среде виртуальной машины, специфичной для экземпляра устройства.
memory_mb Число Объем памяти, выделяемый для конкретной виртуальной машины, в мегабайтах.
setupwizard_mode Нить Указывает, будет ли запущен мастер настройки устройства для пользователя при первом запуске устройства. Поддерживаемые параметры для режима мастера настройки: DISABLED , OPTIONAL и REQUIRED .
cpus Число Количество виртуальных ЦП, выделенных виртуальной машине.
disk Объект Указывает свойства, относящиеся к поиску артефактов файловой системы, используемых для запуска одного экземпляра виртуальной машины.
default_build Нить Путь в локальной файловой системе к папке, содержащей образ виртуального устройства Cuttlefish.

Дополнительные примеры файлов конфигурации, распространяемых с cvd , см. в папке cvd_test_configs в дереве кода Cuttlefish.

Управление многопользовательскими экземплярами

В этом разделе описывается, как создавать и уничтожать устройства в многопользовательском сценарии. Вы можете запустить несколько устройств Cuttlefish, используя следующие параметры:

  • Каноническая конфигурация : запуск индивидуальных конфигураций для каждого устройства с использованием файла конфигурации JSON, описывающего список экземпляров для запуска.
  • Один гостевой образ : запуск нескольких устройств из одного гостевого образа.

Запуск нескольких виртуальных машин из канонической конфигурации

Чтобы создать несколько виртуальных машин с использованием канонической конфигурации, описывающей многопользовательский сценарий, вызовите команду cvd create с префиксом флага --config_file= следующим образом:

cvd create --config_file=CONFIG_FILE

Ниже приведен пример вызова, ссылающегося на канонический файл конфигурации с именем /etc/phone.json .

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

Запуск нескольких виртуальных машин из одного гостевого образа

Чтобы запустить несколько устройств Cuttlefish с помощью одного гостевого образа, используйте флаг --num_instances= N , где N — количество устройств для запуска. По умолчанию устройства начинают с экземпляра номер 1 .

cvd create --num_instances=N

Чтобы изменить начальный номер экземпляра, выполните одно из следующих действий:

  • Добавьте флаг --base_instance_num= N , где N — номер первого экземпляра.

    cvd create --base_instance_num=N
    
  • Запустите Cuttlefish с учетной записью пользователя, соответствующей vsoc- NN , где NN — это базовый номер экземпляра в двухзначной форме. Например, чтобы запустить Cuttlefish с учетной записью пользователя vsoc- 01 , выполните:

    cvd create --base_instance_num=1
    

Как остановить устройства

Чтобы остановить все устройства, запущенные последним вызовом cvd create , выполните:

cvd stop

Чтобы перезапустить остановленные устройства, выполните:

cvd start

Чтобы полностью удалить устройство из системы, выполните:

cvd remove