يتوافق الإصدار 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بشكل دوري على مستوى Binder.doZramMaintenanceAsync()يضع
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. يؤدي ذلك إلى استعادة ذاكرة الوصول العشوائي (RAM) الفعلية بدون التسبب في تآكل ذاكرة الفلاش.المرحلة 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 بالبايت، أو نسبة مئوية من حجم ذاكرة الوصول العشوائي للجهاز، على سبيل المثال،
75%.
|
50% |
mmd.zram.writeback.enabled |
يشير إلى ما إذا كان سيتم تفعيل ميزة "الكتابة إلى ZRAM". | 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من التنفيذ.