Mątwa: środowisko wielu najemców

Wielodostępność w Cuttlefish umożliwia maszynie hosta uruchamianie wielu wirtualnych urządzeń gościa za pomocą jednego wywołania.

Te liczne maszyny wirtualne Cuttlefish mogą współdzielić niektóre zasoby dysku hosta, co pozwala oszczędzać miejsce na dysku. Każda maszyna wirtualna ma oddzielną nakładkę dysku, która obejmuje partycje Androida (np. super, userdata, boot). Wszelkie modyfikacje dysku gościa są umieszczane w nakładce dysku specyficznej dla gościa, co daje każdej maszynie wirtualnej Cuttlefish widok z opcją kopiowania na zapisywanie swoich partycji dysku. W miarę jak każde urządzenie wirtualne zapisuje więcej danych na swoim widoku dysku, rozmiar plików nakładki na dysku hosta zwiększa się, ponieważ odzwierciedlają one różnicę między pierwotnym stanem a bieżącym stanem.

Pliki nakładki można zresetować, aby przywrócić dysk Cuttlefish do pierwotnego stanu. Ten proces nazywa się czyszczeniem ciśnieniowym.

Numery instancji

Urządzenia Cuttlefish tworzą i korzystają z zasobów na hoście powiązanym z ich numerem instancji. Na przykład połączenie adb jest dostępne przez gniazdo serwera TCP na porcie 6520 na urządzeniu Cuttlefish o numerze instancji 1. Gdy uruchamiane są kolejne instancje, tworzy się gniazdo serwera TCP na porcie 6520 dla pierwszego urządzenia, 6521 dla drugiego urządzenia itd., a numer portu zwiększa się o jeden dla każdego kolejnego urządzenia.

Zmiana maksymalnej liczby obsługiwanych instancji

Zasoby po stronie hosta, takie jak urządzenia sieciowe TAP, muszą być wstępnie przydzielone maszynom wirtualnym Cutletfish. Domyślnie pakiet Debiana cuttlefish-base udostępnia zasoby dla instancji o numerach od 1 do 10.

Można to zmienić, zmieniając wartość num_cvd_accounts w pliku /etc/default/cuttlefish-host-resources i uruchamiając ponownie usługę cuttlefish-host-resources, wykonując to polecenie:

sudo systemctl restart cuttlefish-host-resources

Konfiguracje kanoniczne

Konfiguracje kanoniczne reprezentują konfigurację urządzeń Cuttlefish w formacie JSON. Możesz tworzyć pliki kanonicznej konfiguracji w formacie JSON, aby opisywać konfigurację wielu urządzeń Cuttlefish w sytuacji wielu dzierżawców.

Poniżej opisujemy format używany w pliku konfiguracji kanonicznej w formacie JSON (zastąp nawiasy kwadratowe konfiguracją urządzenia).

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

Oto przykładowy plik konfiguracji konfiguracji z 2 urządzeniami: telefonem i urządzeniem noszonego:

{
  "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"
      }
    }
  ]
}

Ta tabela opisuje elementy używane w przykładowej konfiguracji z 2 urządzeniami:

Żywioły Typ Opis
instances Tablica Tablica obiektów JSON, z których każdy opisuje pojedyncze urządzenie w grupie urządzeń wielu dzierżawców, które ma zostać uruchomione.
@import Ciąg znaków Wskazuje typ urządzenia i ustala wartości domyślne konfiguracji urządzenia. Obsługiwane typy urządzeń to phonewearable.
vm Obiekt Określa właściwości środowiska maszyny wirtualnej dotyczące konkretnej instancji urządzenia.
memory_mb Liczba Ilość pamięci do przydzielenia określonej maszynie wirtualnej w megabajtach.
setupwizard_mode Ciąg znaków Określa, czy kreator konfiguracji urządzenia jest uruchamiany dla użytkownika przy pierwszym uruchomieniu urządzenia. Obsługiwane opcje w trybie kreatora konfiguracji to DISABLED, OPTIONALREQUIRED.
cpus Liczba Liczba procesorów wirtualnych przypisanych do maszyny wirtualnej.
disk Obiekt Określa właściwości istotne dla znajdowania artefaktów systemu plików używanych do uruchamiania pojedynczej instancji maszyny wirtualnej.
default_build Ciąg znaków Ścieżka do folderu w lokalnym systemie plików zawierającego obraz urządzenia wirtualnego Cuttlefish.

Więcej przykładów plików konfiguracji rozpowszechnianych z cvd znajdziesz w folderze cvd_test_configs w drzewie kodu Cuttlefish.

Zarządzanie instancjami wielodzierżawnymi

W tej sekcji opisaliśmy, jak tworzyć i usuwać urządzenia w sytuacji wielu dzierżawców. Możesz uruchomić wiele urządzeń Cuttlefish, korzystając z tych opcji:

  • Konfigurowanie kanoniczne: uruchamia niestandardowe konfiguracje dla każdego urządzenia za pomocą pliku konfiguracji JSON opisującego listę uruchamianych instancji.
  • Pojedynczy obraz gościa: możesz uruchomić wiele urządzeń z jednego obrazu gościa.

Uruchamianie wielu maszyn wirtualnych z konfiguracji kanonicznej

Aby utworzyć wiele maszyn wirtualnych przy użyciu konfiguracji kanonicznej opisującej scenariusz wielu dzierżawców, wywołaj polecenie cvd create z prefiksem flagi --config_file= w ten sposób:

cvd create --config_file=CONFIG_FILE

Poniżej znajduje się przykład wywołania odwołującego się do kanonicznego pliku konfiguracyjnego o nazwie /etc/phone.json.

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

Uruchamianie wielu maszyn wirtualnych na podstawie jednego obrazu gościa

Aby uruchomić wiele urządzeń Cuttlefish przy użyciu jednego obrazu gościa, użyj flagi --num_instances=N, gdzie N to liczba urządzeń do uruchomienia. Domyślnie urządzenia zaczynają się od numeru instancji 1.

cvd create --num_instances=N

Aby zmienić numer instancji początkowej, wykonaj jedną z tych czynności:

  • Dodaj flagę --base_instance_num=N z wartością N jako pierwszym numerem instancji.

    cvd create --base_instance_num=N
    
  • Uruchom Cuttlefish z kontem użytkownika odpowiadającym vsoc-NN, gdzie NN to dwucyfrowy numer instancji podstawowej. Aby na przykład uruchomić Cuttlefish z kontem użytkownika vsoc-01, wykonaj tę komendę:

    cvd create --base_instance_num=1
    

Jak zatrzymać urządzenia

Aby zatrzymać wszystkie urządzenia uruchomione przez ostatnie wywołanie cvd create, uruchom:

cvd stop

Aby ponownie uruchomić zatrzymane urządzenia, wykonaj:

cvd start

Aby całkowicie usunąć urządzenie z systemu:

cvd remove