Sotong: Multi-tenancy

Multi-tenancy Cuttlefish memungkinkan mesin host Anda meluncurkan beberapa perangkat tamu virtual dengan satu pemanggilan peluncuran.

Beberapa virtual machine Cuttlefish ini dapat berbagi sebagian resource disk host, sehingga Anda dapat menghemat ruang disk. Setiap virtual machine mendapatkan overlay disk yang berbeda yang mencakup partisi Android (seperti super, userdata, boot). Setiap modifikasi pada disk tamu ditempatkan di overlay disk khusus tamu, sehingga setiap virtual machine Cuttlefish mendapatkan tampilan copy-on-write dari partisi disknya. Saat setiap perangkat virtual menulis lebih banyak data ke tampilan disknya, ukuran file overlay di disk host akan meningkat karena file tersebut menangkap delta antara status asli dan status saat ini.

File overlay dapat direset untuk mengembalikan disk Cuttlefish ke status aslinya. Proses ini dikenal sebagai powerwashing.

Nomor instance

Perangkat cumi-cumi membuat dan menggunakan resource pada host yang terkait dengan nomor instance-nya. Misalnya, koneksi adb diekspos melalui soket server TCP di port 6520 untuk perangkat Cuttlefish dengan nomor instance 1. Jika beberapa instance diluncurkan, instance akan membuat soket server TCP di port 6520 untuk perangkat pertama, 6521 untuk perangkat kedua, dan menambahkan nomor port untuk setiap perangkat tambahan.

Mengubah jumlah maksimum instance yang didukung

Resource sisi host, seperti perangkat jaringan TAP, harus dialokasikan sebelumnya untuk virtual machine Cuttlefish. Secara default, paket Debian cuttlefish-base menyediakan resource untuk nomor instance 1 hingga 10.

Hal ini dapat diubah dengan mengubah num_cvd_accounts di /etc/default/cuttlefish-host-resources dan memulai ulang layanan cuttlefish-host-resources dengan menjalankan perintah berikut:

sudo systemctl restart cuttlefish-host-resources

Konfigurasi kanonis

Konfigurasi kanonis mewakili konfigurasi untuk perangkat Cuttlefish dalam format JSON. Anda dapat membuat file JSON konfigurasi kanonis untuk mendeskripsikan konfigurasi beberapa perangkat Cuttlefish dalam skenario multi-tenant.

Berikut ini penjelasan format yang digunakan untuk file JSON konfigurasi kanonis (menggantikan placeholder dengan konfigurasi perangkat).

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

Berikut adalah contoh file konfigurasi penyiapan dengan dua perangkat, perangkat ponsel dan perangkat wearable:

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

Tabel ini menjelaskan elemen yang digunakan dalam contoh konfigurasi dengan dua perangkat:

Elemen Jenis Deskripsi
instances Array (Arrays) Array objek JSON, yang masing-masing mendeskripsikan satu perangkat dalam grup perangkat multi-tenant yang akan diluncurkan.
@import String Menunjukkan jenis perangkat dan menetapkan nilai default untuk konfigurasi perangkat. Jenis perangkat yang didukung adalah phone dan wearable.
vm Objek Menentukan properti yang berlaku untuk lingkungan VM yang khusus untuk instance perangkat.
memory_mb Angka Jumlah memori yang akan dialokasikan untuk VM tertentu dalam megabyte.
setupwizard_mode String Menentukan apakah wizard penyiapan perangkat dijalankan bagi pengguna saat pertama kali perangkat dijalankan. Opsi yang didukung untuk mode wizard penyiapan adalah DISABLED, OPTIONAL, dan REQUIRED.
cpus Angka Jumlah CPU virtual yang dialokasikan untuk VM.
disk Objek Menentukan properti yang relevan untuk menemukan artefak sistem file yang digunakan untuk menjalankan satu instance VM.
default_build String Jalur sistem file lokal ke folder yang berisi image perangkat virtual Cuttlefish.

Untuk contoh file konfigurasi lainnya yang didistribusikan dengan cvd, lihat folder cvd_test_configs di hierarki kode Cuttlefish.

Mengontrol instance multi-tenant

Bagian ini menjelaskan cara membuat dan menghancurkan perangkat dalam skenario multi-tenant. Anda dapat meluncurkan beberapa perangkat Cuttlefish menggunakan opsi berikut:

  • Konfigurasi kanonis: Meluncurkan konfigurasi yang disesuaikan untuk setiap perangkat menggunakan file konfigurasi JSON yang menjelaskan daftar instance yang akan diluncurkan.
  • Gambar tamu tunggal: Meluncurkan beberapa perangkat dari satu image tamu.

Memulai beberapa VM dari konfigurasi kanonis

Untuk membuat beberapa VM menggunakan konfigurasi kanonis yang menjelaskan skenario multi-tenant, panggil perintah cvd create dengan awalan flag --config_file= sebagai berikut:

cvd create --config_file=CONFIG_FILE

Berikut adalah contoh pemanggilan yang merujuk pada file konfigurasi kanonis bernama /etc/phone.json.

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

Memulai beberapa VM dari satu image tamu

Untuk meluncurkan beberapa perangkat Cuttlefish menggunakan satu gambar tamu, gunakan tanda --num_instances=N, dengan N adalah jumlah perangkat yang akan diluncurkan. Secara default, perangkat dimulai dari nomor instance 1.

cvd create --num_instances=N

Untuk mengubah nomor instance awal, lakukan salah satu langkah berikut:

  • Tambahkan flag --base_instance_num=N dengan N sebagai nomor instance pertama.

    cvd create --base_instance_num=N
    
  • Luncurkan Cuttlefish dengan akun pengguna yang cocok dengan vsoc-NN, dengan NN adalah nomor instance dasar dalam bentuk dua digit. Misalnya, untuk meluncurkan Cuttlefish dengan akun pengguna vsoc-01, jalankan:

    cvd create --base_instance_num=1
    

Cara menghentikan perangkat

Untuk menghentikan semua perangkat yang diluncurkan oleh pemanggilan cvd create terakhir, jalankan:

cvd stop

Untuk memulai ulang perangkat yang telah dihentikan, jalankan:

cvd start

Untuk sepenuhnya menghapus perangkat dari sistem run:

cvd remove