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