مهندسان فیس بوک (ممنوع در فدراسیون روسیه) گزارشی در مورد پیاده سازی فناوری TMO (Transparent Memory Offloading) در سال گذشته منتشر کردند که با جابجایی داده های ثانویه که برای کار لازم نیست به درایوهای ارزان تر مانند NVMe امکان صرفه جویی قابل توجهی در RAM روی سرورها می دهد. دیسک های SSD فیس بوک تخمین می زند که استفاده از TMO می تواند 20 تا 32 درصد از RAM را در هر سرور ذخیره کند. این راه حل برای استفاده در زیرساخت هایی طراحی شده است که برنامه ها در کانتینرهای ایزوله اجرا می شوند. اجزای سمت هسته TMO قبلاً در هسته لینوکس گنجانده شده است.
در سمت هسته لینوکس، این فناوری توسط زیرسیستم PSI (اطلاعات سکون فشار) پشتیبانی می شود که از نسخه 4.20 در دسترس است. PSI در حال حاضر در کنترلرهای مختلف با حافظه کم استفاده می شود و به شما امکان می دهد اطلاعات مربوط به زمان انتظار برای به دست آوردن منابع مختلف (CPU، حافظه، I/O) را تجزیه و تحلیل کنید. با PSI، پردازندههای فضای کاربر میتوانند با دقت بیشتری سطوح بار سیستم و الگوهای کاهش سرعت را ارزیابی کنند، و اجازه میدهند ناهنجاریها زودتر شناسایی شوند، قبل از اینکه تأثیر قابلتوجهی بر عملکرد داشته باشند.
در فضای کاربر، TMO توسط مولفه Senpai ارائه میشود که از طریق cgroup2، به صورت پویا محدودیت حافظه را برای کانتینرهای برنامه بر اساس دادههای دریافتی از PSI تنظیم میکند. Senpai نشانههای شروع کمبود منابع را از طریق PSI تجزیه و تحلیل میکند، حساسیت برنامهها به کاهش سرعت دسترسی به حافظه را ارزیابی میکند و سعی میکند حداقل اندازه حافظه مورد نیاز کانتینر را تعیین کند، که در آن دادههای مورد نیاز برای عملکرد در RAM باقی میماند، و اطلاعات همراه آن. دادههایی که در کش فایل مستقر شدهاند یا در حال حاضر مستقیماً در آن استفاده نمیشوند، به پارتیشن swap منتقل میشوند.
بنابراین، ماهیت TMO این است که فرآیندها را در یک رژیم غذایی سخت از نظر مصرف حافظه نگه دارید، و مجبور به تعویض صفحات حافظه استفاده نشده که حذف آنها تأثیر قابل توجهی بر عملکرد ندارد (به عنوان مثال، صفحات با کد استفاده شده فقط در هنگام اولیه سازی، و یکبار مصرف) داده ها در کش دیسک). برخلاف خروج اطلاعات به پارتیشن مبادله در پاسخ به فشار حافظه، در TMO داده ها بر اساس پیش بینی فعال خارج می شوند.
یکی از معیارهای اخراج عدم دسترسی به صفحه حافظه به مدت 5 دقیقه است. چنین صفحاتی صفحات حافظه سرد نامیده می شوند و به طور متوسط حدود 35 درصد از حافظه برنامه را تشکیل می دهند (بسته به نوع برنامه، محدوده ای بین 19 تا 65 درصد وجود دارد). Preemption فعالیت مرتبط با صفحات حافظه ناشناس (حافظه اختصاص داده شده توسط برنامه) و حافظه مورد استفاده برای ذخیره فایل (تخصیص داده شده توسط هسته) را در نظر می گیرد. در برخی از برنامه ها مصرف اصلی حافظه ناشناس است، اما در برخی دیگر حافظه پنهان فایل نیز مهم است. برای جلوگیری از عدم تعادل تخلیه حافظه پنهان، TMO از یک الگوریتم صفحهبندی جدید استفاده میکند که صفحات ناشناس و صفحات مرتبط با حافظه پنهان فایل را به نسبت حذف میکند.
فشار دادن صفحاتی که به ندرت استفاده می شوند به حافظه کندتر تأثیر قابل توجهی بر عملکرد ندارد، اما می تواند هزینه های سخت افزاری را به میزان قابل توجهی کاهش دهد. داده ها به درایوهای SSD یا به یک منطقه تعویض فشرده در RAM منتقل می شوند. از نظر هزینه ذخیره یک بایت داده، استفاده از NVMe SSD تا 10 برابر ارزان تر از فشرده سازی در RAM است.
منبع: opennet.ru