ปลาหมึก: การเช่าหลายครั้ง

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

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

ไฟล์ซ้อนทับสามารถรีเซ็ตได้เพื่อให้ดิสก์ปลาหมึกกลับสู่สถานะดั้งเดิม กระบวนการนี้เรียกว่า การล้างด้วยไฟฟ้า

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

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

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

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

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

sudo systemctl restart cuttlefish-host-resources

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

การกำหนดค่า Canonical แสดงถึงการกำหนดค่าสำหรับอุปกรณ์ Cuttlefish ในรูปแบบ JSON คุณสามารถสร้างไฟล์ JSON การกำหนดค่า Canonical เพื่ออธิบายการกำหนดค่าของอุปกรณ์ 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 สตริง ระบุประเภทอุปกรณ์และตั้งค่าเริ่มต้นสำหรับการกำหนดค่าอุปกรณ์ ประเภทอุปกรณ์ที่รองรับ ได้แก่ 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 ได้หลายตัวโดยใช้ตัวเลือกต่อไปนี้:

  • Canonical config : เปิดใช้งานการกำหนดค่าที่กำหนดเองสำหรับแต่ละอุปกรณ์โดยใช้ไฟล์กำหนดค่า JSON ที่อธิบายรายการอินสแตนซ์ที่จะเปิดใช้งาน
  • รูปภาพของผู้เยี่ยมชมรายเดียว : เปิดอุปกรณ์หลายเครื่องจากรูปภาพของผู้เยี่ยมชมรายเดียว

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

หากต้องการเริ่ม VM หลายเครื่องโดยใช้การกำหนดค่ามาตรฐานที่อธิบายสถานการณ์จำลองแบบหลายผู้เช่า ให้เรียกใช้คำสั่ง cvd start ด้วยคำนำหน้าแฟล็ก --config_file= ดังนี้:

cvd start --config_file=CONFIG_FILE

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

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

เริ่ม VM หลายรายการจากอิมเมจของแขกรายเดียว

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

cvd start --num_instances=N

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

  • เพิ่มแฟล็ก --base_instance_num= N โดยมี N เป็นหมายเลขอินสแตนซ์แรก

    cvd start --base_instance_num=N
    
  • เปิดตัว Cuttlefish ด้วยบัญชีผู้ใช้ที่ตรงกับ vsoc- NN โดยที่ NN คือหมายเลขอินสแตนซ์ฐานในรูปแบบสองหลัก ตัวอย่างเช่น หากต้องการเปิด Cuttlefish ด้วยบัญชีผู้ใช้ vsoc- 01 ให้รัน:

    cvd start --base_instance_num=1
    

วิธีหยุดอุปกรณ์

หากต้องการหยุดอุปกรณ์ทั้งหมดที่เรียกใช้โดยการเรียกใช้ cvd start ครั้งล่าสุด ให้รัน:

cvd stop