Mątwa: środowisko wielu najemców

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

Te 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 specyficznej dla gościa, co zapewnia każdej maszynie wirtualnej Cuttlefish widok partycji dysku typu „kopiuj przy zapisie”. W miarę jak każde urządzenie wirtualne zapisuje więcej danych na dysku, pliki nakładki na dysku hosta zwiększają swój rozmiar, ponieważ rejestrują różnicę między stanem pierwotnym a obecnym.

Pliki nakładki można zresetować, aby przywrócić dysk Cuttlefish do pierwotnego stanu. Ten proces jest nazywany przywracaniem ustawień fabrycznych.

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 dla urządzenia Cuttlefish o numerze instancji 1. Po uruchomieniu wielu instancji tworzy gniazdo serwera TCP na porcie 6520 dla pierwszego urządzenia, 6521 dla drugiego urządzenia i zwiększa numer portu dla każdego dodatkowego urządzenia.

Zmienianie maksymalnej liczby obsługiwanych instancji

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

Możesz to zmienić, modyfikując num_cvd_accounts/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 to konfiguracje urządzeń Cuttlefish w formacie JSON. Możesz tworzyć kanoniczne pliki JSON konfiguracji, aby opisywać konfigurację wielu urządzeń Cuttlefish w scenariuszu obejmującym wielu najemców.

Poniżej opisujemy format używany w kanonicznych plikach konfiguracji JSON (zastąp symbole zastępcze konfiguracjami urządzeń).

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

Poniżej znajdziesz przykładowy plik konfiguracji z 2 urządzeniami: telefonem i urządzeniem do noszenia:

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

W tej tabeli opisano elementy użyte w przykładowej konfiguracji z 2 urządzeniami:

Żywioły Typ Opis
instances Tablica Tablica obiektów JSON, z których każdy opisuje jedno urządzenie w grupie urządzeń z wieloma najemcami, które mają zostać uruchomione.
@import Ciąg znaków Wskazuje typ urządzenia i ustawia wartości domyślne konfiguracji urządzenia. Obsługiwane typy urządzeń to phonewearable.
vm Obiekt Określa właściwości, które mają zastosowanie do środowiska maszyny wirtualnej specyficznego dla instancji urządzenia.
memory_mb Liczba Ilość pamięci do przydzielenia konkretnej maszynie wirtualnej w megabajtach.
setupwizard_mode Ciąg znaków Określa, czy przy pierwszym uruchomieniu urządzenia ma być uruchamiany kreator konfiguracji urządzenia. Obsługiwane opcje trybu kreatora konfiguracji to DISABLED, OPTIONALREQUIRED.
cpus Liczba Liczba procesorów wirtualnych przydzielonych do maszyny wirtualnej.
disk Obiekt Określa właściwości związane z lokalizowaniem 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 wirtualnego urządzenia Cuttlefish.

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

Kontrolowanie instancji wielu najemców

W tej sekcji opisujemy, jak tworzyć i usuwać urządzenia w scenariuszu z wieloma najemcami. Możesz uruchomić kilka urządzeń Cuttlefish, korzystając z tych opcji:

  • Konfiguracja kanoniczna: uruchamiaj dostosowane konfiguracje na każdym urządzeniu za pomocą pliku konfiguracji JSON opisującego listę instancji do uruchomienia.
  • Pojedynczy obraz gościa: uruchamiaj wiele urządzeń z pojedynczego obrazu gościa.

Uruchamianie wielu maszyn wirtualnych z konfiguracji kanonicznej

Aby utworzyć wiele maszyn wirtualnych przy użyciu konfiguracji kanonicznej opisującej scenariusz wielodostępności, wywołaj polecenie cvd create z prefiksem flagi --config_file= w ten 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 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ć początkowy numer instancji, wykonaj jedną z tych czynności:

  • Dodaj flagę --base_instance_num=NN jako pierwszym numerem instancji.

    cvd create --base_instance_num=N
    
  • Uruchom Cuttlefish z kontem użytkownika pasującym do vsoc-NN, gdzie NN to numer instancji podstawowej w formie dwucyfrowej. Aby na przykład uruchomić Cuttlefish z kontem użytkownikavsoc-01, wpisz:

    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, wpisz:

cvd start

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

cvd remove