דיונון: ריבוי דיירים

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

המכונות הווירטואליות המרובות של 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 קנוניים של הגדרות אישיות (החלפת placeholders בהגדרות המכשיר).

{
  "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_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 אובייקט מציין מאפיינים שחלים על סביבת ה-VM שספציפית למכונה של המכשיר.
memory_mb מספר כמות הזיכרון שצריך להקצות למכונה וירטואלית ספציפית במגה-בייט.
setupwizard_mode מחרוזת מציינת אם אשף ההגדרה של המכשיר יפעל עבור המשתמש בהפעלה הראשונה של המכשיר. האפשרויות הנתמכות במצב אשף ההגדרה הן DISABLED, OPTIONAL ו-REQUIRED.
cpus מספר מספר המעבדים הווירטואליים שהוקצו ל-VM.
disk אובייקט מציינת את המאפיינים הרלוונטיים לאיתור ארטיפקטים של מערכת הקבצים שמשמשים להרצת מכונה וירטואלית יחידה.
default_build מחרוזת נתיב של מערכת הקבצים המקומית לתיקייה שמכילה תמונה של מכשיר וירטואלי של Cuttlefish.

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

שליטה במכונות עם ריבוי דיירים (multi-tenant)

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