หมึกกระดอง: กลุ่มผู้ใช้หลายกลุ่ม

มัลติเทนแนนต์ของ Cuttlefish ช่วยให้เครื่องโฮสต์สามารถเปิดอุปกรณ์เสมือนของผู้มาเยือนได้หลายเครื่องด้วยการเรียกใช้การเปิดใช้งานเพียงครั้งเดียว

เครื่องเสมือน Cuttlefish หลายเครื่องเหล่านี้สามารถแชร์ทรัพยากรดิสก์โฮสต์บางส่วนได้ ซึ่งจะช่วยให้คุณประหยัดพื้นที่ในดิสก์ แต่ละเครื่องเสมือนจะมีการวางซ้อนดิสก์ที่แยกต่างหากซึ่งครอบคลุมพาร์ติชัน Android (เช่น super, userdata, boot) การแก้ไขดิสก์ของผู้ใช้ชั่วคราวจะวางไว้ในการวางซ้อนดิสก์เฉพาะผู้ใช้ชั่วคราว ซึ่งทำให้เครื่องเสมือน Cuttlefish แต่ละเครื่องมีมุมมองการคัดลอกเมื่อเขียนพาร์ติชันดิสก์ เมื่ออุปกรณ์เสมือนแต่ละเครื่องเขียนข้อมูลไปยังมุมมองของดิสก์มากขึ้น ไฟล์วางซ้อนบนดิสก์โฮสต์ก็จะมีขนาดเพิ่มขึ้นเนื่องจากมีการบันทึกการเปลี่ยนแปลงระหว่างสถานะเดิมกับสถานะปัจจุบัน

คุณสามารถรีเซ็ตไฟล์วางซ้อนเพื่อเปลี่ยนดิสก์ Cuttlefish กลับเป็นสถานะเดิมได้ กระบวนการนี้เรียกว่าการล้างด้วยน้ำแรงดันสูง

หมายเลขอินสแตนซ์

อุปกรณ์ Cuttlefish จะสร้างและใช้ทรัพยากรในโฮสต์ที่เชื่อมโยงกับหมายเลขอินสแตนซ์ เช่น การเชื่อมต่อ adb แสดงผ่านซ็อกเก็ตเซิร์ฟเวอร์ TCP ที่พอร์ต 6520 สำหรับอุปกรณ์ Cuttlefish ที่มีหมายเลขอินสแตนซ์ 1 เมื่อมีการเปิดตัวอินสแตนซ์หลายรายการ ระบบจะสร้างซ็อกเก็ตเซิร์ฟเวอร์ TCP ที่พอร์ต 6520 สำหรับอุปกรณ์เครื่องแรก 6521 สำหรับอุปกรณ์เครื่องที่ 2 และเพิ่มหมายเลขพอร์ตสำหรับอุปกรณ์แต่ละเครื่องที่เพิ่มเข้ามา

แก้ไขจำนวนอินสแตนซ์สูงสุดที่รองรับ

ทรัพยากรฝั่งโฮสต์ เช่น อุปกรณ์เครือข่าย TAP ต้องจัดสรรไว้ล่วงหน้าสำหรับเครื่องเสมือน Cuttlefish โดยค่าเริ่มต้น แพ็กเกจ cuttlefish-base ของ Debian จะจัดสรรทรัพยากรสําหรับหมายเลขอินสแตนซ์ 1 ถึง 10

ซึ่งสามารถเปลี่ยนแปลงได้โดยการแก้ไข num_cvd_accounts ใน /etc/default/cuttlefish-host-resources และรีสตาร์ทบริการ cuttlefish-host-resources โดยเรียกใช้คําสั่งต่อไปนี้

sudo systemctl restart cuttlefish-host-resources

การกำหนดค่า Canonical

การกําหนดค่าตามรูปแบบมาตรฐานแสดงการกําหนดค่าสําหรับอุปกรณ์ Cuttlefish ในรูปแบบ JSON คุณสามารถสร้างไฟล์ JSON การกำหนดค่าตามแบบฉบับเพื่ออธิบายการกำหนดค่าอุปกรณ์ Cuttlefish หลายเครื่องในสถานการณ์ที่มีหลายผู้เช่าได้

ต่อไปนี้อธิบายรูปแบบที่ใช้สำหรับไฟล์ JSON การกำหนดค่าตามแบบฉบับ (แทนที่ตัวยึดตำแหน่งด้วยการกำหนดค่าอุปกรณ์)

{
  "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_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 สตริง ระบุว่าจะเรียกใช้วิซาร์ดการตั้งค่าอุปกรณ์สำหรับผู้ใช้เมื่อเปิดใช้อุปกรณ์เป็นครั้งแรกหรือไม่ ตัวเลือกที่รองรับสำหรับโหมดวิซาร์ดการตั้งค่า ได้แก่ DISABLED, OPTIONAL และ REQUIRED
cpus ตัวเลข จำนวน CPU เสมือนที่จัดสรรให้กับ VM
disk วัตถุ ระบุพร็อพเพอร์ตี้ที่เกี่ยวข้องกับการค้นหาอาร์ติแฟกต์ของระบบไฟล์ที่ใช้สำหรับเรียกใช้อินสแตนซ์ VM รายการเดียว
default_build สตริง เส้นทางระบบไฟล์ในเครื่องไปยังโฟลเดอร์ที่มีอิมเมจอุปกรณ์เสมือน Cuttlefish

ดูตัวอย่างไฟล์การกําหนดค่าเพิ่มเติมที่มาพร้อมกับ cvd ได้ที่โฟลเดอร์ cvd_test_configs ในโครงสร้างโค้ด Cuttlefish

ควบคุมอินสแตนซ์แบบหลายผู้เช่า

ส่วนนี้จะอธิบายวิธีสร้างและทำลายอุปกรณ์ในสถานการณ์ที่มีหลายเทนนต์ คุณเปิดอุปกรณ์ Cuttlefish หลายเครื่องได้โดยใช้ตัวเลือกต่อไปนี้

เริ่ม VM หลายรายการจากการกําหนดค่าตามรูปแบบบัญญัติ

หากต้องการสร้าง VM หลายรายการโดยใช้การกำหนดค่าตามแบบฉบับที่อธิบายสถานการณ์ที่มีหลายผู้เช่า ให้เรียกใช้คำสั่ง cvd create พร้อมคำนำหน้า Flag --config_file= ดังนี้

cvd create --config_file=CONFIG_FILE

ต่อไปนี้คือตัวอย่างการเรียกใช้ที่อ้างอิงไฟล์การกําหนดค่าตามหลักเกณฑ์ที่มีชื่อว่า /etc/phone.json

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

เริ่ม VM หลายรายการจากอิมเมจผู้มาเยือนรายการเดียว

หากต้องการเปิดใช้อุปกรณ์ Cuttlefish หลายเครื่องโดยใช้ภาพผู้ใช้ชั่วคราวภาพเดียว ให้ใช้ Flag --num_instances=N โดยที่ N คือจํานวนอุปกรณ์ที่จะเปิด โดยค่าเริ่มต้น อุปกรณ์จะเริ่มต้นจากหมายเลขอินสแตนซ์ 1

cvd create --num_instances=N

หากต้องการเปลี่ยนหมายเลขอินสแตนซ์เริ่มต้น ให้ทําอย่างใดอย่างหนึ่งต่อไปนี้

  • เพิ่ม Flag --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