Mątwy: wiele najemców

Tryb wielu najemców w Cuttlefish umożliwia uruchomienie na komputerze hosta wielu wirtualnych urządzeń gościa przy jednym wywołaniu uruchomienia.

Te liczne maszyny wirtualne Cuttlefish mogą współdzielić niektóre zasoby dysku hosta, co pozwala oszczędzać miejsce na dysku. Każda maszyna wirtualna otrzymuje odrębną nakładkę dysku obejmującą partycje Androida (np. super, userdata, boot). Wszelkie modyfikacje dysku gościa są umieszczane w nakładce dysku przeznaczonej dla gości, dzięki czemu każda maszyna wirtualna Cuttlefish ma widok „kopiowania i zapisywania” partycji dysku. W miarę jak każde urządzenie wirtualne zapisuje więcej danych w swoim widoku dysku, pliki nakładki na dysku hosta zwiększają swój rozmiar, ponieważ przechwytują różnicę między stanem oryginalnym a bieżącym.

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 wykorzystują zasoby na hoście powiązane z ich numerem instancji. Na przykład połączenie adb jest udostępniane przez gniazdo serwera TCP na porcie 6520 urządzenia Cuttlefish o numerze instancji 1. W przypadku uruchomienia wielu instancji tworzone jest gniazdo serwera TCP na porcie 6520 dla pierwszego urządzenia, 6521 dla drugiego i zwiększa numer portu dla każdego dodatkowego urządzenia.

Zmień maksymalną liczbę obsługiwanych instancji

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

Można to zmienić, modyfikując plik num_cvd_accounts w /etc/default/cuttlefish-host-resources i ponownie uruchamiając usługę cuttlefish-host-resources za pomocą tego polecenia:

sudo systemctl restart cuttlefish-host-resources

Konfiguracje kanoniczne

Konfiguracje kanoniczne reprezentują konfigurację urządzeń Cuttlefish w formacie JSON. Możesz utworzyć pliki JSON z konfiguracją kanoniczną, aby opisać konfigurację wielu urządzeń Cuttlefish w scenariuszu z wieloma najemcami.

Poniżej opisujemy format plików JSON z konfiguracją kanoniczną (zastąp obiekty zastępcze konfiguracjami urządzeń).

{
  "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 opisujących pojedyncze urządzenie w grupie urządzeń, które mają zostać uruchomione, należące do wielu najemców.
@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 dotyczące środowiska maszyny wirtualnej specyficznej dla 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 ma być uruchomiony u użytkownika przy pierwszym uruchomieniu urządzenia. Obsługiwane opcje w trybie kreatora konfiguracji to DISABLED, OPTIONALREQUIRED.
cpus Liczba Liczba procesorów wirtualnych przydzielonych do maszyny wirtualnej.
disk Obiekt Określa właściwości istotne przy lokalizowaniu artefaktów systemu plików używanych do uruchamiania pojedynczej maszyny wirtualnej.
default_build Ciąg znaków Ścieżka lokalnego systemu plików do folderu zawierającego obraz urządzenia wirtualnego Cuttlefish.

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

Zarządzanie instancjami dla wielu dzierżawców

W tej sekcji dowiesz się, jak tworzyć i niszczyć urządzenia w środowisku wielu najemców. Możesz uruchomić wiele urządzeń Cuttlefish, korzystając z tych opcji:

  • Konfiguracja kanoniczna: uruchom niestandardowe konfiguracje dla każdego urządzenia za pomocą pliku konfiguracji JSON zawierającego opis listy instancji do uruchomienia.
  • 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, która opisuje scenariusz z wieloma najemcami, wywołaj polecenie cvd create z prefiksem flagi --config_file= w następujący sposób:

cvd create --config_file=CONFIG_FILE

Poniżej znajdziesz 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 z 1 obrazu gościa

Aby uruchomić kilka urządzeń Cuttlefish za pomocą 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ć początkowy numer instancji, 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 pasującym do: vsoc-NN, gdzie NN to podstawowy numer instancji w postaci dwucyfrowej. Aby na przykład uruchomić Cuttlefish na koncie 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