
توسعهدهنده هسته لینوکس، کایروی سانگ (Kairui Song)، آخر هفته گذشته جدیدترین مجموعه پچهای (Patch) خود را برای MGLRU-FG منتشر کرد. MGLRU-FG مکانیزمی برای ارتقای هدایتشده بر پایه فرکانس (frequency guided promotion) در MGLRU است.
MGLRU-FG چیست و چه تغییری ایجاد میکند؟
MGLRU یا Multi-Gen LRU در سالهای اخیر با بهینهسازی بازپسگیری صفحات (page reclaims) و بهبود عملکرد تحت فشار حافظه (memory pressure) دستاوردهای خوبی برای لینوکس داشته است. پچهای جدید MGLRU-FG قصد دارند این مسیر را جلوتر ببرند.
در توضیحات پچ آمده است: «حفاظت لایهای PID در زمان حذف (eviction-time tier-PID protection) در MGLRU با ارتقای هدایتشده بر پایه فرکانس در زمان دسترسی (access-time frequency-guided promotion) تکمیل میشود.» مجموعهای یکپارچه از توابع کمکی (helpers) بر اساس تعداد ارجاعشده (referenced/access count) یک folio معرفی شده است.
هر دسترسی، شمارنده ارجاع یک folio را که در پرچمهای folio (refs) ذخیره میشود افزایش میدهد. refs مانند قبل به یک لایه لگاریتمی (logarithmic tier) نگاشت میشود، اما اکنون تعریف بیتهای رسمیتری دارد و چند آستانه ویژه معرفی شده است: LRU_REFS_REFERENCED (۱)، LRU_REFS_WORKINGSET (۲)، LRU_REFS_PROTECTED (۳) و LRU_REFS_MAX (۷). وقتی refs به آستانه مشخصی برسد، folio بهجای انتظار برای فعال شدن کنترلکننده PID، بهصورت پیشدستانه ارتقا مییابد.
همچنین استفاده MGLRU از PG_workingset و PG_referenced سادهتر شده است؛ این دو به دو بیت پایین شمارنده refs تبدیل میشوند و بیتهای بالاتر توسط LRU_REFS_MASK تأمین میشوند. این تغییر مصرف بیتهای شمارنده refs اصلی MGLRU را یک بیت کاهش میدهد، زیرا اکنون فقط یک بیت اضافه برای ثبت حداکثر شمارنده ارجاع ۷ لازم است و حسابداری refs در MGLRU دقیقتر میشود.
نتایج آزمایشها: از ۱۰ تا ۴۰ درصد بهبود
نکته مهم برای کاربران نهایی نتیجه نهایی است. در خلاصه پچ آمده است: «در مجموع، در آزمونهای مختلف شاهد عملکرد ۱۰ تا ۴۰ درصد بالاتر یا بازخطای صفحه (refault) کمتر هستیم؛ برخی بارهای کاری کاهش چشمگیر زمان اجرا را تجربه میکنند و در همین حال مصرف پرچمهای صفحه (page flags) یک بیت کاهش مییابد.» بیشتر این دستاورد از بهبود واقعی توانایی LRU در تشخیص مجموعه کاری داغتر (hotter workingset) حاصل شده است. این پچها روی چندین سرور با معماریهای مختلف، رایانههای رومیزی و اندروید آزمایش شده و همه نتایج امیدوارکنندهای نشان دادهاند.
در مقایسه با نسخه دوم (V2)، نسخه سوم (V3) بیشتر تحت تأثیر بازپسگیری بیشازحد حافظه بینام (anon over-reclaim) قرار میگیرد، اما نتایج کلی بهتری ارائه میدهد؛ این مشکلی است که باید بعداً یا بهصورت جداگانه برطرف شود.
جزئیات عملکرد در بنچمارکها
- آزمون ساخت هسته لینوکس (Linux kernel build) حدود یک ثانیه سریعتر، یا هنگام کامپایل با ۹۶ کار (jobs) برای افزایش فشار بازپسگیری حافظه، تقریباً ۱۰ ثانیه سریعتر شده است.
- MongoDB با MGLRU-FG حدود ۱۳.۵ درصد سریعتر عمل کرده است.
- آزمون Chromium و Node.js با استفاده از zRAM بهعنوان swap، بهبود ۷۶ درصدی را نشان داده است.
- FIO تا ۱۱ درصد توان عملیاتی (throughput) بالاتر را ثبت کرده است.
به گفته توسعهدهنده، این مجموعه پچها هماکنون بسیار قابل استفاده، پایدار و با عملکرد خوب است، اما همچنان بهصورت RFC (درخواست نظر) باقی میماند، زیرا تغییری عمده در LRU محسوب میشود؛ از جمله تغییر خواندن Active/Inactive که به باور او تغییری در جهت درست است.
جزئیات بیشتر درباره این کار MGLRU-FG برای هسته لینوکس از طریق مجموعه پچ LKML قابل دسترسی است.