بهینه سازی سیستم عامل Linux برای استفاده روی درایوهای SSD

با وجود استفاده گسترده از درایو های ssd هنوز سیستم عامل ها به صورت کامل برای این نوع درایو ها بهینه نشدن و شرکت ها فعلا یه سیاست حد وسط بین ssd و hdd رو دنبال میکنن.همونطور که احتمالا میدونید نحوه ذخیره سازی و خواندن و نوشتن درایوهای ssd با hdd متفاوت است و همچنین به خاطر اینکه ssd ها دارای طول عمر مفید (LifeSpan) هستند یعنی تعداد سایکل های نوشتن روی واحد های حافظه (پیج) محدود هستش این قضیه اهمیت بیشتری پیدا میکنه. بنابراین برخلاف اینکه ما در hdd ها محدودیتی برای خواندن و نوشتن و اوررایت کردن نداشتیم در ssd به خاطر مشکلات گفته شده باید تا حد ممکن عملیات رایت رو کم کنیم تا طول عمر درایومون بالاتر برهدر ارتیکل زیر سعی کردم به صورت ساده چند راه را برای اپتیمایز کردن لینوکس برای استفاده از ssd بیان کنم و اگر شما از این سیستم عامل ها روی درایو ssd استفاده میکنید میتونید از این روش ها استفاده کنید. توجه داشته باشید که این روش ها رو هم برای سیستم های فیزیکال و هم ویرچوال که روی درایو ssd نصب شده اند میتوان استفاده کرد۱- آپدیت firmware درایو SSD :سعی کنید فیرم ور درایو ssd رو اپدیت کنید. برای اطلاع از ورژن فیرم ور و دانلود و نحوه نصب اپدیت ها به سایت سازنده مراجعه کنید.۲- استفاده از EXT4 به عنوان فایل سیستم :با وجود اینکه فایل سیستم ext4 قبل از ساخت درایوهای ssd معرفی شده اما هنوز هم بهترین گزینه برای نصب لینکس هستش هم از نظر سرعت و هم از نظر پایداری. البته این فایل سیستم برای ssd بهینه نشده که در ادامه روش هایی رو برای بهینه سازی عنوان می کنیم.۳- فعالسازی TRIM برای پاکسازی garbage ها (garbage collection) از روی درایو SSD :به صورت خلاصه بگم که تریم سرویسی است که از طریق اون سیستم عامل به درایو ssd اعلام میکنه که کدام بلاک های دیتا دیگر استفاده نمیشود و درایو میتواند انها را حذف کند. دلیل بوجود امدن این تکنولوژی این هستش که درایو های ssd قابلیت اوررایت روی دیتای قبلی رو ندارن و ابتدا واحد های حافظه باید 0 بشن و بعد دیتای جدید روی انها نوشته بشه و همچنین عملیات حدف داده ها و صفر شدن فقط روی بلاک ها میتونه انجام بشه (هر بلاک شامل ۱۲۸تا ۲۵۶ تا پیج هستش) و به عبارت ساده تر دنگ و فنگ زیاد داره. اگر از تریم استفاده نشه وقتی ما میخوایم عملیات رایت دیتا را انجام دهیم ابتدا درایو باید محل ذخیره را پاکسازی کند و بعد عملیات رایت را انجام دهد که این پروسه زمان زیادی میبره و عملا ما دیگر از مزیت اصلی ssd که سرعت اونه بهره زیادی نمیبریم. راه حل اینه که با استفاده از سرویس TRIM قبل از رایت دیتا سیستم عامل محل ذخیره فایل های اضافی رو به درایو ssd اعلام کنه تا درایو سر فرصت اونا رو حذف کنه و زمانی که ما میخوایم دیتایی رو ذخیره کنیم اون بلاک ها صفر شده و اماده رایت باشند و دیتای ما سریع ذخیره بشه. حالا ممکنه فکر کنید که بهتره سرویس تریم همیشه فعال باشه اما در عمل این کار باعث ایجاد overhead میشه و سرعت رو پایین میاره و بهترین روش اینه که هر چند وقت یکبار عملیات تریم انجام بشه بسته به اینکه حجم عملیات رایت روزانه ما چقدر هستش. مثلا من روی لپ تاپ شخصی خودم که استفاده متوسط روش دارم به صورت هفتگی تریم رو فعال کردم. برای فعال سازی تریم هم میشه از systemd استفاده کرد و هم از اسکریپت که مثلا به وسیله سرویس cron job در زمان دلخواه ما انجام بشه. من خودم که از لینکس Manjaro استفاده میکنم با استفاده از کامند زیر سرویس تریم رو به صورت هفتگی فعال کردمsudo systemctl enable fstrim.timer۴- کاهش دادن عملیات رایت روی درایو SSDدر سیستم عامل لینوکس میتونیم با ایجاد تغییراتی در فایل fstab که جدول پیکربندی فایل سیستم ها و mount و unmount کردن هستش عملیات رایت رو کاهش بدیم و همچنین کاری کنیم که فایل های temp و log ها به جای اینکه روی ssdذخیره بشن روی ram سیستم ذخیره بشنابتدا فایل /etc/fstab رو با استفاده از یک ویرایشگر و دسترسی ادمین باز میکنیم (sudo nano /etc/fstab ) و سپس به درایو های روی ssd فلگ noatime رو اضافه میکنیم همچنین در اخر فایل هم لاین های زیر رو اضافه میکنیم برای temp و log و بعد هم تغییرات رو ذخیره میکنیم و سیستم رو ریبوت میکنیم تا تغییرات اعمال بشه.# Added 4 lines to use RAM instead of SSD for temp and log files tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0۵- تنظیمات vm.swappiness :vm.swappiness یکی از پارامترهای کرنل لینوکس هستش که مشخص میکنه چه موقع اطلاعات یه برنامه از ram به هارد منتقل بشه تا سیستم مشکل کمبود رم پیدا نکنه. به عبارت ساده تر عملیات جابجایی دیتای برنامه ها از رم به virtual memory روی دیسک (swap) هستش. در حالت پیش فرض روی اکثر دیستروها این مقدار 60 هستش به این معنی که وقتی ۴۰ درصد رم ما پر شد عملیات swap شروع میشه که به نظر من اصلا مقدار مناسبی نیست به خصوص توی سیستم ها و لپ تاپ های جدید که میزان رم متاسبی دارن. خب در این مرحله ما به خاطر اینکه عملیات رایت روی درایو ssd رو کاهش بدیم عدد ۶۰ رو کم میکنیم مثلا به ۵ و این عمل باعث میشه وقتی رم سیستم ۹۵ درصد پر شد عملیات swapping شروع بشه . من روی manjaro با کامند زیر این کار رو کردم و شما هم اگه روی دیستروهای دیگه هستین و این کامند جواب نداد یه سرچ بکننین و نحوه تغییرش روی دیستروی خودتون رو دربیارین.sudo sysctl vm.swappiness=5 sudo sysctl vm.vfs_cache_pressure=50۶- تنظیمات I/O scheduler و Queuing :مبحث کیوینگ وقتی پیش میاد که یک جریانی از داده ها از یک میدیا با پهنای باند زیاد برسند به یک میدیا با پهنای باند کم. خوشبختانه در زمینه کیوینگ و scheduling ها درایو های ذخیره سازی لینوکس عملکرد مناسبی داره و وقتی سیستم عامل تشخیص میده دیسک سیستم هارد دیسک هستش یا ssd و یا NVMe کرنل scheduler مناسب رو انتخاب میکنه. به هر حال شما با کامند cat /sys/block/sda/queue/scheduler میتونید scheduler سیستمتون رو ببینید و در صورت نیاز با توجه به scheduler مناسبی که پایین میگم تغییرش بدینScheduler مناسب برای درایو های ssd "MQ-Deadline" هستشScheduler مناسب برای درایو های NVMe "None" هستش۷- استفاده از Suspend به جای Hibernateدر لینوکس دو نوع حالت اماده به کار وجود داره که یکیش Hibernate که فایل های لازم برای شروع دوباره سیستم روی دیسک ذخیره میشه و یکیش هم Suspend که فایل ها روی رم ذخیره میشه. این دو روش هرکدوم مزایا و معایب خودشون رو دارن ولی وقتی ما از ssd استفاده میکنیم چون هدفمون کم کردن عملیات رایت و بالا بردن عمر مفید ssd هستش بهتره که از ساسپند به جای هایبرنیت استفاده کنیم. در حالت ساسپند درسته که یه مقدار از شارژ باتری (در لپ تاپ ها برای نگهداری استیت سیستم توی رم) استفاده میشه اما دیگه عملیات رایت روی ssd رو نداریم.در پایان باید بگم که طبق رسم موجود در اینجور مقاله ها مسولیت انجام این کارها با خودتون هستش :)دوستان توجه کنید من مراحل بالا رو روی توزیع Manjaro تست کردم و اوکی هستش ولی اگه شما روی دیسترو های دیگه هستین و کامند های بالا جواب نداد یه سرچ بزنید و کامند مناسب با دیستروتون رو پیدا کنیدسربلند و پیروز باشید.منابع :https://easylinuxtipsproject.blogspot.com/p/ssd.htmlhttps://wiki.archlinux.org/index.php/Solid_state_drive