يتوافق الإصدار 17 من نظام التشغيل Android والإصدارات الأحدث مع برنامج خفي لإدارة الذاكرة
(mmd)، وهو برنامج خفي للنظام، ويتعامل مع إعدادات البرنامج الخفي، والإعدادات القابلة للتعديل، ومهام الصيانة المستمرة للتبديل أو ZRAM.
خلفية
قبل طرح mmd، كانت إعدادات ZRAM في Android مجزّأة ولا تتيح سوى خيارات تخصيص محدودة. تعالج mmd هذه المشكلة من خلال
توسيط إدارة ZRAM، ما يتيح استخدام منطق إعدادات أكثر تطورًا
وتبسيط عملية إضافة ميزات جديدة وتحسينات على البنية.
توفّر mmd أيضًا فصلًا واضحًا بين عملية system_server المستندة إلى Java وعملية التبديل أو إدارة الذاكرة على مستوى النواة.
البنية وإدارة ZRAM
عند اكتمال عملية التشغيل (أي عند sys.boot_completed=1)، يحاول mmd_setup ضبط ZRAM باستخدام المَعلمات المحدّدة. بعد اكتمال عملية إعداد ZRAM، يفعّل النظام خدمة mmd التي تتولى مهام الصيانة المستمرة.
في مشروع mmd، يتم بدء عمليات الصيانة من system_server من خلال إرسال طلبات Binder إلى mmd باستخدام واجهة IMmd.
يتولّى mmd مهام الصيانة المتعلقة بتنفيذ عمليات إعادة الكتابة في ZRAM وإعادة الضغط وعمليات إعادة الكتابة لكل عملية استنادًا إلى محرك سياساته الداخلية. يمكن ضبط كلّ من سياسات الجدولة من ActivityManagerService وسياسات الصيانة في ZRAM باستخدام خصائص النظام.
تكامل خادم النظام (system_server)
تحدّد عملية system_server المستندة إلى Java وقت استدعاء mmd. وتفصل هذه العملية عمليات المسح الشامل للصيانة عن عمليات تحسين الذاكرة المستهدَفة لكل تطبيق.
الصيانة العادية للمعالجة اللاحقة
تتم إدارة ZRAM على مستوى العالم من خلال ActivityManagerService باستخدام
com.android.server.memory.ZramMaintenance.

الشكل 1: مسار جدولة الصيانة في ZRAM
- محرك الجدولة: يسجّل
ZramMaintenanceمهمة دورية تعمل في الخلفية باستخدامJobSchedulerفي نظام التشغيل Android. - قيود المهمة: لمنع حدوث تقطُّع في واجهة المستخدم الأمامية أو حدوث تعارض في وحدة المعالجة المركزية، يتم ضبط المهمة بشكل صريح باستخدام
setRequiresDeviceIdle(true)وsetRequiresBatteryNotLow(true). - تفعيل Binder: عندما ينشّط المجدول
onStartJob()، يستدعيsystem_serverالدالةmmd.doZramMaintenanceAsync(). هذا طلب غير متزامن من النوع Binder في اتجاه واحد، ولا يحظرsystem_serverانتظار انتهاء عمليات الصيانة. تضيفmmdهذا إلى سلسلة عامل الخلفية لتنفيذ إعادة الضغط والكتابة بالتسلسل.
إعادة الكتابة على مستوى كل عملية
تتم إدارة الإخلاء المستهدَف للذاكرة لكل عملية من خلال ActivityManagerService باستخدام com.android.server.am.CachedAppOptimizer.

الشكل 2: عملية إعادة الكتابة لكل عملية في mmd.
عندما تنتقل عملية إلى حالة مخزّنة مؤقتًا في الخلفية، ينفّذ ActivityManager عملية ضغط للذاكرة. إذا كان سيظهر للمستخدم عُطل بسبب انخفاض الذاكرة في العملية، أي إذا كانت العملية تستضيف نشاطًا، وإذا كانت عملية الكتابة الاحتياطية لكل عملية في ZRAM ستؤدي إلى انخفاض استهلاك الذاكرة التي تستخدمها العملية إلى ما يقرب من الصفر، يتّبع النظام الخطوات التالية:
- بعد الضغط، يرسل
CachedAppOptimizerرسالة مؤجّلة (ZRAM_WRITEBACK_MSG) إلى معالج الضغط الداخلي (يتم التأخير بمقدارmZramWritebackWaitSeconds). - عند انتهاء فترة التأخير، يفتح ActivityManager واصف ملف عملية آمنة
pidfd. - يستدعي خادم النظام
mmd.asyncWritebackProcessZramMemory(pfd, callback). - ينفّذ
mmdعملية ioctl الخاصة بالكتابة المؤقتة لكل عملية، ويُبلغ عن النتيجة باستخدامIMmdProcessWritebackCallback. في حال نجاح العملية، يضع ActivityManager علامة على سجل العملية (setIsZramWrittenBack(app, true)) لتعزيزoom_score_adjالعملية، ويسجّل المقاييس فيFrameworkStatsLog.ZRAM_WRITEBACK_EVENT.
الجلب المسبق لكل عملية
عندما يعيد المستخدم تشغيل تطبيق تم تخزينه مؤقتًا من قبل (تمت إزالة التجميد بسبب
UNFREEZE_REASON_ACTIVITY)، يقلّل ActivityManager من وقت الاستجابة عند بدء تشغيل التطبيق الناتج عن أخطاء الصفحات الرئيسية من مساحة التخزين الاحتياطية:
- تعترض
CachedAppOptimizerحدث إلغاء التجميد وتستدعيprefetchZram(app). - يرسل خادم النظام
pidfdالخاص بالتطبيق عبر Binder باستخدامmmd.asyncPrefetchProcessZramMemory(pfd). يُصدرmmdالأمرZRAM_ANDROID_IOC_PROCESS_PREFETCHioctl، ويطلب من النواة جلب الصفحات التي تم تبديلها بشكل غير متزامن إلى ذاكرة الوصول العشوائي (RAM) أثناء تهيئة سلسلة التعليمات الرئيسية لواجهة المستخدم في التطبيق.
نظرة عامة على مهام الصيانة والمعالجة اللاحقة
يوضّح هذا القسم عمليات الصيانة في الخلفية ومهام ما بعد المعالجة التي ينفّذها mmd لتحسين مساحة التبديل وذاكرة النظام.
الصيانة في mmd
في mmd، تشير الصيانة إلى عمليات المسح المجدوَلة التي تتم في الخلفية بهدف الصيانة
وتحسين استخدام مساحة التبديل والذاكرة الفعلية بدون التأثير في
أداء المستخدم النشط في المقدّمة. بدلاً من إجراء عمليات مسح متواصلة ومتزامنة (ما يؤدي إلى حدوث عمليات تنشيط كبيرة لوحدة المعالجة المركزية وتأخّر في واجهة المستخدم)، يتم تنفيذ عمليات الصيانة بشكل غير متزامن:
يتم تشغيل
system_serverبشكلٍ دوريdoZramMaintenanceAsync()على مستوى Binder.يضع
mmdالطلب في قائمة انتظار عمل في الخلفيةLowPrioWorkItem::ZramMaintenance.يتوفّر مسار واحد لتنفيذ المهام في
mmdيدير كلاً من قائمة الانتظار ذات الأولوية العالية وقائمة الانتظار ذات الأولوية المنخفضة. تتم معالجة عناصر العمل ذات الأولوية العالية (مثل الجلب المسبق لكل عملية) أولاً، ويمكن أن تحل محل عناصر العمل ذات الأولوية المنخفضة. تعمل عمليات الصيانة وإعادة الكتابة لكل عملية كعناصر عمل منخفضة الأولوية. عند إزالة العنصر، تنفّذ سلسلة المحادثات الخاصة بالعامل عمليتَي صيانة أساسيتَين بالتسلسل:إعادة ضغط ZRAM: يتم البحث في صفحات المبادلة الحالية وإعادة ضغط الصفحات غير النشطة باستخدام خوارزمية ضغط ثانوية ذات نسبة أعلى، مثل
zstd.إعادة كتابة ZRAM: يتم فحص الصفحات غير النشطة وإزالتها بالكامل من ذاكرة الوصول العشوائي (RAM) إلى وحدة تخزين فلاش احتياطية على جهاز حلقي من ملف على
/data.
مهام المعالجة اللاحقة في ZRAM
في وحدة ZRAM الخاصة بنواة Linux وبنية mmd، تكون مهام المعالجة اللاحقة هي عمليات التحويل غير المتزامنة التي يتم تطبيقها على صفحات الذاكرة بعد أن يتم تبديلها من خلال مسارات الاسترداد العادية للنواة (kswapd أو الضغط).
عند استبدال صفحة في البداية، يعطي النظام الأولوية للسرعة، لذا يستخدم خوارزمية ضغط أساسية سريعة (مثل lz4) ويخزّن الصفحة المضغوطة في ذاكرة الوصول العشوائي. ومع ذلك، بمرور الوقت، تصبح العديد من الصفحات المبدَّلة غير نشطة أو في وضع الخمول،
مثل التطبيقات المخزَّنة مؤقتًا في الخلفية والتي لا يتم استئنافها لساعات. يؤدي ترك الصفحات غير النشطة في ZRAM سريع ومضغوط بشكل خفيف إلى عدم الكفاءة.
مسار المعالجة اللاحقة
تنفّذ mmd دورة حياة معالجة لاحقة متعدّدة المستويات لتحسين هذه الصفحات:

الشكل 3: مراحل نشاط الصفحة mmd
المرحلة 1: الاستبدال الأوّلي (الضغط السريع): يتم استرداد الذاكرة أولاً من خلال عملية kswapd أو ضغط التطبيقات. يتم عادةً تنفيذ عملية الاسترداد الأولى باستخدام خوارزمية ضغط سريعة، مثل
lz4، ويتم تخزين المحتوى في ذاكرة الوصول العشوائي (RAM).المرحلة 2: وضع علامة على الصفحات غير النشطة (التعتيق والتتبُّع): يصل تتبُّع الصفحات غير النشطة
mmdإلى تتبُّع ذاكرة النواة (CONFIG_ZRAM_TRACK_ENTRY_ACTIME) أو يستخدم علامة البرامج غير النشطة لتتبُّع المدة التي لم يتم فيها استخدام الصفحات.المرحلة 3: ما بعد المعالجة 1 - إعادة الضغط (استرداد الذاكرة): تتم إعادة ضغط الصفحات التي تصل إلى مدة عدم النشاط لإعادة الضغط (من
min_idle_secondsإلىmax_idle_seconds). تكتبmmdإلى/sys/block/zram0/recompressلتوجيه النواة إلى فك ضغط الصفحةlz4وإعادة ضغطها باستخدامzstd. يؤدي ذلك إلى استعادة ذاكرة الوصول العشوائي المادية بدون التسبب في تآكل ذاكرة الفلاش.المرحلة 4: ما بعد المعالجة 2 - إعادة الكتابة (الإخلاء إلى ذاكرة التخزين المؤقت): إذا استمر الضغط على الذاكرة وبلغت الصفحات الحد الأدنى لعمر الخمول المطلوب لإعادة الكتابة (عادةً 20 ساعة أو أكثر)،
mmdسيؤدي ذلك إلى بدء عملية إعادة الكتابة. تكتبmmdإلى/sys/block/zram0/idleو/sys/block/zram0/writebackلإخراج الصفحة المضغوطة بالكامل من ذاكرة الوصول العشوائي إلى وحدة التخزين السريع الاحتياطية.
إعدادات ZRAM
تحمّل السمة mmd وتعالج خصائص إعداد ZRAM التالية:
| الخاصية | استخدام | تلقائي |
|---|---|---|
mmd.zram.enabled |
تحديد ما إذا كان إعداد mmd ZRAM مفعَّلاً. |
false |
mmd.zram.num_devices |
عدد أجهزة ZRAM التي يجب ضبطها بالنسبة إلى الرقم N، يجب أن تتوفّر الأجهزة من zram0 إلى zram<N-1> قبل أن يضبط النظام القيمة sys.boot_completed=1.
يمكن ضبط الخصائص في قائمة الأجهزة التي تستخدم ZRAM على أساس كل جهاز على حدة.
|
1 |
mmd.zram.device_priority |
قيم الأولوية التي يجب تمريرها عند طلب swapon. |
لم يتم الضبط |
mmd.zram.comp_algorithm |
خوارزمية ضغط ZRAM يتم استخدام خوارزمية الضغط التلقائية للنواة في حال عدم تحديد خوارزمية أخرى. | لم يتم الضبط |
mmd.zram.size |
حجم جهاز ZRAM بالبايت، أو نسبة مئوية من حجم ذاكرة الوصول العشوائي (RAM) للجهاز، على سبيل المثال،
75%.
|
50% |
mmd.zram.writeback.enabled |
يشير إلى ما إذا كان سيتم تفعيل ميزة ZRAM writeback. | false |
mmd.zram.writeback.device_size |
حجم جهاز الكتابة الاحتياطية بالبايت أو النسبة المئوية لقسم البيانات. يمكن تعديل حجم الجهاز الفعلي استنادًا إلى المساحة المتوفّرة على قسم البيانات. | 1073741824 (1 غيغابايت) |
mmd.zram.writeback.min_free_space_mib |
الحد الأدنى للمساحة الخالية بوحدة MiB التي يجب أن تكون متاحة بعد إعداد جهاز الكتابة الاحتياطية. | 1536 (1.5 غيبيبايت) |
mmd.zram.writeback.use_nr_tags_prop |
عندما تكون قيمة true هي 1، يتم استخدام القيمة في mmd.zram.writeback.nr_tags لضبط عمق قائمة الانتظار لعملية الكتابة الاحتياطية في ZRAM لجهاز الحلقة. هذا حلّ بديل للحالات التي لا يمكن فيها ضبط سياسة SELinux الخاصة بالمورّد للسماح mmd بقراءة nr_tags مباشرةً من جهاز الحظر الأساسي /data.
|
false |
mmd.zram.writeback.nr_tags |
يمكنك الاطّلاع على mmd.zram.writeback.use_nr_tags_prop. |
لم يتم الضبط |
mmd.zram.recompression.enabled |
تحديد ما إذا كان سيتم تفعيل ميزة إعادة ضغط ZRAM. | false |
mmd.zram.recompression.algorithm |
خوارزمية إعادة الضغط الثانوية في ZRAM | zstd |
خصائص جهاز ZRAM
عندما تكون قيمة mmd.zram.num_devices أكبر من واحد، يمكن ضبط خصائص معيّنة بشكل اختياري على أساس كل جهاز ZRAM على حدة من خلال ضبط السمة على قيمة مفصولة بفواصل تحتوي على mmd.zram.num_devices عناصر بالضبط.
تشمل هذه الخصائص ما يلي:
mmd.zram.sizemmd.zram.comp_algorithmmmd.zram.device_prioritymmd.zram.recompression.enabledmmd.zram.recompression.huge_idle.enabledmmd.zram.recompression.idle.enabledmmd.zram.recompression.huge.enabledmmd.zram.recompression.threshold_bytesmmd.zram.recompression.algorithmmmd.zram.writeback.device_sizemmd.zram.writeback.huge_idle.enabledmmd.zram.writeback.idle.enabledmmd.zram.writeback.huge.enabled
الإيقاف النهائي لإعدادات ZRAM الحالية
في حين أنّ swapon_all لا يزال متاحًا في Android لإعداد ZRAM ومساحة التبديل المستندة إلى القرص، فإنّ mmd هو الأسلوب المفضّل لإدارة ZRAM من أجل تسهيل عملية الإعداد والاستفادة من الميزات المتقدّمة، مثل إعادة ضغط ZRAM.
عندما يفعّل mmd.zram.enabled mmd إعدادات ZRAM:
- يصبح إعداد ZRAM في عملية تنفيذ
swapon_allبلا تأثير. - يتم تجاهل إعدادات ZRAM الحالية، مثل
config_zramWritebackفي ملف التراكبconfig.xmlوخصائص نظامro.zram.*writeback.
خيارات قابلة للضبط لصيانة ZRAM
يجب أن تعمل صيانة ZRAM بدون أي إعدادات إضافية، ويمكنك تحسينها أكثر باستخدام خصائص النظام في هذا القسم.
جدولة صيانة ZRAM
تتحكّم هذه الخصائص في كيفية وجدولة مهام الصيانة في ZRAM بواسطة system_server.
| الخاصية | استخدام | تلقائي |
|---|---|---|
mm.zram.maintenance.first_delay_seconds |
تمثّل هذه السمة الوقت الفاصل قبل بدء عملية الصيانة الأولى في ZRAM. | 3600 (ساعة واحدة) |
mm.zram.maintenance.periodic_delay_seconds |
التأخير بين عمليات جدولة الصيانة اللاحقة لـ ZRAM | 3600 (ساعة واحدة) |
mm.zram.maintenance.require_device_idle |
تحديد ما إذا كان يجب بدء صيانة ZRAM فقط عندما يكون الجهاز غير نشط | true |
mm.zram.maintenance.require_battery_not_low |
تحديد ما إذا كان يجب أن يكون مستوى شحن البطارية غير منخفض قبل بدء صيانة ZRAM | true |
سياسة إعادة الكتابة في ZRAM
تتحكّم المَعلمات التالية في وقت كتابة نوع الذاكرة ومحتواها إلى الجهاز الاحتياطي:
| الخاصية | استخدام | تلقائي |
|---|---|---|
mmd.zram.writeback.backoff_seconds |
وقت التراجع منذ آخر عملية إعادة كتابة | 600 (10 دقائق) |
mmd.zram.writeback.min_idle_seconds |
يتم دمجه مع mmd.zram.writeback.max_idle_seconds لاحتساب
عمر عدم النشاط للصفحة لكي تكون مؤهَّلة لإعادة الكتابة استنادًا إلى جزء استخدام الذاكرة. يتم احتساب العمر غير النشط من خلال الاستيفاء الأسي
بين المَعلمتَين لتقليل العمل عندما لا يكون هناك ضغط على الذاكرة.
|
72000 (20 ساعة) |
mmd.zram.writeback.max_idle_seconds |
الحد الأقصى لعدد الثواني المستخدَمة لاحتساب عمر الصفحة غير النشطة بشكل ديناميكي استنادًا إلى استخدام الذاكرة | 90000 (25 ساعة) |
mmd.zram.writeback.huge.enabled |
تحديد ما إذا كان سيتم تفعيل ميزة HUGE لإعادة كتابة الصفحة |
false |
mmd.zram.writeback.idle.enabled |
تحديد ما إذا كان سيتم تفعيل ميزة IDLE لإعادة كتابة الصفحة |
true |
mmd.zram.writeback.huge_idle.enabled |
تحديد ما إذا كان سيتم تفعيل ميزة HUGE_IDLE لإعادة كتابة الصفحة |
true |
mmd.zram.writeback.min_bytes |
الحد الأدنى لعدد وحدات البايت التي يجب إعادة كتابتها في جولة واحدة من إعادة الكتابة غير النشطة | 5242880 (5 ميبيبايت) |
mmd.zram.writeback.max_bytes |
الحد الأقصى لعدد البايتات التي يمكن كتابتها مرة أخرى في جولة واحدة من عمليات الكتابة غير النشطة | 314572800 (300 ميبيبايت) |
mmd.zram.writeback.max_bytes_per_day |
الحدّ الأقصى لعدد البايتات التي يمكن إعادة كتابتها خلال 24 ساعة | 25769803776 (24 غيبيبايت) |
mmd.zram.writeback.limit.enabled |
تحديد ما إذا كان سيتم تفعيل احتساب الحدّ الأقصى للميزانية اليومية للكتابة مرة أخرى. | true |
سياسة إعادة الضغط في ZRAM
تتحكّم المَعلمات التالية في وقت إعادة ضغط الذاكرة ونوعها:
| الخاصية | استخدام | تلقائي |
|---|---|---|
mmd.zram.recompression.backoff_seconds |
وقت التراجع منذ آخر عملية إعادة ضغط | 1800 (30 دقيقة) |
mmd.zram.recompression.min_idle_seconds |
يتم دمجها مع mmd.zram.recompression.max_idle_seconds لاحتساب مدة عدم النشاط التي يجب أن تمر على الصفحة لتكون مؤهَّلة لإعادة الضغط استنادًا إلى جزء استخدام الذاكرة. يتم احتساب العمر غير النشط من خلال الاستيفاء الأسي بين المَعلمتَين لتقليل العمل عندما لا يكون هناك ضغط على الذاكرة.
|
7200 (ساعتان) |
mmd.zram.recompression.max_idle_seconds |
الحد الأقصى لعدد الثواني المستخدَمة لاحتساب عمر الصفحة غير النشطة بشكلٍ ديناميكي | 14400 (4 ساعات) |
mmd.zram.recompression.threshold_bytes |
الحد الأدنى لحجم صفحات ZRAM بالبايت التي يتم أخذها في الاعتبار لإعادة الضغط | 1024 (1 KiB) |
mmd.zram.recompression.huge.enabled |
تحديد ما إذا كان سيتم تفعيل إعادة ضغط الصفحة HUGE. |
true |
mmd.zram.recompression.idle.enabled |
تحديد ما إذا كان سيتم تفعيل إعادة ضغط الصفحة IDLE. |
true |
mmd.zram.recompression.huge_idle.enabled |
تحديد ما إذا كان سيتم تفعيل إعادة ضغط الصفحة HUGE_IDLE. |
true |
تتبُّع الصفحات غير النشطة في ZRAM
mmd تحدّد عملية صيانة ZRAM الصفحات غير النشطة في ZRAM استنادًا إلى المدة المنقضية منذ آخر مرة تم فيها الوصول إلى هذه الصفحات. تتطلّب هذه الميزة تفعيل إعدادات النواة CONFIG_ZRAM_TRACK_ENTRY_ACTIME أو CONFIG_ZRAM_MEMORY_TRACKING. يتم تفعيل CONFIG_ZRAM_TRACK_ENTRY_ACTIME تلقائيًا في نواة GKI 6.18 والإصدارات الأحدث. في النواة القديمة،
تتسبب هذه الميزة في زيادة استهلاك الذاكرة ولا تكون مفعّلة تلقائيًا.
في حال عدم تفعيل إعدادات النواة، سيتم اللجوء إلى mmd ZRAM إلى منطق بديل للبرامج لتتبُّع صفحات ZRAM غير النشطة:
وضع علامة "غير نشطة" على جميع صفحات ZRAM عند بدء
mmdتخطّي عمليات الصيانة التالية في ZRAM إلى أن تنتهي فترة الانتظار المطلوبة
إعادة كتابة بيانات ZRAM أو إعادة ضغط الصفحات غير النشطة إذا بقيت صفحات غير نشطة بسبب حدود إعادة الكتابة، ستواصل
mmdإعادة كتابة الصفحات في عملية الصيانة التالية بدون وضع علامة "غير نشطة" على الصفحات الجديدة (تخطّي الخطوة 4).إذا تمت إعادة كتابة جميع الصفحات غير النشطة، ضَع علامة غير نشطة على جميع صفحات ZRAM مرة أخرى، ثم انتقِل إلى الخطوة 2. في حال إيقاف ميزة "الكتابة الاحتياطية في ZRAM"، تضع
mmdعلامة على جميع صفحات ZRAM كصفحات غير نشطة عند إعادة ضغط ZRAM بعد مدة عدم النشاط المحددة لإعادة الضغط.
إرشادات تحديد المشاكل وحلّها والتحقّق من صحة البيانات
اتّبِع خطوات التحقّق وإجراءات تحديد المشاكل وحلّها التالية للتحقّق من عمليات mmd وZRAM وتشخيصها.
التحقّق من صحة إعدادات ZRAM
للتأكّد من أنّ mmd قد أعدّ ZRAM بنجاح أثناء عملية التشغيل، اتّبِع الخطوات التالية:
تحقَّق من خوارزمية الضغط النشطة وحجم القرص:
cat /sys/block/zram0/comp_algorithm cat /sys/block/zram0/disksizeتحقَّق من
mmdخصائص النظام وحالة الخدمة قيد التشغيل:getprop | grep mmd.zram dumpsys -l | grep mmd
التحقّق من صيانة ZRAM وعملية الكتابة
تأكَّد من أنّ مهام الصيانة الخاصة بإعادة الكتابة وإعادة الضغط في ZRAM تعمل:
تحقَّق من حالة جهاز حظر النسخ الاحتياطي:
cat /sys/block/zram0/bd_statيمكنك التحقّق من كفاءة إعادة الضغط من خلال مراقبة
/sys/block/zram0/mm_stat. من المفترض أن تظهر التغييرات في أحجام البيانات المضغوطة بعد دورات الصيانة.
التحقّق من صحة عملية إعادة الكتابة لكل عملية
يمكن استخدام ما يلي للتحقّق من أنّ عملية إعادة الكتابة على مستوى كل عملية تعمل بشكل صحيح:
- تحقَّق من
adb logcat -s mmdبحثًا عن سجلّات إعادة الكتابة الناجحة أو بيانات التشخيص الخاصة بالأخطاء.
المشاكل الشائعة وبيانات التشخيص
في ما يلي حالات الخطأ الشائعة التي قد يواجهها المستخدم:
WritebackDailyLimitExceeded: يشير هذا الخطأ إلى أنّه تم بلوغ حصةmmd.zram.writeback.max_bytes_per_day. عند حدوث ذلك، توقِفmmdمؤقتًا عملية الكتابة المؤجلة غير النشطة إلى أن تنتهي فترة الـ 24 ساعة.Process prefetch or writeback failed: يمكن ملاحظة هذا الخطأ في logcat عند تعذُّر تنفيذ ioctl. تشمل الأسباب الشائعة ما يلي:-
EBADFأوESRCH: انتهت العملية المستهدَفة قبل أن يتمكّنmmdمن إرسالpidfdإلى النواة. -
ENOSPC: قسم مساحة التخزين الاحتياطية ممتلئ، أو تم استنفاد قائمة انتظار جهاز التكرار.
-
- لم يتم إعداد ZRAM: إذا تعذّر على
mmdضبط ZRAM عند بدء التشغيل، قد يرجع ذلك إلى أنّ النصوص البرمجية القديمةswapon_allأو نصوص init البرمجية الخاصة بالمورّد أغلقت/dev/block/zram0قبل أن يتمكّنmmdمن التنفيذ.