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

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

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

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

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

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

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

Ресурсы на стороне хоста, такие как сетевые устройства TAP, должны быть предварительно выделены для виртуальных машин Cuttlefish. По умолчанию пакет Debian на основе каракатицы выделяет ресурсы для экземпляров с номерами от 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_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 start с префиксом флага --config_file= следующим образом:

cvd start --config_file=CONFIG_FILE

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

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

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

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

cvd start --num_instances=N

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

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

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

    cvd start --base_instance_num=1
    

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

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

cvd stop