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

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

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

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

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

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

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

Для виртуальных машин Cuttlefish необходимо предварительно выделить ресурсы на стороне хоста, такие как сетевые устройства TAP. По умолчанию пакет 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, используя следующие параметры:

  • Canonical config : Запуск пользовательских конфигураций для каждого устройства с помощью 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