برای دههها، دانلود حافظه بیشتر جوک اینترنتی تمامعیار بود. اگر کامپیوتر شما زیر بار تبهای سنگین مرورگر، برنامههای حجیم یا بارهای کاری سنگین کامپایل به لکنت میافتاد، پیشکسوتهای دنیای فناوری با خنده شما را به یک وبسایت شوخی هدایت میکردند که وعده دانلود رایگان حافظه را میداد. در محاسبات مدرن لینوکس اما، این مفهوم دیگر یک شوخی نیست. از طریق تکنیکهای فشردهسازی درون حافظه، شما میتوانید بدون پرداخت حتی یک پنی برای ارتقای سختافزاری، ظرفیت قابل استفاده خود را به طور مؤثر افزایش دهید.
تیم پارچ لینوکس Parch Zram را توسعه داد تا این قابلیت را به صورت یکپارچه و روان به دستگاههای شما بیاورد. چه در حال اجرای پارچ بر روی یک لپتاپ روزمره باشید، چه روی یک رزبریپای با محدودیت منابع، یا یک دسکتاپ ردهبالا، Parch Zram تضمین میکند که سیستمعامل شما حتی در هنگام کمبود حافظه فیزیکی نیز پاسخگو و سریع باقی بماند.
مشکل سواپ سنتی بر روی دیسک
هر سیستمعامل کامپیوتری زمانی که برنامههای فعال فضایی بیش از آنچه رم فیزیکی میتواند فراهم کند طلب میکنند، به استراتژیهای مدیریت حافظه متکی است. پاسخ سنتی همیشه فضای سواپ واقع بر روی یک هارد درایو، دیسک حالت جامد یا کارت micro-SD بوده است.
سواپ مبتنی بر دیسک کار میکند، اما افت عملکرد شدیدی به همراه دارد. هارد درایوهای مکانیکی هزاران بار کندتر از حافظه سیستم هستند که همین امر هرگونه سرریز حافظه را به فریزهای دردناک سیستم و ترشینگ تبدیل میکند. درایوهای حالت جامد مدرن سریعتر هستند، با این حال سواپ مداوم همچنان باعث تأخیر محسوس میشود و طول عمر محدود نوشتن سلولهای حافظه فلش را به اتمام میرساند. در رایانههای تکبوردی مانند رزبریپای، سواپ مفرط روی دیسک میتواند کارتهای micro-SD را در مدتی شگفتآور کوتاه تخریب و فاسد کند.
هنگامی که دسکتاپ شما شروع به سواپ سنگین روی فضای ذخیرهسازی میکند، افت فریم، قفل شدن نشانگر ماوس و پنجرههای غیرپاسخگو را تجربه میکنید. در بدترین شرایط، قاتل حافظه (out-of-memory killer) هسته لینوکس وارد عمل شده و برنامههای فعال شما را میکشد تا هسته را زنده نگه دارد.
ماژول ZRAM چگونه در زیر پوسته کار میکند
فناوری ZRAM با دوری کامل از دیسک، رویکردی کاملاً متفاوت اتخاذ میکند. هسته لینوکس به جای ایجاد پارتیشن بر روی حافظه ذخیرهسازی، یک دستگاه بلاکی مجازی را مستقیماً درون حافظه فیزیکی شما میسازد.
هنگامی که فشار حافظه بالا میرود، هسته صفحات کمکاربرد را به این دستگاه بلاکی مجازی سواپ میکند. پیش از نوشته شدن دادهها، ZRAM آنها را به سرعت با استفاده از الگوریتمهای پرسرعت مانند LZ4 فشرده میسازد. از آنجا که پردازندههای مدرن میتوانند دادهها را با نرخ چند گیگابایت بر ثانیه فشرده و بازگشایی کنند، مدیریت صفحات در رم تنها کسری ناچیز از زمان مورد نیاز برای نوشتن روی فضای ذخیرهسازی فیزیکی را مصرف میکند.
یک صفحه فشردهشده معمولاً بین نصف تا یکسوم اندازه اصلی خود را اشغال میکند. با معاوضه مقدار ناچیزی از زمان CPU در ازای صرفهجویی چشمگیر در فضا، سیستم شما میتواند دادههای فعال به مراتب بیشتری را در همان تراشههای حافظه فیزیکی نگهداری کند. برای تمام مقاصد عملی، شما رم بیشتری دانلود کردهاید.
فناوری ZRAM هرگز جایگزین قطعی رم فیزیکی سختافزاری نیست! ماژول ZRAM با فشردهسازی صفحات حافظه و نگهداری آنها درون رم فیزیکی موجود کار میکند؛ بنابراین برای ذخیرهسازی دادههای فشرده هنوز به بخشی از رم واقعی نیاز دارد. اگر بار کاری شما با دادههایی سر و کار دارد که از قبل فشرده شدهاند یا ذاتا قابلیت فشردهسازی پایینی دارند (نظیر رندر ویدیو، تدوین مدیا، فایلهای فشرده zip یا دیتابیسهای حجیم)، نسبت فشردهسازی به شدت به سمت ۱:۱ افت میکند و ZRAM فضای ذخیره چندانی آزاد نمیکند. چنانچه فعالیتهای روزمره شما به طور مداوم فراتر از رم فیزیکی دستگاه است، خرید و نصب ماژولهای رم واقعی تنها راهحل دائمی خواهد بود.
تکامل و مهندسی Parch Zram
در حالی که ZRAM به عنوان یک ماژول درون هسته اصلی لینوکس وجود دارد، پیکربندی صحیح آن نیازمند هماهنگی دقیق است. اسکریپتهای اولیه راهاندازی اغلب میانبرهای ناپختهای را انتخاب میکردند که در رایانههای مدرن چند هستهای مشکلات پایداری غیرمنتظرهای به بار میآورد.
یک نقص رایج در پیادهسازیهای قدیمیتر، محاسبات ناشیانه در تعیین اندازه بود. برخی از اسکریپتها حافظه کل را میسنجیدند و همان مقدار کامل را به تکتک هستههای CPU اختصاص میدادند. در یک ورکاستیشن هشت هستهای یا دوازده هستهای، این فرمول معیوب تخصیصهای سواپ مجازی هشتاد یا نود گیگابایتی ایجاد میکرد که مانیتورهای حافظه را به اشتباه میانداخت و ساختارهای رهگیری هسته را به اتمام میرساند.
ابزار Parch Zram این مشکل را با محاسبه ظرفیت هدف کل از یک درصد متعادل حافظه فیزیکی که به طور پیشفرض پنجاه درصد است حل میکند. سپس این کل منطقی را به طور مساوی بین تمام هستههای شناساییشده CPU تقسیم مینماید. این معماری چنددستگاهی به سیستمعامل اجازه میدهد تا دادهها را در چندین رشته CPU به صورت همزمان و بدون تداخل قفل فشرده و بازگشایی کند.
یکی دیگر از بهینهسازیهای حیاتی، همزیستی سواپ است. ابزارهای قبلی به طور مکرر دستوراتی را اجرا میکردند که تمام پارتیشنهای سواپ موجود بر روی سیستم شما را به طور ناگهانی غیرفعال میکرد. ابزار Parch Zram به ساختار فضای ذخیرهسازی شما احترام میگذارد. این ابزار صرفاً دستگاههای مجازی خود را راهاندازی و مدیریت میکند و به آنها اولویت سواپ بالایی اختصاص میدهد تا هسته حافظه فشرده سریع را در ابتدا ترجیح دهد، در حالی که همچنان هرگونه سواپ از پیش موجود روی حافظه ذخیرهسازی را به عنوان یک پشتیبان امن و آخرین چاره در دسترس باقی میگذارد.
این اسکریپت همچنین استانداردهای دقیق اسکریپتنویسی دفاعی شل را پیادهسازی میکند و پیش از هر اقدامی وابستگیهای سیستم مانند awk، mkswap و swapon را اعتبارسنجی مینماید. این ابزار به عنوان یک سرویس تکمرحلهای (oneshot) با رفتار استاندارد در systemd کار میکند که به طور تمیز با سیستمعامل بوت میشود و تخصیصهای هسته خود را هنگام خاموش شدن به آرامی تخلیه میکند.
نصب Parch Zram بر روی پارچ لینوکس
شروع کار در پارچ لینوکس بسیار آسان است زیرا بسته به طور مستقیم در مخزن رسمی پارچ لینوکس به عنوان world/parch-zram نگهداری میشود. شما نیازی به کلون کردن سورسکد یا کامپایل دستی بستهها ندارید.
برای نصب Parch Zram بر روی ماشین پارچ خود، به سادگی آن را با pacman نصب کنید:
sudo pacman -S parch-zramپس از نصب، سرویس systemd را فعال کنید تا حافظه فشرده بلافاصله فعال شود و در هر بار بوت شروع به کار نماید:
sudo systemctl enable --now parch-zram.serviceسیستم شما اکنون به طور فعال در برابر اتمام ناگهانی حافظه محافظت شده است.
اگر در حال اجرای آرچ لینوکس خام یا توزیع مبتنی بر آرچ دیگری هستید که در آن بسته در مخازن سیستم وجود ندارد، میتوانید آن را با استفاده از بستهساز آرچ از سورس بسازید و نصب کنید:
git clone https://github.com/behdanisohrab/parch-zram
cd parch-zram
makepkg -sic
sudo systemctl enable --now parch-zram.serviceاستفاده از Parch Zram در سایر توزیعهای لینوکس
ابزار Parch Zram کاملاً قابل حمل است و در سایر توزیعهای لینوکس و نصبهای مستقل Raspberry Pi OS به طور پایدار کار میکند. یک اسکریپت نصب خودکار برای محیطهایی که مدیر بسته آرچ در آنها موجود نیست درون مخزن فراهم شده است.
شما میتوانید اسکریپت نصب را مستقیماً بررسی و اجرا کنید:
git clone https://github.com/behdanisohrab/parch-zram
cd parch-zram
sudo chmod +x install.sh
sudo ./install.shاین اسکریپت فایلهای باینری و سرویس systemd ضروری را دریافت کرده، آنها را در دایرکتوریهای سیستمی مناسب قرار میدهد و سرویس را بلافاصله فعال میسازد.
اگر روزی تصمیم به حذف Parch Zram گرفتید، اسکریپت حذف همراه تمام فایلها را پاکسازی کرده و سیستم شما را با خیال راحت به حالت اولیه بازمیگرداند:
sudo chmod +x uninstall.sh
sudo ./uninstall.shگزینههای تنظیم و پیکربندی
ابزار Parch Zram با پیشفرضهای امن و کاملاً آزمایششده عرضه میشود که برای اکثریت قریب به اتفاق کاربران به خوبی کار میکنند. کاربران پیشرفته که مایل به سفارشیسازی راهاندازی خود هستند میتوانند این کار را به سادگی از طریق متغیرهای محیطی انجام دهند.
شما میتوانید درصد هدف حافظه را با استفاده از متغیر ZRAM_PERCENT تنظیم کنید. در حالی که پنجاه درصد استاندارد است، سیستمهایی با محدودیتهای شدید ممکن است تخصیص بالاتری مانند شصت یا هفتاد درصد را ترجیح دهند.
همچنین میتوانید با استفاده از متغیر ZRAMMAXMB یک سقف مشخص بر حسب مگابایت تعیین کنید که تضمین میکند اندازه سواپ مجازی صرفنظر از رم نصبشده، هرگز فراتر از آستانه انتخابی رشد نکند.
الگوریتم فشردهسازی به طور پیشفرض روی LZ4 برای ایجاد تعادل ایدهآل میان سرعت و کارایی تنظیم شده است. کاربرانی که به دنبال نسبتهای فشردهسازی بالاتر به بهای بار پردازشی اندک CPU هستند میتوانند تنظیم ZRAM_ALGORITHM را به ZSTD تغییر دهند.
سایر پارامترها شامل ZRAMNUMDEVICES برای نادیده گرفتن شناسایی خودکار هستهها و ZRAMSWAPPRIORITY برای تعیین میزان اولویت هسته در هدایت صفحات حافظه به فضای ذخیرهسازی فشرده نسبت به سایر فایلهای سواپ است.
ملاحظات مصرف پردازنده و شارژ باتری: فرایند فشردهسازی و بازگشایی مداوم دادهها نیازمند چرخههای پردازشی CPU است. با وجود اینکه الگوریتم پیشفرض LZ4 برای سرعت بینظیر و تاخیر ناچیز بهینهسازی شده، جابهجایی پیوسته صفحات حافظه در بارهای فوقسنگین مقداری از توان پردازنده را به خود اختصاص داده و میتواند در لپتاپها مصرف باتری را کمی افزایش دهد. علاوه بر این، در دستگاههایی با حافظه بسیار محدود (مانند بردهای تکبوردی ۱ یا ۲ گیگابایتی)، هرگز درصد تخصیص را بیش از حد بالا (مثلاً ۸۰ یا ۹۰ درصد) تنظیم نکنید؛ زیرا خود هسته لینوکس و سرویسهای سیستمی حیاتی برای اجرا نیازمند فضای آزاد رم فیزیکی غیرفشرده هستند.
بررسی راهاندازی فعال شما
هنگامی که سرویس فعال شد، میتوانید مطمئن شوید که دستگاههای سواپ فشرده شما به درستی کار میکنند. دستور استاندارد گزارش حافظه را اجرا کنید:
zramctlاین ابزار هر دستگاه فعال ZRAM، الگوریتم فشردهسازی در حال استفاده، حافظه فیزیکی مصرفشده و اندازه کلی غیرفشرده ذخیرهشده را نمایش میدهد. همچنین میتوانید وضعیت کلی مصرف سواپ خود را با دستور swapon زیر نظر بگیرید:
swapon --showشما چندین دستگاه بلاکی zram را مشاهده خواهید کرد که با اولویت بالا کار میکنند و آماده هستند تا جهشهای ناگهانی حافظه را بدون اینکه دستگاه شما متوقف شود مهار کنند.
یک تجربه محاسباتی روانتر
پارچ لینوکس همیشه کارایی، سادگی و یک تجربه دسکتاپ پیراسته را در اولویت قرار داده است. ابزارهایی مانند Parch Zram با استخراج حداکثر پتانسیل از سختافزار فعلی شما، تجسم این فلسفه هستند.
با فعال بودن مدیریت هوشمند حافظه فشرده، میتوانید پایگاههای کد بزرگ را کامپایل کنید، دهها تب مرورگر را باز نگه دارید، چندین کانتینر مجازی را اجرا نمایید و بدون ترس از فریز وحشتناک سیستم، روی پروژههای خلاقانه کار کنید. شاید این موضوع جادو نباشد، اما هنگامی که تجربه کنید سیستم شما زیر فشار چقدر روان کار میکند، قطعاً حس دانلود رم بیشتر را به شما خواهد داد.