कटलफ़िश: मल्टी-टेनेंसी

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

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

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

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

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

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

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

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

sudo systemctl restart cuttlefish-host-resources

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

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

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

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

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

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

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

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

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

शुरू होने वाले इंस्टेंस का नंबर बदलने के लिए, इनमें से कोई एक काम करें:

  • पहले इंस्टेंस नंबर के तौर पर, N के साथ --base_instance_num=N फ़्लैग जोड़ें.

    cvd create --base_instance_num=N
    
  • vsoc-NN से मेल खाने वाले उपयोगकर्ता खाते के साथ कटलफ़िश लॉन्च करें, जहां NN दो अंकों के रूप में बेस इंस्टेंस संख्या है. उदाहरण के लिए, उपयोगकर्ता खाते vsoc-01 से कटलफ़िश लॉन्च करने के लिए, यह चलाएं:

    cvd create --base_instance_num=1
    

डिवाइसों को कैसे रोकें

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

cvd stop

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

cvd start

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

cvd remove