Mątwy: wielu najemców

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

Te wiele maszyn wirtualnych mątwy może współdzielić część zasobów dysku hosta, co pozwala zaoszczędzić miejsce na dysku. Każda maszyna wirtualna otrzymuje odrębną nakładkę na dysk obejmującą partycje Androida (takie jak super , userdata , boot ). Wszelkie modyfikacje na dysku gościa są umieszczane w nakładki dysku specyficznej dla gościa, dzięki czemu każda maszyna wirtualna Mątwy ma widok partycji dysku z możliwością kopiowania przy zapisie. W miarę jak każde urządzenie wirtualne zapisuje więcej danych na swoim widoku dysku, pliki nakładek na dysku hosta powiększają się, ponieważ przechwytują różnicę między stanem oryginalnym a stanem bieżącym.

Pliki nakładki można zresetować, aby przywrócić dysk mątwy do pierwotnego stanu. Proces ten nazywany jest praniem mocy .

Numery instancji

Urządzenia mątwy tworzą i zużywają 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 mątwy o numerze instancji 1 . W przypadku uruchomienia 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.

Zmodyfikuj maksymalną liczbę obsługiwanych instancji

Zasoby po stronie hosta, takie jak urządzenia sieciowe TAP, muszą być wstępnie przydzielone dla maszyn wirtualnych Mątwy. Domyślnie pakiet Debiana oparty na mątwie udostępnia zasoby, na przykład numery od 1 do 10 .

Można to zmienić, modyfikując num_cvd_accounts w /etc/default/cuttlefish-host-resources i ponownie uruchamiając usługę cuttlefish-host-resources , uruchamiając następującą komendę:

sudo systemctl restart cuttlefish-host-resources

Konfiguracje kanoniczne

Konfiguracje kanoniczne reprezentują konfigurację urządzeń mątwy w formacie JSON. Można utworzyć pliki JSON konfiguracji kanonicznej, aby opisać konfigurację wielu urządzeń mątwy w scenariuszu z wieloma dzierżawcami.

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

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

Poniżej znajduje się przykładowy plik konfiguracyjny konfiguracji z dwoma 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_phone-userdebug"
      }
    },
    {
      "@import": "wearable",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "REQUIRED",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_gwear_x86-userdebug"
      }
    }
  ]
}

W poniższej tabeli opisano elementy użyte w przykładowej konfiguracji z dwoma urządzeniami:

Element Typ Opis
instances Szyk Tablica obiektów JSON, z których każdy opisuje pojedyncze urządzenie w grupie urządzeń obsługujących wielu dzierżawców, które mają zostać uruchomione.
@import Strunowy Wskazuje typ urządzenia i ustawia domyślne wartości konfiguracji urządzenia. Obsługiwane typy urządzeń to phone i wearable .
vm Obiekt Określa właściwości, które mają zastosowanie do środowiska maszyny wirtualnej specyficznej dla instancji urządzenia.
memory_mb Numer Ilość pamięci do przydzielenia dla określonej maszyny wirtualnej w megabajtach.
setupwizard_mode Strunowy Określa, czy kreator konfiguracji urządzenia jest uruchamiany dla użytkownika przy pierwszym uruchomieniu urządzenia. Obsługiwane opcje trybu kreatora konfiguracji to DISABLED , OPTIONAL i REQUIRED .
cpus Numer Liczba wirtualnych procesorów 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 Strunowy Ścieżka lokalnego systemu plików do folderu zawierającego obraz urządzenia wirtualnego mątwy.

Więcej przykładów plików konfiguracyjnych dystrybuowanych z cvd można znaleźć w folderze cvd_test_configs w drzewie kodów mątwy.

Kontroluj instancje z wieloma dzierżawcami

W tej sekcji opisano sposób uruchamiania i zatrzymywania urządzeń w scenariuszu z wieloma dzierżawcami. Możesz uruchomić wiele urządzeń mątwy, korzystając z następujących opcji:

  • Konfiguracja kanoniczna : uruchamiaj niestandardowe konfiguracje dla każdego urządzenia przy użyciu pliku konfiguracyjnego JSON opisującego listę instancji do uruchomienia.
  • Pojedynczy obraz gościa : uruchamiaj wiele urządzeń z jednego obrazu gościa.

Uruchom wiele maszyn wirtualnych z konfiguracji kanonicznej

Aby uruchomić wiele maszyn wirtualnych przy użyciu konfiguracji kanonicznej opisującej scenariusz z wieloma dzierżawcami, wywołaj komendę cvd start z przedrostkiem flagi --config_file= w następujący sposób:

cvd start --config_file=CONFIG_FILE

Poniżej znajduje się przykładowe wywołanie odwołujące się do kanonicznego pliku konfiguracyjnego o nazwie /etc/phone.json .

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

Uruchom wiele maszyn wirtualnych z pojedynczego obrazu gościa

Aby uruchomić wiele urządzeń mątwy 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ą od instancji numer 1 .

cvd start --num_instances=N

Aby zmienić początkowy numer instancji, wykonaj jedną z następujących czynności:

  • Dodaj flagę --base_instance_num= N z N jako numerem pierwszej instancji.

    cvd start --base_instance_num=N
    
  • Uruchom Cuttlefish z kontem użytkownika pasującym do vsoc- NN , gdzie NN to podstawowy numer instancji w postaci dwucyfrowej. Na przykład, aby uruchomić Cuttlefish z kontem użytkownika vsoc- 01 , uruchom:

    cvd start --base_instance_num=1
    

Jak zatrzymać urządzenia

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

cvd stop