Cuttlefish:多租戶

Cuttlefish 多租戶可讓您的主機透過一次啟動呼叫啟動多個虛擬來賓裝置。

這些多個 Cuttlefish 虛擬機器可以共享一些主機磁碟資源,從而允許您節省磁碟空間。每個虛擬機器都有一個覆蓋 Android 分割區的不同磁碟覆蓋(例如superuserdataboot )。對來賓磁碟的任何修改都會放置在特定於來賓的磁碟覆蓋中,從而為每個 Cuttlefish 虛擬機器提供其磁碟分割區的寫入時複製視圖。隨著每個虛擬設備將更多資料寫入其磁碟視圖,主機磁碟上的覆蓋檔案的大小會增加,因為它們會捕獲原始狀態和當前狀態之間的增量。

可以重置覆蓋檔案以使 Cuttlefish 磁碟返回其原始狀態。此過程稱為強力清洗

實例編號

Cuttlefish 裝置在與其實例編號相關的主機上建立並消耗資源。例如, adb連線透過實例號碼1的 Cuttlefish 設備的連接埠6520處的 TCP 伺服器套接字公開。啟動多個實例時,它會在連接埠6520為第一個設備建立 TCP 伺服器套接字,為第二個設備在連接埠6521建立 TCP 伺服器套接字,並為每個附加設備增加連接埠號碼。

修改最大支援實例數

必須為 Cuttlefish 虛擬機器預先分配主機端資源,例如 TAP 網路設備。預設情況下,基於 cuttlefish 的Debian 軟體包為實例編號110提供資源。

這可以透過修改/etc/default/cuttlefish-host-resources中的num_cvd_accounts並透過執行以下命令重新啟動cuttlefish-host-resources服務來更改:

sudo systemctl restart cuttlefish-host-resources

規範配置

規範配置表示 JSON 格式的 Cuttlefish 設備的配置。您可以建立規範的配置 JSON 檔案來描述多租戶場景中多個 Cuttlefish 設備的配置。

以下介紹了規範配置 JSON 檔案的格式(以裝置配置取代佔位符)。

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

以下是使用兩個裝置(電話設備和穿戴式裝置)進行設定的範例設定檔:

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

下表描述了兩個設備的範例配置中使用的元素:

元素類型描述
instances大批JSON 物件數組,每個物件描述要啟動的多租戶設備群組中的單一裝置。
@import細繩指示設備類型並設定設備配置的預設值。支援的設備類型為phonewearable
vm目的指定適用於特定於設備實例的 VM 環境的屬性。
memory_mb數位為特定虛擬機器分配的記憶體量(以兆位元組為單位)。
setupwizard_mode細繩指定是否在使用者首次運作設備時執行設備設定精靈。設定精靈模式支援的選項有DISABLEDOPTIONALREQUIRED
cpus數位分配給VM 的虛擬CPU 數量。
disk目的指定與定位用於執行單一 VM 實例的檔案系統項目相關的屬性。
default_build細繩包含 Cuttlefish 虛擬設備映像的資料夾的本機檔案系統路徑。

有關使用cvd分發的設定檔的更多範例,請參閱 Cuttlefish 程式碼樹中的cvd_test_configs資料夾。

控制多租用戶實例

本節介紹如何在多租戶場景下啟動和停止設備。您可以使用以下選項啟動多個 Cuttlefish 裝置:

  • 規範配置:使用描述要啟動的實例清單的 JSON 設定檔為每個裝置啟動自訂設定。
  • 單一訪客映像:從單一訪客映像啟動多個裝置。

從規範配置啟動多個虛擬機

若要使用描述多租戶場景的規範配置啟動多個虛擬機,請使用--config_file=標誌前綴呼叫cvd start命令,如下所示:

cvd start --config_file=CONFIG_FILE

以下是引用名為/etc/phone.json的規範設定檔的範例呼叫。

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

從單一來賓映像啟動多個虛擬機

若要使用單一來賓映像啟動多個 Cuttlefish 設備,請使用--num_instances= N標誌,其中N是要啟動的設備數量。預設情況下,設備從實例編號1開始。

cvd start --num_instances=N

若要變更起始實例編號,請執行下列其中一項操作:

  • 新增--base_instance_num= N標誌,其中N作為第一個實例編號。

    cvd start --base_instance_num=N
    
  • 使用與vsoc- NN相符的使用者帳戶啟動 Cuttlefish,其中NN是兩位數形式的基本實例編號。例如,要使用使用者帳戶vsoc- 01啟動 Cuttlefish,請執行:

    cvd start --base_instance_num=1
    

如何停止設備

若要停止上次cvd start呼叫啟動的所有設備,請執行:

cvd stop