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

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

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

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

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

Устройства 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