Cuttlefish: Snapshot and restore

ב-Android 15 מוצגות דרכים לצלם תמונת מצב ולשחזר תמונת מצב של מכשיר וירטואלי מסוג Cuttlefish. צילום תמונה של מכשיר Cuttlefish מאפשר לשמור את מצב המכשיר בתמונה בדיסק. אחר כך אפשר לשחזר את התמונה כדי להציג מכשיר Cuttlefish במצב השמור הקודם.

אפשר להשתמש בתמונות מצב בתהליכי עבודה שונים, אוטומטיים או ידניים. כשמבצעים הליך שמשנה את המכשיר, אפשר לצלם תמונת מצב של המכשיר כדי לוודא שאפשר לשחזר את המכשיר למצב מסוים. לדוגמה, כשמריצים חבילות של בדיקות שמשנות את מצב המכשיר ויכולות לגרום לבעיות או לחוסר יציבות בבדיקות הבאות, אפשר לצלם תמונת מצב כדי לשחזר את המכשיר למצב שנשמר אחרי בדיקה, וכך לוודא שהבדיקות הבאות יפעלו בצורה חלקה.

דוגמה נוספת לתרחיש שבו צילומי מצב שימושיים היא בדיקת ההתנהגות של אפליקציה. כשבודקים את ההתנהגות של אפליקציה על סמך סדרה של פעולות, אפשר לצלם תמונת מצב בין הפעולות בזמן שהאפליקציה פועלת, כדי שתוכלו לשחזר את תמונת המצב הזו בלי שתצטרכו להפעיל מחדש מההתחלה. לדוגמה, אם הפעלת משחק כרוכה בזמן אתחול ארוך, אפשר לצלם תמונת מצב אחרי שמגיעים לתפריט הראשי כדי לשחזר את המכשיר למצב הזה ולדלג על זמן האתחול.

צילום תמונת מצב של מכשיר Cuttlefish

כשמצלמים תמונת מצב של מכשיר, צריך להשהות את מכשיר Cuttlefish כדי לוודא שהוא במצב יציב. כשהמכשיר מושהה, כל המעבדים הווירטואליים והמכשירים מופסקים, וכל המאגרים מעבירים את המצב שלהם למכונה הווירטואלית. לאחר מכן, התמונה תישמר בדיסק בתיקיית יעד שצוינה, ותכלול את מצב ה-vCPU, הזיכרון ומצב המכשיר.

אין תמיכה ב-VirtiosFS, ולכן צריך להשבית אותו כשמצלמים תמונת מצב. כדי להשבית את VirtioFS, מעבירים את הארגומנט --enable_virtiofs=false כשמריצים את cvd create או cvd start.

רק מצב ה-GPU של SwiftShader ‏ (guest_swiftshader) נתמך בצילום תמונות. אין תמיכה במצבי גרפיקה מואצת אחרים.

בשלבים הבאים מוסבר איך להפעיל מכשיר Cuttlefish וליצור תמונת מצב.

  1. מפעילים מכשיר, תוך השבתה של VirtioFS. (אחרי זה תוכלו להשתמש במכשיר).

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. מריצים את הפקודה cvd snapshot_take עם הדגלים הבאים כדי ליצור תמונת מצב:

    • --force: אם קיימת תיקייה בנתיב שצוין של ה-Snapshot, הדגל הזה מבטיח שהתיקייה הקיימת תימחק ותיצור תיקייה חדשה בנתיב ה-Snapshot שמכילה את ה-Snapshot

    • --auto_suspend: השהיית המכשיר לפני צילום ה-snapshot והפעלת המכשיר מחדש אחרי צילום ה-snapshot.

    • --snapshot_path: הנתיב שצוין שבו נוצרת תיקייה חדשה עם ה-snapshot.

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

שחזור מכשיר Cuttlefish

כשמשחזרים תמונת מצב של מכשיר Cuttlefish, צריך לעצור את מופע Cuttlefish שעבורו צולמה תמונת המצב. אם המכונה כבר הופסקה, לא צריך לבצע פעולה נוספת ואפשר לשחזר את התמונה.

כדי לשחזר תמונת מצב של מכשיר Cuttlefish, מפעילים מכשיר עם cvd create וכוללים את הנתיב של תמונת המצב. אם מספר מופע הבסיס של מכשיר Cuttlefish שבו צולמה התמונה שונה ממספר מופע הבסיס של מופע Cuttlefish הנוכחי, צריך להעביר את מספר מופע הבסיס הזה באמצעות הדגל --base_instance_num.

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

השעיה של מכשיר Cuttlefish

אפשר להשהות מכשיר Cuttlefish בלי לצלם תמונת מצב (לא נעשה שימוש בנפח אחסון כדי לשמור את המצב). כדי להשעות מכשיר Cuttlefish, מפעילים:

cvd suspend

המשך העבודה במכשיר Cuttlefish

כדי להפעיל מחדש מכשיר Cuttlefish שהושעה, מריצים את הפקודה:

cvd resume

אימות התכונה Snapshot/Restore

כדי לאמת את התכונה 'תמונת מצב/שחזור', אפשר להריץ את הבדיקה הבאה:

atest SnapshotTest