Cuttlefish: ייעוד לדיירים מרובים

ריבוי דיירים ב-Cuttlefish מאפשר למחשב המארח להפעיל כמה מכשירים וירטואליים של אורחים באמצעות הפעלה אחת.

המכונות הווירטואליות המרובות של Cuttlefish יכולות לחלוק חלק מהמשאבים של דיסק המארח, וכך לחסוך במקום בדיסק. כל מכונה וירטואלית מקבלת שכבת-על נפרדת של דיסק שמכסה את מחיצות Android (כמו super,‏ userdata, ‏ boot). כל שינוי בדיסק האורח ממוקם בשכבת-על של דיסק ספציפי לאורח, וכך כל מכונה וירטואלית של Cuttlefish מקבלת תצוגה של העתקה בעת כתיבה של מחיצות הדיסק שלה. ככל שמכשיר וירטואלי כותב יותר נתונים לתצוגה שלו בדיסק, גודל קובצי השכבה בדיסק המארח גדל כי הם מתעדים את הדלתא בין המצב המקורי למצב הנוכחי שלהם.

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

מספרי מופעים

מכשירי Cuttlefish יוצרים משאבים במארח ומשתמשים בהם, והם קשורים למספר המופע שלהם. לדוגמה, חיבור adb נחשף דרך שקע שרת TCP ביציאה 6520 במכשיר Cuttlefish עם מספר מופע 1. כשמפעילים כמה מופעים, נוצר שקע שרת TCP ביציאה 6520 למכשיר הראשון, ביציאה 6521 למכשיר השני, ומספר היציאה גדל לכל מכשיר נוסף.

שינוי המספר המקסימלי של מופעים נתמכים

צריך להקצות מראש משאבים בצד המארח, כמו מכשירי רשת TAP, למכונות וירטואליות של Cuttlefish. כברירת מחדל, חבילת Debian‏ cuttlefish-base מספקת משאבים למספרי מופעים 1 עד 10.

אפשר לשנות את זה על ידי שינוי num_cvd_accounts ב-/etc/default/cuttlefish-host-resources והפעלה מחדש של שירות cuttlefish-host-resources באמצעות הפעלת הפקודה הבאה:

sudo systemctl restart cuttlefish-host-resources

הגדרות קנוניות

הגדרות קנוניות מייצגות את ההגדרה של מכשירי Cuttlefish בפורמט JSON. אתם יכולים ליצור קובצי JSON של הגדרות קנוניות כדי לתאר את ההגדרה של כמה מכשירי Cuttlefish בתרחיש של ריבוי דיירים.

בהמשך מפורט הפורמט שמשמש לקובצי JSON של תצורה קנונית (צריך להחליף את ה-placeholder בתצורות המכשיר).

{
  "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 מספר מספר יחידות ה-CPU הווירטואליות שהוקצו למכונה הווירטואלית.
disk אובייקט מציינת מאפיינים שרלוונטיים לאיתור ארטיפקטים של מערכת קבצים שמשמשים להפעלת מופע יחיד של מכונה וירטואלית.
default_build מחרוזת נתיב במערכת הקבצים המקומית לתיקייה שמכילה תמונה של מכשיר וירטואלי של Cuttlefish.

דוגמאות נוספות לקובצי הגדרות שמופצים עם cvd מופיעות בתיקייה cvd_test_configs בעץ הקוד של Cuttlefish.

שליטה במופעים של דירות שותפים

בקטע הזה נסביר איך ליצור מכשירים ולהשמיד אותם בתרחיש של ריבוי דיירים. אפשר להפעיל כמה מכשירי 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