Cuttlefish: एक से ज़्यादा किरायेदार

Cuttlefish की मल्टी-टेनेंसी सुविधा की मदद से, आपकी होस्ट मशीन एक ही लॉन्च इनवोकेशन के साथ कई वर्चुअल गेस्ट डिवाइस लॉन्च कर सकती है.

ये कई Cuttlefish वर्चुअल मशीनें, होस्ट डिस्क के कुछ संसाधनों को शेयर कर सकती हैं. इससे आपको डिस्क की जगह बचाने में मदद मिलती है. हर वर्चुअल मशीन को एक अलग डिस्क ओवरले मिलता है. यह डिस्क ओवरले, Android के पार्टिशन (जैसे कि super, userdata, boot) को कवर करता है. गेस्ट डिस्क में किए गए किसी भी बदलाव को, गेस्ट के हिसाब से डिस्क ओवरले में रखा जाता है. इससे हर Cuttlefish वर्चुअल मशीन को, अपने डिस्क पार्टिशन का कॉपी-ऑन-राइट व्यू मिलता है. हर वर्चुअल डिवाइस, डिस्क के अपने व्यू में ज़्यादा डेटा लिखता है. इसलिए, होस्ट डिस्क पर मौजूद ओवरले फ़ाइलों का साइज़ बढ़ जाता है. ऐसा इसलिए होता है, क्योंकि ये फ़ाइलें, ओरिजनल स्टेट और मौजूदा स्टेट के बीच के अंतर को कैप्चर करती हैं.

Cuttlefish डिस्क को उसकी मूल स्थिति में वापस लाने के लिए, ओवरले फ़ाइलों को रीसेट किया जा सकता है. इस प्रोसेस को पावरवॉश कहा जाता है.

इंस्टेंस नंबर

Cuttlefish डिवाइस, होस्ट पर मौजूद संसाधनों को बनाते और उनका इस्तेमाल करते हैं. ये संसाधन, उनके इंस्टेंस नंबर से जुड़े होते हैं. उदाहरण के लिए, 1 इंस्टेंस नंबर वाले Cuttlefish डिवाइस के लिए, adb कनेक्शन को टीसीपी सर्वर सॉकेट के ज़रिए पोर्ट 6520 पर दिखाया जाता है. एक से ज़्यादा इंस्टेंस लॉन्च होने पर, यह पहले डिवाइस के लिए पोर्ट 6520 पर, दूसरे डिवाइस के लिए 6521 पर, और हर अतिरिक्त डिवाइस के लिए पोर्ट नंबर बढ़ाता है.

सपोर्ट किए गए इंस्टेंस की ज़्यादा से ज़्यादा संख्या में बदलाव करना

होस्ट-साइड के रिसॉर्स, जैसे कि टीएपी नेटवर्क डिवाइस, Cuttlefish वर्चुअल मशीनों के लिए पहले से असाइन किए जाने चाहिए. डिफ़ॉल्ट रूप से, cuttlefish-base Debian पैकेज, इंस्टेंस नंबर 1 से 10 तक के लिए संसाधन उपलब्ध कराता है.

इसे num_cvd_accounts में बदलाव करके बदला जा सकता है. इसके लिए, आपको यह कमांड चलाकर cuttlefish-host-resources सेवा को फिर से शुरू करना होगा:/etc/default/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_only_phone-userdebug"
      }
    },
    {
      "@import": "wearable",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "REQUIRED",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_gwear_x86-userdebug"
      }
    }
  ]
}

इस टेबल में, दो डिवाइसों के साथ कॉन्फ़िगरेशन के उदाहरण में इस्तेमाल किए गए एलिमेंट के बारे में बताया गया है:

कौन-कौन सी चीज़ें शामिल हैं टाइप ब्यौरा
instances Array JSON ऑब्जेक्ट की ऐसी सरणी जिसमें हर ऑब्जेक्ट, लॉन्च किए जाने वाले डिवाइसों के मल्टी-टैलेंट ग्रुप में मौजूद किसी एक डिवाइस के बारे में बताता है.
@import स्ट्रिंग इससे डिवाइस टाइप के बारे में पता चलता है और डिवाइस के कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट वैल्यू सेट होती हैं. phone और wearable डिवाइसों पर इस सुविधा का इस्तेमाल किया जा सकता है.
vm ऑब्जेक्ट उन प्रॉपर्टी के बारे में बताता है जो डिवाइस इंस्टेंस के लिए खास तौर पर वीएम एनवायरमेंट पर लागू होती हैं.
memory_mb नंबर मेगाबाइट में, किसी वीएम के लिए मेमोरी की तय की गई मात्रा.
setupwizard_mode स्ट्रिंग इससे यह तय होता है कि डिवाइस को पहली बार चालू करने पर, उपयोगकर्ता के लिए डिवाइस सेटअप विज़र्ड चलाया जाता है या नहीं. सेटअप विज़र्ड मोड के लिए, DISABLED, OPTIONAL, और REQUIRED जैसे विकल्प इस्तेमाल किए जा सकते हैं.
cpus नंबर वीएम को असाइन किए गए वर्चुअल सीपीयू की संख्या.
disk ऑब्जेक्ट यह एक वीएम इंस्टेंस को चलाने के लिए इस्तेमाल किए गए फ़ाइल सिस्टम आर्टफ़ैक्ट का पता लगाने से जुड़ी प्रॉपर्टी के बारे में बताता है.
default_build स्ट्रिंग Cuttlefish वर्चुअल डिवाइस की इमेज वाले फ़ोल्डर का लोकल फ़ाइल सिस्टम पाथ.

cvd के साथ डिस्ट्रिब्यूट की गई कॉन्फ़िगरेशन फ़ाइलों के ज़्यादा उदाहरणों के लिए, Cuttlefish कोड ट्री में मौजूद cvd_test_configs फ़ोल्डर देखें.

एक से ज़्यादा किरायेदार वाले इंस्टेंस को कंट्रोल करना

इस सेक्शन में, मल्टी-टेंटेंट के मामले में डिवाइसों को बनाने और हटाने का तरीका बताया गया है. इन विकल्पों का इस्तेमाल करके, एक से ज़्यादा Cuttlefish डिवाइस लॉन्च किए जा सकते हैं:

कैननिकल कॉन्फ़िगरेशन से कई वीएम शुरू करना

मल्टी-टैनेंट के बारे में बताने वाले कैननिकल कॉन्फ़िगरेशन का इस्तेमाल करके कई वीएम बनाने के लिए, cvd create कमांड को --config_file= फ़्लैग प्रीफ़िक्स के साथ इस तरह से लागू करें:

cvd create --config_file=CONFIG_FILE

यहां दिए गए उदाहरण में, /etc/phone.json नाम की कैननिकल कॉन्फ़िगरेशन फ़ाइल का रेफ़रंस दिया गया है.

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

एक ही गेस्ट इमेज से कई वीएम शुरू करना

एक ही गेस्ट इमेज का इस्तेमाल करके, एक से ज़्यादा 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, दो अंकों के फ़ॉर्म में बेस इंस्टेंस नंबर है. उदाहरण के लिए, किसी उपयोगकर्ता खाते vsoc-01 से Cuttlefish लॉन्च करने के लिए, यह कमांड चलाएं:

    cvd create --base_instance_num=1
    

डिवाइसों को बंद करने का तरीका

पिछली बार cvd create इनवॉकेशन से लॉन्च किए गए सभी डिवाइसों को बंद करने के लिए, यह कमांड चलाएं:

cvd stop

जिन डिवाइसों को बंद कर दिया गया है उन्हें फिर से चालू करने के लिए, यह कमांड चलाएं:

cvd start

सिस्टम रन से किसी डिवाइस को पूरी तरह से हटाने के लिए:

cvd remove