การรองรับผู้เช่าหลายรายของ Cuttlefish ช่วยให้เครื่องโฮสต์เปิดใช้อุปกรณ์เสมือนจริงสำหรับแขกรับเชิญหลายเครื่องได้ด้วยการเรียกใช้เพียงครั้งเดียว
เครื่องเสมือน Cuttlefish หลายเครื่องนี้สามารถแชร์ทรัพยากรดิสก์ของโฮสต์บางส่วนได้
ซึ่งจะช่วยให้คุณประหยัดพื้นที่ดิสก์ เครื่องเสมือนแต่ละเครื่องจะมี
การซ้อนทับดิสก์ที่แตกต่างกันซึ่งครอบคลุมพาร์ติชัน Android (เช่น super,
userdata, boot) การแก้ไขใดๆ ในดิสก์ของแขกจะอยู่ใน
การซ้อนทับดิสก์เฉพาะแขก ซึ่งทำให้เครื่องเสมือน Cuttlefish แต่ละเครื่องมี
มุมมองแบบคัดลอกเมื่อเขียนของพาร์ติชันดิสก์ เมื่ออุปกรณ์เสมือนแต่ละเครื่องเขียนข้อมูลเพิ่มเติมลงในมุมมองของดิสก์ ไฟล์ซ้อนทับในดิสก์โฮสต์จะมีขนาดเพิ่มขึ้นเนื่องจากไฟล์ดังกล่าวจะบันทึกส่วนต่างระหว่างสถานะเดิมกับสถานะปัจจุบัน
คุณรีเซ็ตไฟล์ซ้อนทับเพื่อคืนค่าดิสก์ Cuttlefish กลับสู่ สถานะเดิมได้ กระบวนการนี้เรียกว่า การล้างข้อมูล
หมายเลขอินสแตนซ์
อุปกรณ์ Cuttlefish สร้างและใช้ทรัพยากรในโฮสต์ที่เชื่อมโยงกับหมายเลขอินสแตนซ์ เช่น การเชื่อมต่อ adb จะแสดงผ่านซ็อกเก็ตเซิร์ฟเวอร์ TCP
 ที่พอร์ต 6520 สำหรับอุปกรณ์ Cuttlefish ที่มีหมายเลขอินสแตนซ์ 1
เมื่อเปิดใช้หลายอินสแตนซ์ ระบบจะสร้างซ็อกเก็ตเซิร์ฟเวอร์ TCP ที่พอร์ต
6520 สำหรับอุปกรณ์เครื่องแรก 6521 สำหรับอุปกรณ์เครื่องที่ 2 และเพิ่มหมายเลขพอร์ต
สำหรับอุปกรณ์แต่ละเครื่องที่เพิ่มเข้ามา
แก้ไขจำนวนอินสแตนซ์สูงสุดที่รองรับ
ต้องจัดสรรทรัพยากรฝั่งโฮสต์ไว้ล่วงหน้าสำหรับเครื่องเสมือน Cuttlefish เช่น อุปกรณ์เครือข่าย TAP
 โดยค่าเริ่มต้น แพ็กเกจ Debian ของ 
cuttlefish-base
จะจัดสรรทรัพยากรสำหรับหมายเลขอินสแตนซ์ 1 ถึง 10
คุณเปลี่ยนค่านี้ได้โดยแก้ไข num_cvd_accounts ใน
/etc/default/cuttlefish-host-resources และรีสตาร์ทบริการ
cuttlefish-host-resources โดยเรียกใช้คำสั่งต่อไปนี้
sudo systemctl restart cuttlefish-host-resources
การกำหนดค่า Canonical
การกำหนดค่า Canonical แสดงถึงการกำหนดค่าสำหรับอุปกรณ์ Cuttlefish ในรูปแบบ JSON คุณสามารถสร้างไฟล์ JSON ของการกำหนดค่าที่แน่นอน เพื่ออธิบายการกำหนดค่าของอุปกรณ์ Cuttlefish หลายเครื่องในสถานการณ์แบบหลายผู้เช่า
ต่อไปนี้จะอธิบายรูปแบบที่ใช้สำหรับไฟล์ JSON ของการกำหนดค่า Canonical (แทนที่ตัวยึดตำแหน่งด้วยการกำหนดค่าอุปกรณ์)
{
  "common": {
    CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
  },
  "instances": [
    {
      FIRST_DEVICE_CONFIGURATION
    },
    {
      NTH_DEVICE_CONFIGURATION
    }
  ]
}
ต่อไปนี้เป็นตัวอย่างไฟล์การกำหนดค่าของการตั้งค่าที่มีอุปกรณ์ 2 เครื่อง ได้แก่ อุปกรณ์โทรศัพท์และอุปกรณ์ที่สวมใส่ได้
{
  "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"
      }
    }
  ]
}
ตารางนี้อธิบายองค์ประกอบที่ใช้ในการกำหนดค่าตัวอย่างที่มีอุปกรณ์ 2 เครื่อง
| ธาตุ | ประเภท | คำอธิบาย | 
|---|---|---|
instances | 
    อาร์เรย์ | อาร์เรย์ของออบเจ็กต์ JSON ซึ่งแต่ละออบเจ็กต์อธิบายอุปกรณ์เครื่องเดียวใน กลุ่มอุปกรณ์แบบหลายผู้เช่าที่จะเปิดใช้ | 
@import | 
    สตริง | ระบุประเภทอุปกรณ์และตั้งค่าเริ่มต้นสำหรับการกำหนดค่าอุปกรณ์
     ประเภทอุปกรณ์ที่รองรับ ได้แก่
    phone และ wearable | 
  
vm | 
    วัตถุ | ระบุพร็อพเพอร์ตี้ที่ใช้กับสภาพแวดล้อม VM ที่เจาะจงอินสแตนซ์อุปกรณ์ | 
memory_mb | 
    ตัวเลข | ปริมาณหน่วยความจำที่จะจัดสรรให้กับ VM ที่เฉพาะเจาะจงในหน่วยเมกะไบต์ | 
setupwizard_mode | 
    สตริง | ระบุว่าจะเรียกใช้ตัวช่วยสร้างการตั้งค่าอุปกรณ์สำหรับผู้ใช้เมื่อเรียกใช้อุปกรณ์เป็นครั้งแรกหรือไม่
    run of the device. ตัวเลือกที่รองรับสำหรับโหมดวิซาร์ดการตั้งค่าคือ
    DISABLED, OPTIONAL และ
    REQUIRED | 
  
cpus | 
    ตัวเลข | จำนวน CPU เสมือนที่จัดสรรให้กับ VM | 
disk | 
    วัตถุ | ระบุพร็อพเพอร์ตี้ที่เกี่ยวข้องกับการค้นหาสิ่งประดิษฐ์ของระบบไฟล์ที่ใช้ ในการเรียกใช้อินสแตนซ์ VM เดียว | 
default_build | 
    สตริง | เส้นทางระบบไฟล์ในเครื่องไปยังโฟลเดอร์ที่มีอิมเมจอุปกรณ์เสมือน Cuttlefish | 
ดูตัวอย่างเพิ่มเติมของไฟล์การกำหนดค่าที่จัดจำหน่ายพร้อมกับ cvd ได้ที่โฟลเดอร์
cvd_test_configs
ในโครงสร้างโค้ดของ Cuttlefish
ควบคุมอินสแตนซ์แบบหลายผู้เช่า
ส่วนนี้จะอธิบายวิธีสร้างและทำลายอุปกรณ์ในสถานการณ์แบบหลายผู้เช่า คุณสามารถเปิดใช้อุปกรณ์ Cuttlefish หลายเครื่องได้โดยใช้ตัวเลือกต่อไปนี้
- การกำหนดค่า Canonical: เปิดใช้การกำหนดค่าที่ปรับแต่งแล้ว สำหรับแต่ละอุปกรณ์โดยใช้ไฟล์การกำหนดค่า JSON ที่อธิบาย รายการอินสแตนซ์ที่จะเปิดใช้
 - รูปภาพผู้ใช้ชั่วคราวเดียว: เปิดตัวอุปกรณ์หลายเครื่องจากรูปภาพผู้ใช้ชั่วคราวเดียว
 
เริ่ม VM หลายรายการจากการกำหนดค่าตามรูปแบบบัญญัติ
หากต้องการสร้าง VM หลายรายการโดยใช้การกำหนดค่าที่ถูกต้องซึ่งอธิบายสถานการณ์แบบหลายผู้เช่า ให้เรียกใช้คำสั่ง cvd create โดยมีคำนำหน้าของแฟล็ก --config_file=
 ดังนี้
cvd create --config_file=CONFIG_FILE
ต่อไปนี้คือตัวอย่างการเรียกใช้ที่อ้างอิงไฟล์การกำหนดค่า Canonical ชื่อ
/etc/phone.json
cvd create --config_file=/etc/phone.json
เริ่ม VM หลายรายการจากอิมเมจผู้ใช้เดียว
หากต้องการเปิดใช้อุปกรณ์ Cuttlefish หลายเครื่องโดยใช้รูปภาพแขกรับเชิญเดียว ให้ใช้
--num_instances=N โดยที่ N คือจำนวน
อุปกรณ์ที่จะเปิดใช้ โดยค่าเริ่มต้น อุปกรณ์จะเริ่มต้นจากหมายเลขอินสแตนซ์ 1
cvd create --num_instances=N
หากต้องการเปลี่ยนหมายเลขอินสแตนซ์เริ่มต้น ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
เพิ่มแฟล็ก
--base_instance_num=Nโดยมี N เป็นหมายเลขอินสแตนซ์แรกcvd create --base_instance_num=N
เปิดใช้ Cuttlefish ด้วยบัญชีผู้ใช้ที่ตรงกัน
vsoc-NNโดยที่ NN คือหมายเลขอินสแตนซ์ฐาน ในรูปแบบ 2 หลัก เช่น หากต้องการเปิดใช้ Cuttlefish ด้วยบัญชีผู้ใช้vsoc-01ให้เรียกใช้คำสั่งต่อไปนี้cvd create --base_instance_num=1
วิธีหยุดอุปกรณ์
หากต้องการหยุดอุปกรณ์ทั้งหมดที่เปิดใช้โดยการเรียกใช้ cvd create ครั้งล่าสุด ให้เรียกใช้คำสั่งต่อไปนี้
cvd stop
หากต้องการรีสตาร์ทอุปกรณ์ที่หยุดทำงาน ให้เรียกใช้คำสั่งต่อไปนี้
cvd start
หากต้องการนำอุปกรณ์ออกจากระบบอย่างสมบูรณ์ ให้เรียกใช้คำสั่งต่อไปนี้
cvd remove