Cuttlefish: Multi-tenancy

تسمح ميزة "المستأجرون المتعدّدون" في 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 للإعدادات الأساسية (استبدِل العناصر النائبة بإعدادات الجهاز).

{
  "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 عنصر تحدِّد السمات التي تنطبق على بيئة الجهاز الظاهري الخاصة بمثيل device.
memory_mb الرقم مقدار الذاكرة المخصّصة لجهاز افتراضي معيّن بالميغابايت.
setupwizard_mode سلسلة يحدِّد هذا الإعداد ما إذا كان سيتم تشغيل معالج إعداد الجهاز للمستخدم عند تشغيل الجهاز لأول مرة. الخيارات المتوافقة لوضع معالج الإعداد هي DISABLED وOPTIONAL و REQUIRED.
cpus الرقم عدد وحدات المعالجة المركزية الافتراضية المخصّصة للجهاز الظاهري
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