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