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_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 الرقم عدد وحدات المعالجة المركزية الافتراضية المخصّصة للجهاز الافتراضي
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