कटलफ़िश: स्नैपशॉट और रीस्टोरेशन

Android 15 में, कटलफ़िश वर्चुअल डिवाइस के स्नैपशॉट लेने और उसे वापस लाने का तरीका बताया गया है. Cuttlefish डिवाइस का स्नैपशॉट लेने पर, डिवाइस की स्थिति को डिस्क पर इमेज के तौर पर सेव किया जा सकता है. इसके बाद, स्नैपशॉट को वापस लाया जा सकता है, ताकि कटलफ़िश डिवाइस को पहले सेव की गई स्थिति पर लाया जा सके.

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

किसी ऐप्लिकेशन के व्यवहार की जांच करते समय भी स्नैपशॉट काम आते हैं. किसी ऐप्लिकेशन के व्यवहार की जांच करते समय, ऐप्लिकेशन के चलने के दौरान कार्रवाइयों के बीच में स्नैपशॉट लिया जा सकता है. इससे, आपको शुरुआत से फिर से शुरू किए बिना उस स्नैपशॉट को वापस लाया जा सकता है. उदाहरण के लिए, अगर किसी गेम को लॉन्च करने में ज़्यादा समय लगता है, तो मुख्य मेन्यू पर पहुंचने के बाद एक स्नैपशॉट लिया जा सकता है. इससे डिवाइस को उस स्थिति में वापस लाया जा सकता है, जिससे डिवाइस को फ़ेच करने में लगने वाला समय कम हो जाता है.

Cuttlefish डिवाइस का स्नैपशॉट लेना

डिवाइस का स्नैपशॉट लेते समय, कटलफ़िश डिवाइस को निलंबित करना चाहिए, ताकि यह पक्का किया जा सके कि कटलफ़िश डिवाइस ठीक से काम कर रहा है. डिवाइस के निलंबित होने पर, सभी vCPU और डिवाइस बंद हो जाते हैं. साथ ही, सभी बफ़र अपनी स्थिति को VM पर भेज देते हैं. इसके बाद स्नैपशॉट, vCPU की स्थिति, मेमोरी, और डिवाइस की स्थिति को बताए गए डेस्टिनेशन फ़ोल्डर में सेव करता है.

VirtiosFS का इस्तेमाल नहीं किया जा सकता. साथ ही, स्नैपशॉट लेते समय इसे बंद करना ज़रूरी है. VirtioFS को बंद करने के लिए, cvd create या cvd start को चलाते समय --enable_virtiofs=false आर्ग्युमेंट को पास करें.

स्नैपशॉट के लिए, सिर्फ़ SwiftShader (guest_swiftshader) जीपीयू मोड का इस्तेमाल किया जा सकता है. बेहतर ग्राफ़िक मोड के अन्य विकल्प काम नहीं करते.

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

  1. VirtioFS को बंद करते समय, कोई डिवाइस लॉन्च करना. (इसके बाद, डिवाइस का इस्तेमाल किया जा सकता है.)

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. इन फ़्लैग के साथ cvd snapshot_take चलाकर स्नैपशॉट लें:

    • --force: अगर तय किए गए स्नैपशॉट पाथ पर कोई फ़ोल्डर मौजूद है, तो यह फ़्लैग पक्का करता है कि मौजूदा फ़ोल्डर मिटा दिया गया है. साथ ही, स्नैपशॉट वाले पाथ पर एक नया फ़ोल्डर बनाया जाएगा

    • --auto_suspend: स्नैपशॉट लेने से पहले डिवाइस को निलंबित करता है और स्नैपशॉट लेने के बाद डिवाइस को फिर से चालू करता है.

    • --snapshot_path: बताया गया पाथ, जहां स्नैपशॉट के साथ एक नया फ़ोल्डर बनाया गया है.

    cvd snapshot_take --force --auto_suspend \
    --snapshot_path=PATH

कटलफ़िश डिवाइस को वापस लाना

किसी कटलफ़िश डिवाइस के स्नैपशॉट को वापस लाने के दौरान, उस कटलफ़िश इंस्टेंस को रोकना ज़रूरी है जिसका स्नैपशॉट लिया गया था. अगर इंस्टेंस पहले से ही बंद है, तो आपको कुछ और करने की ज़रूरत नहीं है और स्नैपशॉट को वापस लाया जा सकता है.

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

cvd create --snapshot_path=PATH \
--base_instance_num=ID

Cuttlefish डिवाइस को निलंबित करना

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

cvd suspend

कटलफ़िश डिवाइस को फिर से शुरू करना

निलंबित किए गए कटलफ़िश डिवाइस को फिर से चालू करने के लिए, इसे चलाएं:

cvd resume

स्नैपशॉट/वापस लाने की सुविधा की पुष्टि करना

स्नैपशॉट/वापस लाने की सुविधा की पुष्टि करने के लिए, यह टेस्ट चलाएं:

atest SnapshotTest