اندروید ۱۷ و بالاتر از دیمن مدیریت حافظه ( mmd ) پشتیبانی میکند، یک دیمن سیستمی که پیکربندی دیمن، تنظیمات قابل تنظیم و وظایف مداوم swap یا نگهداری ZRAM را مدیریت میکند.
پیشینه
قبل از معرفی mmd ، پیکربندیهای ZRAM اندروید تکهتکه بودند و امکان سفارشیسازی محدودی را ارائه میدادند. mmd با متمرکز کردن مدیریت ZRAM، امکان منطق پیکربندی پیچیدهتر و سادهسازی افزودن ویژگیهای جدید و بهبودهای معماری، این مشکل را برطرف میکند. mmd همچنین تفکیک واضحی از نگرانیها بین فرآیند system_server مبتنی بر جاوا و مدیریت swap یا حافظه در سطح هسته ایجاد میکند.
معماری و مدیریت ZRAM
پس از اتمام بوت (یعنی زمانی که sys.boot_completed=1 )، mmd_setup تلاش میکند تا ZRAM را با پارامترهای مشخص شده پیکربندی کند. پس از اتمام راهاندازی ZRAM، سیستم سرویس mmd را که وظایف تعمیر و نگهداری مداوم را انجام میدهد، فعال میکند.
با پروژه mmd ، عملیات نگهداری از system_server با ارسال درخواستهای Binder به mmd با استفاده از رابط IMmd آغاز میشود. mmd وظایف نگهداری شامل انجام عملیات نوشتن مجدد، فشردهسازی مجدد و نوشتن مجدد در هر فرآیند ZRAM را بر اساس موتور سیاست داخلی خود انجام میدهد. هم زمانبندی از ActivityManagerService و هم سیاستهای نگهداری ZRAM را میتوان با استفاده از ویژگیهای سیستم پیکربندی کرد.
یکپارچهسازی سرور سیستم (system_server)
فرآیند system_server مبتنی بر جاوا، زمان فراخوانی mmd را تعیین میکند. این فرآیند، پاکسازیهای سراسری نگهداری را از بهینهسازیهای هدفمند حافظه برای هر برنامه جدا میکند.
نگهداری عادی پس از پردازش
نگهداری سراسری ZRAM توسط ActivityManagerService با استفاده از com.android.server.memory.ZramMaintenance انجام میشود.

شکل 1. جریان زمانبندی نگهداری ZRAM.
- موتور زمانبندی:
ZramMaintenanceیک کار پسزمینه دورهای را باJobSchedulerاندروید ثبت میکند. - محدودیتهای کار: برای جلوگیری از وقفههای رابط کاربری پیشزمینه یا درگیری CPU، کار به صراحت با
setRequiresDeviceIdle(true)وsetRequiresBatteryNotLow(true)پیکربندی شده است. - فعال شدن Binder: وقتی زمانبند
onStartJob()را اجرا میکند،system_serverتابعmmd.doZramMaintenanceAsync()را فراخوانی میکند. این یک فراخوانی Binder ناهمزمان و یک طرفه است؛system_serverمانع از انتظار برای اتمام عملیات تعمیر و نگهداری نمیشود.mmdاین را در یک thread worker پسزمینه در صف قرار میدهد تا فشردهسازی مجدد و نوشتن مجدد را به صورت متوالی انجام دهد.
نوشتن مجدد در هر فرآیند
تخلیه حافظه هدفمند به ازای هر فرآیند توسط ActivityManagerService با استفاده از com.android.server.am.CachedAppOptimizer مدیریت میشود.

شکل ۲. جریان بازنویسی mmd به ازای هر فرآیند
وقتی یک فرآیند به حالت ذخیره شده در پسزمینه منتقل میشود، ActivityManager فشردهسازی حافظه را انجام میدهد. اگر حذف حافظه کم فرآیند برای کاربر قابل مشاهده باشد، یعنی فرآیند میزبان یک Activity باشد، و اگر نوشتن مجدد 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ثبت کند.
پیشواکشی به ازای هر فرآیند
وقتی کاربری برنامهای که قبلاً در حافظه پنهان (cache) ذخیره شده بود (و به دلیل UNFREEZE_REASON_ACTIVITY از حالت قفل خارج شده بود) را دوباره اجرا میکند، ActivityManager تأخیر راهاندازی برنامه ناشی از خطاهای عمده صفحه از حافظه پشتیبان را به حداقل میرساند:
-
CachedAppOptimizerرویداد unfreeze را متوقف کرده وprefetchZram(app)را فراخوانی میکند. - سرور سیستم،
pidfdبرنامه را با استفاده ازmmd.asyncPrefetchProcessZramMemory(pfd)در Binder ارسال میکند.mmdتابع ioctl مربوط بهZRAM_ANDROID_IOC_PROCESS_PREFETCHرا اجرا میکند که به هسته دستور میدهد صفحات مبادله شده را به صورت ناهمگام، در حالی که نخ رابط کاربری اصلی برنامه در حال مقداردهی اولیه است، به RAM بازگرداند.
مروری بر وظایف نگهداری و پس از پردازش
این بخش عملیات نگهداری پسزمینه و وظایف پسپردازشی را که mmd برای بهینهسازی فضای swap و حافظه سیستم اجرا میکند، شرح میدهد.
تعمیر و نگهداری در mmd
در mmd ، نگهداری به عملیات نگهداری زمانبندیشده و پسزمینهای اشاره دارد که فضای swap و استفاده از حافظه فیزیکی را بدون تأثیر بر عملکرد پیشزمینه کاربر فعال بهینه میکند. به جای انجام عملیاتهای جابجایی مداوم و همزمان (که باعث بیدار شدن شدید CPU و اختلال در رابط کاربری میشود)، نگهداری به صورت غیرهمزمان انجام میشود:
system_serverبه صورت دورهای تابعdoZramMaintenanceAsync()را در سراسر Binder اجرا میکند.mmdدرخواست را در صف کار پسزمینهLowPrioWorkItem::ZramMaintenanceقرار میدهد.یک نخ کارگر واحد در
mmdوجود دارد که هم صف با اولویت بالا و هم صف با اولویت پایین را مدیریت میکند. اقلام کاری با اولویت بالا (مانند پیشواکشی هر فرآیند) ابتدا پردازش میشوند و میتوانند اقلام کاری با اولویت پایین را قبضه کنند. نگهداری و نوشتن مجدد هر فرآیند به عنوان اقلام کاری با اولویت پایین عمل میکنند. وقتی باز میشود، نخ کارگر دو عملیات نگهداری اولیه را به ترتیب اجرا میکند:فشردهسازی مجدد ZRAM: صفحات swap موجود را بررسی کرده و صفحات بیکار را با استفاده از یک الگوریتم فشردهسازی ثانویه با نسبت بالاتر، مثلاً
zstd، دوباره فشرده میکند.بازنویسی ZRAM: صفحات بیکار را اسکن میکند و آنها را به طور کامل از RAM به حافظه فلش پشتیبان، یک دستگاه حلقهای از فایلی در
/dataمنتقل میکند.
وظایف پس از پردازش در ZRAM
در ماژول ZRAM هسته لینوکس و معماری mmd ، وظایف پسپردازشی، تبدیلهای ناهمزمانی هستند که پس از تعویض صفحات حافظه توسط مسیرهای بازیابی استاندارد هسته (kswapd یا فشردهسازی) روی آنها اعمال میشوند.
وقتی یک صفحه در ابتدا تعویض میشود، سیستم سرعت را در اولویت قرار میدهد: از یک الگوریتم فشردهسازی اولیه سریع (مانند lz4 ) استفاده میکند و صفحه فشردهشده را در RAM ذخیره میکند. با این حال، با گذشت زمان، بسیاری از صفحات تعویضشده سرد یا غیرفعال میشوند، به عنوان مثال، برنامههای ذخیرهشده در پسزمینه که ساعتها از سر گرفته نمیشوند. رها کردن صفحات سرد در ZRAM سریع و با فشردهسازی کم، ناکارآمد است.
خط لوله پس از پردازش
mmd یک چرخه حیات پساپردازش چند مرحلهای را برای بهینهسازی این صفحات پیادهسازی میکند:

شکل ۳. چرخه حیات صفحه mmd .
مرحله ۱: جابجایی اولیه (فشردهسازی سریع): ابتدا حافظه از طریق kswapd یا فشردهسازی برنامه بازیابی میشود. معمولاً این بازیابی اولیه با استفاده از یک الگوریتم فشردهسازی سریع مانند
lz4انجام میشود و محتویات در RAM ذخیره میشوند.مرحله ۲: علامتگذاری حالت سکون (پیری و ردیابی): قابلیت ردیابی حالت سکون
mmdبه ردیابی حافظه هسته (CONFIG_ZRAM_TRACK_ENTRY_ACTIME) دسترسی پیدا میکند یا از نشانگر حالت سکون نرمافزاری خود برای ردیابی مدت زمان دستنخورده ماندن صفحات استفاده میکند.مرحله ۳: پسپردازش ۱ - فشردهسازی مجدد (احیای درون حافظه) : صفحاتی که به سن بیکاری فشردهسازی مجدد میرسند (
min_idle_secondsتاmax_idle_seconds) تحت فشردهسازی مجدد قرار میگیرند.mmdدر/sys/block/zram0/recompressتا به هسته دستور دهد صفحهlz4را از حالت فشرده خارج کرده و با استفاده ازzstdآن را دوباره فشرده کند. این کار رم فیزیکی را بدون ایجاد فرسایش در نوشتن فلش، بازیابی میکند.مرحله ۴: پسپردازش ۲ - نوشتن مجدد (انتقال به حافظه فلش): اگر فشار حافظه ادامه یابد و صفحات به سن بیکاری نوشتن مجدد (معمولاً ۲۰ ساعت یا بیشتر) برسند،
mmdنوشتن مجدد را آغاز میکند.mmdدر/sys/block/zram0/idleو/sys/block/zram0/writebackمینویسد تا صفحه فشردهشده را بهطور کامل از RAM به حافظه فلش پشتیبان منتقل کند.
پیکربندی تنظیمات ZRAM
mmd ویژگیهای تنظیم ZRAM زیر را بارگذاری و پردازش میکند:
| ملک | استفاده کنید | پیشفرض |
|---|---|---|
mmd.zram.enabled | آیا تنظیم ZRAM mmd فعال است یا خیر. | 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 | اندازه دستگاه writeback بر حسب بایت یا درصد پارتیشن داده. اندازه واقعی دستگاه را میتوان بر اساس فضای موجود در پارتیشن داده تنظیم کرد. | 1073741824 (۱ گیگابایت) |
mmd.zram.writeback.min_free_space_mib | حداقل فضای خالی بر حسب مگابایت که باید پس از راهاندازی دستگاه رایتبک در دسترس باشد. | 1536 (۱.۵ گیگابایت) |
mmd.zram.writeback.use_nr_tags_prop | وقتی true ، از مقدار 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 |
ویژگیهای دستگاه Per-ZRAM
وقتی mmd.zram.num_devices بزرگتر از یک باشد، میتوان به صورت اختیاری ویژگیهای خاص را بر اساس هر دستگاه ZRAM پیکربندی کرد، به این صورت که این ویژگی را روی مقداری که با کاما از هم جدا شده و دقیقاً شامل عناصر mmd.zram.num_devices است، تنظیم کرد. این ویژگیها عبارتند از:
-
mmd.zram.size -
mmd.zram.comp_algorithm -
mmd.zram.device_priority -
mmd.zram.recompression.enabled -
mmd.zram.recompression.huge_idle.enabled -
mmd.zram.recompression.idle.enabled -
mmd.zram.recompression.huge.enabled -
mmd.zram.recompression.threshold_bytes -
mmd.zram.recompression.algorithm -
mmd.zram.writeback.device_size -
mmd.zram.writeback.huge_idle.enabled -
mmd.zram.writeback.idle.enabled -
mmd.zram.writeback.huge.enabled
منسوخ شدن تنظیمات ZRAM فعلی
اگرچه swapon_all هنوز در اندروید برای تنظیم ZRAM و فضای swap مبتنی بر دیسک موجود است، mmd رویکرد ترجیحی برای مدیریت ZRAM به دلیل پیکربندی آسانتر و ویژگیهای پیشرفتهای مانند فشردهسازی مجدد ZRAM است.
وقتی تنظیم mmd ZRAM توسط mmd.zram.enabled فعال میشود:
- راهاندازی ZRAM در پیادهسازی
swapon_allدیگر امکانپذیر نیست. - پیکربندیهای موجود ZRAM مانند
config_zramWritebackدر فایلconfig.xmlو ویژگیهای سیستم writeback مربوط بهro.zram.*نادیده گرفته میشوند.
تنظیمات تعمیر و نگهداری 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 (۱۰ دقیقه) |
mmd.zram.writeback.min_idle_seconds | همراه با mmd.zram.writeback.max_idle_seconds برای محاسبهی مدت زمان بیکاری یک صفحه که واجد شرایط نوشتن مجدد بر اساس کسر استفاده از حافظه است. مدت زمان بیکاری محاسبهشده به صورت نمایی بین دو پارامتر درونیابی میشود تا کار را به حداقل برساند، در حالی که تحت فشار حافظه نباشد. | 72000 (۲۰ ساعت) |
mmd.zram.writeback.max_idle_seconds | حداکثر ثانیههای مورد استفاده برای محاسبهی پویای عمر صفحهی غیرفعال بر اساس میزان استفاده از حافظه. | 90000 (۲۵ ساعت) |
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 (۵ مگابایت) |
mmd.zram.writeback.max_bytes | حداکثر بایتهایی که میتوان در یک دور از نوشتن در حالت بیکاری، دوباره نوشت. | 314572800 (۳۰۰ مگابایت) |
mmd.zram.writeback.max_bytes_per_day | حداکثر بایتهایی که میتوان در یک دوره ۲۴ ساعته دوباره نوشت. | 25769803776 (۲۴ گیگابایت) |
mmd.zram.writeback.limit.enabled | آیا حسابداری محدودیت بودجهی بازپرداخت روزانه فعال شود یا خیر. | true |
سیاست فشردهسازی مجدد ZRAM
پارامترهای زیر زمان و نوع حافظهای که دوباره فشرده میشود را کنترل میکنند:
| ملک | استفاده کنید | پیشفرض |
|---|---|---|
mmd.zram.recompression.backoff_seconds | زمان برگشت از آخرین فشردهسازی مجدد. | 1800 (۳۰ دقیقه) |
mmd.zram.recompression.min_idle_seconds | همراه با mmd.zram.recompression.max_idle_seconds برای محاسبهی مدت زمان بیکاری یک صفحه که واجد شرایط فشردهسازی مجدد بر اساس کسر استفاده از حافظه است. مدت زمان بیکاری محاسبهشده به صورت نمایی بین دو پارامتر درونیابی میشود تا کار را به حداقل برساند، در حالی که تحت فشار حافظه نباشد. | 7200 (۲ ساعت) |
mmd.zram.recompression.max_idle_seconds | حداکثر ثانیه مورد استفاده برای محاسبه پویای سن صفحه غیرفعال. | 14400 (۴ ساعت) |
mmd.zram.recompression.threshold_bytes | حداقل اندازه صفحات ZRAM بر حسب بایت که برای فشردهسازی مجدد در نظر گرفته شده است. | 1024 (۱ کیلوبایت) |
mmd.zram.recompression.huge.enabled | آیا فشردهسازی مجدد صفحه HUGE فعال شود یا خیر. | true |
mmd.zram.recompression.idle.enabled | آیا فشردهسازی مجدد صفحه IDLE فعال شود یا خیر. | true |
mmd.zram.recompression.huge_idle.enabled | فعال کردن فشردهسازی مجدد صفحه HUGE_IDLE . | true |
ردیابی صفحات غیرفعال ZRAM
قابلیت نگهداری ZRAM mmd ، صفحات ZRAM را بر اساس مدت زمان آخرین دسترسی به آنها، به عنوان صفحات غیرفعال علامتگذاری میکند. این ویژگی مستلزم فعال بودن پیکربندیهای هسته CONFIG_ZRAM_TRACK_ENTRY_ACTIME یا CONFIG_ZRAM_MEMORY_TRACKING است. CONFIG_ZRAM_TRACK_ENTRY_ACTIME به طور پیشفرض در هستههای GKI نسخه ۶.۱۸ و بالاتر فعال است. در هستههای قدیمیتر، این قابلیت سربار حافظه دارد و به طور پیشفرض فعال نیست.
اگر پیکربندی هسته فعال نباشد، نگهداری ZRAM mmd به یک منطق جایگزین نرمافزاری برای ردیابی صفحات بیکار ZRAM برمیگردد:
هنگام شروع
mmdتمام صفحات ZRAM را به عنوان بیکار علامتگذاری کنید.تا زمانی که دورهی بکآف مورد نیاز سپری نشده است، از انجام تعمیرات بعدی ZRAM صرف نظر کنید.
صفحات بیکار ZRAM را بازنویسی یا دوباره فشرده کنید. اگر به دلیل محدودیتهای بازنویسی، صفحات بیکار باقی مانده باشند،
mmdدر تعمیر و نگهداری بعدی بدون علامتگذاری صفحات جدید به عنوان بیکار، به نوشتن صفحات قبلی ادامه میدهد (از مرحله ۴ صرف نظر کنید).اگر تمام صفحات بیکار دوباره نوشته شدند، تمام صفحات ZRAM را دوباره به عنوان بیکار علامتگذاری کنید و به مرحله ۲ برگردید. اگر نوشتن مجدد ZRAM غیرفعال باشد،
mmdتمام صفحات 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نوشتن در حالت idle را تا زمان رسیدن به بازه زمانی ۲۴ ساعته متوقف میکند. -
Process prefetch or writeback failed: این خطا میتواند در logcat مشاهده شود زمانی که یک ioctl با شکست مواجه میشود. علل رایج عبارتند از:-
EBADFیاESRCH: فرآیند هدف قبل از اینکهmmdبتواندpidfdرا به هسته ارسال کند، پایان یافت. -
ENOSPC: پارتیشن ذخیرهسازی پشتیبان پر است، یا صف دستگاه حلقه به پایان رسیده است.
-
- ZRAM تنظیم نشده است: اگر
mmdدر هنگام بوت شدن نتواند ZRAM را پیکربندی کند، ممکن است به این دلیل باشد کهswapon_allقدیمی یا اسکریپتهای init فروشنده، فایل/dev/block/zram0را قبل از اینکهmmdبتواند اجرا شود، قفل کردهاند.