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

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

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

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

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

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

साथ काम करने वाले इंस्टेंस की ज़्यादा से ज़्यादा संख्या में बदलाव करना

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

इसमें बदलाव करने के लिए, num_cvd_accounts में /etc/default/cuttlefish-host-resources में बदलाव करें. इसके बाद, यह निर्देश चलाकर cuttlefish-host-resources सेवा को रीस्टार्ट करें:

sudo systemctl restart cuttlefish-host-resources

कैननिकल कॉन्फ़िगरेशन

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

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

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

मल्टी-टेनेंट इंस्टेंस को कंट्रोल करना

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

  • कैननिकल कॉन्फ़िगरेशन: लॉन्च किए जाने वाले इंस्टेंस की सूची की जानकारी देने वाली JSON कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करके, हर डिवाइस के लिए पसंद के मुताबिक कॉन्फ़िगरेशन लॉन्च करें.
  • सिंगल गेस्ट इमेज: गेस्ट की एक इमेज से एक से ज़्यादा डिवाइस लॉन्च करें.

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

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

    cvd create --base_instance_num=1
    

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

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

cvd stop

बंद किए गए डिवाइसों को रीस्टार्ट करने के लिए, यह निर्देश चलाएं:

cvd start

किसी डिवाइस को सिस्टम से पूरी तरह हटाने के लिए, यह निर्देश चलाएं:

cvd remove