يتضمّن نظام Android آليتين للتحديث: تحديثات A/B (سلسة) وتحديثات غير A/B. لتقليل تعقيد الرمز وتحسين عملية التحديث، في نظام Android 11 تم توحيد آليتين من خلال A/B الافتراضي لتوفير تحديثات سلسة لجميع المستخدمين أجهزة ذات تكلفة تخزين منخفضة. الإصدار 12 من نظام التشغيل Android خيار الضغط باستخدام A/B الافتراضي لضغط الأقسام التي تم الحصول على لقطات شاشة لها في نظامَي التشغيل Android 11 وAndroid 12، سيتم تطبيق ما يلي: ينطبق:
- تتوفّر تحديثات أ/ب الافتراضية بسلاسة مثل تحديثات أ/ب. إشعارات A/B الافتراضية تقليل الوقت الذي يكون فيه الجهاز غير متصل بالإنترنت وغير قابل للاستخدام.
- يمكن إرجاع تحديثات أ/ب الافتراضية. فإذا فشل تشغيل نظام التشغيل الجديد، تلقائيًا إلى الإصدار السابق.
- تستخدم تحديثات A/B الافتراضية حدًا أدنى من المساحة الإضافية من خلال تكرار الأقسام التي يستخدمها برنامج الإقلاع. تشمل الأقسام الأخرى القابلة للتحديث لقطة.
المعلومات الأساسية والمصطلحات
يعرّف هذا القسم المصطلحات ويصف التقنية التي تدعم A/B الافتراضية.
برنامج تحديد الأجهزة
أداة تحديد الأجهزة هي طبقة كتل افتراضية في Linux تُستخدَم كثيرًا في نظام التشغيل Android. مع
الأقسام الديناميكية، هي أقسام مثل
/system
هي حزمة من الأجهزة ذات الطبقات:
- في أسفل الحزمة، يوجد القسم المتميز الفعلي (على سبيل المثال،
/dev/block/by-name/super
). - وفي المنتصف، يوجد جهاز
dm-linear
، ويحدّد الوحدات الفرعية في العلامة من القسم المحدد. يظهر هذا في شكل/dev/block/mapper/system_[a|b]
على جهاز A/B/dev/block/mapper/system
على جهاز غير A/B. - في أعلى الصفحة، يتوفّر جهاز
dm-verity
تم إنشاؤه للأقسام التي تم التحقّق منها. يتحقّق هذا الجهاز من توقيع عمليات الحظر على جهازdm-linear
. بشكل صحيح. يظهر على أنّه/dev/block/mapper/system-verity
وهو المصدر من نقطة التثبيت/system
.
يوضح الشكل 1 الشكل الذي تظهر به الحزمة أسفل نقطة التثبيت /system
.
الشكل 1. تكديس ضمن نقطة تثبيت /النظام
لقطة من نوع dm
تعتمد تقنية A/B الافتراضية على "dm-snapshot
"، وهي وحدة مصمّمة على الأجهزة لأخذ لقطات
جهاز التخزين. عند استخدام dm-snapshot
، تتوفر أربعة أجهزة في
اللعب:
- الجهاز الأساسي هو الجهاز الذي تم أخذ لقطة منه. في هذه الصفحة، تستخدم قاعدة أن يكون الجهاز دائمًا قسمًا ديناميكيًا، مثل النظام أو المورد.
- جهاز النسخ عند الكتابة (COW) لتسجيل التغييرات على الجهاز الأساسي. أُنشأها جون هنتر، الذي كان متخصصًا بأي حجم، لكنها يجب أن تكون كبيرة بما يكفي لاستيعاب جميع التغييرات على للجهاز الأساسي.
- يتم إنشاء جهاز اللقطة باستخدام الهدف "
snapshot
". يكتب إلى جهاز لقطة الشاشة إلى جهاز COW. القراءات من اللقطة الجهاز المقروءة إما من الجهاز الأساسي أو جهاز COW، اعتمادًا على ما إذا كانت البيانات التي يتم الوصول إليها قد تغيرت بواسطة اللقطة أم لا. - يتم إنشاء جهاز المصدر باستخدام هدف
snapshot-origin
. يقرأ إلى قراءة جهاز المصدر مباشرةً من الجهاز الأساسي. الكتابة إلى الأصل على الجهاز الأساسي مباشرةً، ولكن يتم الاحتفاظ بنسخة احتياطية من البيانات الأصلية بالكتابة إلى جهاز البقرة.
الشكل 2. ربط الجهاز لميزة dm-snapshot
اللقطات المضغوطة
في نظام التشغيل Android 12 والإصدارات الأحدث، نظرًا لأن متطلبات المساحة على
أن يكون قسم /data
مرتفعًا، فيمكنك تفعيل لقطات مضغوطة في
لتلبية متطلبات المساحة الأعلى لقسم /data
.
يتم إنشاء اللقطات الافتراضية المضغوطة من خلال A/B على أساس المكونات التالية التي تتوفّر في نظام التشغيل Android 12 والإصدارات الأحدث:
dm-user
، وهي وحدة نواة تشبه FUSE تتيح مساحة المستخدم لتطبيق الأجهزة الكتلية.snapuserd
، برنامج خفي لمساحة المستخدم لتنفيذ لقطة جديدة .
تعمل هذه المكونات على تمكين الضغط. التغييرات الضرورية الأخرى التي تم إجراؤها على وتنفيذ إمكانات اللقطات المضغوطة الواردة في الأقسام التالية: تنسيق COW للقطات المضغوطة، dm-user وSnapuserd.
تنسيق COW للقطات مضغوطة
في نظام التشغيل Android 12 والإصدارات الأحدث، تستخدم اللقطات المضغوطة تنسيق COW. على غرار تنسيق النواة المدمج والمستخدم في التنسيق غير المضغوط لقطات سريعة، يحتوي تنسيق "بقرة" لللقطات المضغوطة على أقسام بيانات التعريف والبيانات. يُسمح باستبدال البيانات الوصفية للتنسيق الأصلي فقط. العمليات: استبدال القالب X في الصورة الأساسية بمحتويات القالب Y في اللقطة. يعد تنسيق اللقطات المضغوطة COW أكثر تعبيرًا يتيح العمليات التالية:
- النسخ: يجب استبدال القطعة X في الجهاز الأساسي بالقطعة Y في الجهاز الأساسي.
- استبدال: يجب استبدال العنصر X في الجهاز الأساسي بالمحتوى. كتلة ص في اللقطة. كل كتلة من هذه الكتل مضغوطة بتنسيق gz.
- صفر: يجب استبدال العنصر X في الجهاز الأساسي بجميع الأصفار.
- XOR: يخزِّن جهاز COW وحدات البايت المضغوطة XOR بين الكتلة X و حظر Y (متوفّر في نظام التشغيل Android 13 والإصدارات الأحدث).
تتضمن التحديثات الكاملة للتحديث الهوائي عمليات الاستبدال وصفر فقط. تزايدي يمكن أن تشمل تحديثات "عبر الهواء" أيضًا عمليات نسخ.
dm-user في Android 12
تتيح وحدة النواة لمستخدم dm لـ userspace
تنفيذ حظر برنامج تحديد الأجهزة.
الأجهزة. يؤدي إدخال جدول مستخدم dm إلى إنشاء جهاز متنوع ضمن
/dev/dm-user/<control-name>
يمكن لعملية userspace
أن تؤدي إلى فحص الجهاز
تلقي طلبات القراءة والكتابة من النواة. لكل طلب معلومات مرتبطة
مخزن مؤقت لمساحة المستخدم إما لتعبئة (للقراءة) أو نشرها (للكتابة).
توفّر وحدة النواة dm-user
واجهة جديدة مرئية للمستخدم للنواة.
والذي ليس جزءًا من قاعدة التعليمات البرمجية kernel.org الرئيسية. إلى أن ينتهي الأمر،
يحتفظ بالحق في تعديل واجهة dm-user
في Android.
ملف تعريف الارتباط
ينفِّذ مكوِّن userspace في snapuserd
من أجل dm-user
نموذج A/B الافتراضي
والضغط عليه.
في الإصدار غير المضغوط من اختبار A/B الافتراضي (إما في الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم أو
في Android 12 بدون خيار اللقطة المضغوطة)،
جهاز COW هو ملف غير معدَّل. عند تفعيل الضغط، تؤدي دوال "COW"
بدلاً من ذلك كجهاز dm-user
، وهو متصل بمثيل من
البرنامج الخفي "snapuserd
"
لا تستخدم النواة تنسيق COW الجديد. وبالتالي، المكوّن snapuserd
تترجم الطلبات بين تنسيق Android COW والنواة المضمنة
التنسيق:
الشكل 3. مخطط انسيابي لـ Snapuserd كمترجم بين Android وKernel تنسيقات COW
لا تحدث هذه الترجمة وإلغاء الضغط مطلقًا على القرص. snapuserd
المكون يعترض قراءة البقرة وكتابتها التي تحدث في النواة،
وتنفيذها باستخدام تنسيق Android COW.
ضغط XOR
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 13 والإصدارات الأحدث، سيتم تطبيق تعمل ميزة ضغط XOR، المفعَّلة تلقائيًا، على تفعيل مساحة المستخدم لقطات لتخزين وحدات بايت XOR المضغوطة بين الكتل القديمة والكتل الجديدة. فعندما يتم تغيير بضع وحدات بايت فقط في كتلة واحدة في تحديث A/B افتراضي، وهو XOR يستخدم نظام التخزين المضغوط مساحة أقل من نظام التخزين التلقائي لأنه لا يتم تخزين اللقطات بحجم 4K بايت بالكامل. يعد هذا التقليل في حجم اللقطة يكون ممكنًا لأن بيانات XOR تحتوي على العديد من الأصفار ويسهل ضغطها من ضغطها الأوّلية حظر البيانات. يعمل ضغط XOR على تقليل حجم اللقطة بنسبة% 25 على أجهزة Pixel 40%.
بالنسبة إلى الأجهزة التي تتم ترقيتها إلى Android 13 والإصدارات الأحدث، سيتم استخدام XOR يجب تفعيل الضغط. لمعرفة التفاصيل، يُرجى الاطّلاع على XOR. والضغط عليه.
عمليات ضغط A/B الافتراضية
يقدّم هذا القسم تفاصيل حول عملية ضغط A/B الافتراضية المستخدَمة في Android 13 وAndroid 12.
قراءة البيانات الوصفية (Android 12)
يتم إنشاء البيانات الوصفية باستخدام برنامج خفي snapuserd
. بيانات التعريف هي في المقام الأول
تعيين معرّفين، كل منهما 8 بايت، يمثلان القطاعات المراد دمجها.
فِي dm-snapshot
، اسْمَهَا disk_exception
.
struct disk_exception {
uint64_t old_chunk;
uint64_t new_chunk;
};
يتم استخدام استثناء القرص عندما يتم استبدال مجموعة قديمة من البيانات بأخرى جديدة.
يقرأ البرنامج الخفي snapuserd
ملف COW الداخلي من خلال مكتبة COW
تنشئ بيانات التعريف لكل عملية من عمليات COW الموجودة في ملف COW.
يتم بدء قراءة البيانات الوصفية من dm-snapshot
في النواة عند إنشاء جهاز dm-
snapshot
.
يوضح الشكل التالي مخطط تسلسلي لمسار طلب الإدراج (IO) لبيانات التعريف البناء.
الشكل 4. تدفق التسلسل لمسار طلب الإدراج في إنشاء البيانات الوصفية
الدمج (نظام التشغيل Android 12)
بعد اكتمال عملية التشغيل، يضع محرك التحديث علامة "تمهيد" على الفتحة
ناجح وتبدأ عملية الدمج من خلال تحويل هدف dm-snapshot
إلى
الهدف dm-snapshot-merge
.
يستعرض dm-snapshot
البيانات الوصفية ويبدأ عملية إدخال طلب دمج لكل قرص.
. في ما يلي نظرة عامة عالية المستوى على مسار إدخال الإدراجات المدمجة.
الشكل 5. نظرة عامة على مسار طلب الإدراج
إذا تمت إعادة تشغيل الجهاز أثناء عملية الدمج، فسيتم استئناف عملية الدمج في وعند إعادة تشغيله، وتكتمل عملية الدمج.
طبقات برنامج تحديد الأجهزة
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 13 والإصدارات الأحدث، سيتم تطبيق
يتم تنفيذ عمليتَي دمج اللقطات ولقطات الشاشة في ضغط A/B الافتراضي.
من خلال مكوّن مساحة المستخدم snapuserd
. بالنسبة إلى الأجهزة التي تتم ترقيتها إلى Android
13 والإصدارات الأحدث، يجب تفعيل هذه الميزة. بالنسبة
، يُرجى مراجعة Userspace
دمجها.
في ما يلي وصف لعملية ضغط A/B الافتراضية:
- يتيح إطار العمل تثبيت قسم
/system
من جهازdm-verity
. المُكدسة فوق جهازdm-user
. وهذا يعني أنّ كل مؤتمر I/O من نظام الملفات الجذر إلىdm-user
. - يوجِّه
dm-user
وحدات الإدخال والإخراج إلى البرنامج الخفيsnapuserd
لـ userspace الذي يعالج طلب إدخال/إخراج. - عند اكتمال عملية الدمج، يتم تصغير إطار العمل
dm-verity
على أعلىdm-linear
(system_base
) وإزالةdm-user
.
الشكل 6. عملية ضغط A/B الافتراضية
وقد تتم مقاطعة عملية دمج اللقطات. في حال إعادة تشغيل الجهاز خلال عملية الدمج، يتم استئناف عملية الدمج بعد إعادة التشغيل.
بدء الانتقالات
عند بدء التشغيل باستخدام لقطات مضغوطة، يجب أن يبدأ إعداد المرحلة الأولى
snapuserd
لتثبيت الأقسام. هناك مشكلة: عند تحميل sepolicy
وفرضها، يتم وضع snapuserd
في سياق غير صحيح، وطلبات القراءة الخاصة به
مع عمليات رفض selinux.
لحلّ هذه المشكلة، يتم إجراء عمليات نقل من snapuserd
في خطوة القفل باستخدام init
على النحو التالي:
- المرحلة الأولى من "
init
" تُطلقsnapuserd
من الهرم وتمنعها من فتح الباب واصف الملف إليه في متغير بيئة. - تعمل المرحلة الأولى
init
على تبديل نظام الملفات الجذر إلى قسم النظام، ثم تنفيذ نسخة النظام منinit
. - تقرأ نسخة النظام من
init
سياسة sepolicy المدمجة في سلسلة. - يستدعي
Init
الرمزmlock()
على جميع الصفحات المستندة إلى ext4. بعد ذلك، يوقف جميع جداول أدوات تحديد الأجهزة الخاصة بأجهزة لقطات الشاشة، وإيقافsnapuserd
. بعد ذلك يٌحظر القراءة من الأقسام، حيث يؤدي ذلك إلى حدوث توقف مؤقت. - استخدام الواصف المفتوح مع نسخة ذاكرة الوصول العشوائي لـ
snapuserd
،init
يعيد تشغيل البرنامج الخفي باستخدام سياق selinux الصحيح. جداول أداة ربط الأجهزة لإعادة تنشيط أجهزة أخذ اللقطات. - يستدعي الأمر
munlockall()
- من الآمن إجراء IO مرة أخرى.
استخدام المساحة
يقدِّم الجدول التالي مقارنة بين استخدام المساحة لمختلف وكالات السفر على الإنترنت. باستخدام حجمي نظام التشغيل Pixel وOTA.
تأثير الحجم | ليس A/B | اختبار A/B | أ/ب افتراضي | أ/ب افتراضي (مضغوط) |
---|---|---|---|---|
الصورة الأصلية الأصلية | 4.5 غيغابايت رائعة (صورة 3.8 غيغابايت + 700 مليون محجوز)1 | 9 غيغابايت رائعة (3.8 غيغابايت + 700 مليون محجوز، لخانتين) | 4.5 غيغابايت رائعة (صورة 3.8G + 700 مليون محجوز) | 4.5 غيغابايت رائعة (صورة 3.8G + 700 مليون محجوز) |
الأقسام الثابتة الأخرى | /cache | بدون تحديد نمط | ما من خصومات | بدون تحديد نمط |
مساحة تخزين إضافية أثناء التحديث عبر الهواء (يتم إرجاع المساحة بعد تطبيق التحديث عبر الهواء) | 1.4 غيغابايت على /data | 0 | 3.8 غيغابايت2 على /data | 2.1 غيغابايت2 على /data |
إجمالي مساحة التخزين المطلوبة لتطبيق التحديث عبر الهواء | 5.9 غيغابايت3 (Super and data) | 9 غيغابايت (فائقة) | 8.3 غيغابايت3 (Super and data) | 6.6 غيغابايت3 (Super and data) |
1تشير إلى التنسيق المفترَض استنادًا إلى ربط وحدات البكسل.
2بافتراض أنّ حجم صورة النظام الجديدة بنفس حجم الصورة الأصلية
3تكون متطلبات المساحة مطلوبة بشكل مؤقت حتى تتم إعادة التشغيل.
ولتنفيذ خيار "أ/ب" افتراضي أو لاستخدام إمكانات النبذة المضغوطة، يمكنك الاطّلاع على تنفيذ تجارب A/B الافتراضية