قابلیت Swappiness در لینوکس چیست و چگونه تنظیم میشود؟

تعویض حافظه یا Swappiness یک پارامتر هسته لینوکس است که معمولا با افزایش عملکرد سیستم مرتبط است. با این حال، این پارامتر مستقیما عملکرد را بهبود نمیبخشد و مقدار بالای Swappiness میتواند نتایج نامطلوبی داشته باشد. تغییر پارامترهای پیشرفته سیستم با احتیاط اضافی انجام شود.
این مقاله توضیحی عمیق در مورد Swappiness ارائه میدهد. شما یاد خواهید گرفت که Swappiness چگونه کار میکند و چگونه آن را در یک سیستم لینوکس تنظیم کنید.
فهرست مطالب
مقدمهای بر Memory Mapping
نگاشت حافظه یا Memory Mapping یک مفهوم حیاتی است که به درک نقش Swappiness کمک میکند. مکانیسم Memory Mapping آدرسهای منطقی (مجازی) و فیزیکی حافظه را به هم متصل میکند. قدم اول تعریف تفاوت بین حافظه فیزیکی و حافظه مجازی است.
حافظه فیزیکی. حافظه فیزیکی یک ماشین به RAM اشاره دارد. این نشان دهنده سختافزار فیزیکی است که دادهها و دستورالعملها در طول اجرای برنامه در آن قرار دارند.
حافظه مجازی. حافظه مجازی یک کامپیوتر انتزاعی است که سیستم عامل برای هر برنامه در حال اجرا فراهم میکند. حافظه مجازی دارای فضای آدرسی مستقلی از حافظه فیزیکی است.
برنامهها با آدرسهای حافظه مجازی تعامل میکنند که سیستم عامل آنها را به آدرسهای فیزیکی نگاشت میکند.
صفحات حافظه یا Memory Pages
حافظه مجازی به صفحاتی تقسیم میشود که هر کدام دارای یک آدرس فیزیکی نگاشت شده هستند. صفحات بلوکهایی با اندازه ثابت هستند و واحدهای اساسی برای تخصیص، آدرس دهی و مدیریت حافظه هستند. هر صفحه دارای یک آدرس منحصر به فرد است و ساختار داده جدول صفحه، نقشههای بین آدرسهای مجازی و فیزیکی را ذخیره میکند.
صفحات حافظه مجازی مزایای مختلفی برای مدیریت حافظه، از جمله مکانیسم swapping، فراهم میکنند. زمانی که حافظه کم است، صفحات غیرفعال به دیسک یا حافظه ثانویه منتقل میشوند و هنگام فعال شدن مجدد به حافظه بازگردانده میشوند.
انواع Memory Pages
صفحات حافظه (Memory Pages) مختلف اهداف خاصی دارند. هر نوع صفحه از انواع داده و عملیات مختلف استفاده میکند. انواع رایج صفحات حافظه شامل موارد زیر است:
صفحات Code: این صفحات دستورالعملهای قابل اجرای برنامهها را ذخیره میکنند. صفحات کد حاوی کد ماشین هستند و دارای مجوزهای فقط خواندنی برای جلوگیری از تغییرات تصادفی هستند. فرآیندهایی که برنامههای یکسانی را اجرا میکنند، صفحات کد را برای بهینهسازی استفاده از حافظه به اشتراک میگذارند.
صفحات Data: آنها دادههای غیرقابل اجرای برای برنامهها مانند متغیرها، ثابتها یا ساختارهای داده را نگه میدارند. صفحات داده قابل نوشتن هستند و برنامهها در صورت نیاز آزادانه مقادیر را تغییر میدهند. فرآیندها صفحات داده را به اشتراک نمیگذارند.
صفحات Stack: صفحات پشته پویا هستند و پشتهها را برای فراخوانی توابع و متغیرهای محلی ذخیره میکنند. صفحات بر اساس اصل آخرین ورودی، اولین خروجی (LIFO) عمل میکنند و در مدیریت اجرای توابع و حالتهای برنامه حیاتی هستند.
صفحات Heap: این صفحات تخصیص و آزادسازی حافظه پویا را از توابعی مانند malloc() و free() ذخیره میکنند. صفحات هیپ دادههایی با اندازه و طول عمر مشخص را ذخیره میکنند. دادهها برای جلوگیری از نشت حافظه نیاز به آزادسازی دارند.
صفحات پشتیبان فایل (File-backed pages): این صفحات به طور مستقیم با فایلهای خاص روی دیسک مرتبط هستند. آنها در فایلهای نگاشت شده در حافظه بسیار مهم هستند و فضای آدرس حافظه مجازی را برای یک فرآیند به طور مستقیم متصل میکنند. تغییرات در صفحات پشتیبان فایل در فایل اصلی منعکس میشود و روشی مناسب برای خواندن و نوشتن دادههای فایل فراهم میکند.
صفحات Anonymous: صفحات ناشناس نیز صفحات خصوصی نامیده میشوند و با هیچ فایل خاصی مرتبط نیستند و به ذخیرهسازی پایدار متصل نیستند. این صفحات دادههایی را برای حافظه تخصیص پویا، مانند متغیرها و دادههای ایجاد شده در زمان اجرا، نگه میدارند.
صفحات حافظه مشترک (Shared memory pages): صفحات حافظه مشترک دادههای مشترک بین چندین فرآیند را نگه میدارند. این صفحات امکان خواندن و نوشتن مستقیم از حافظه مشترک را فراهم میکنند و همگامسازی فرآیند را بهبود میبخشند.
انواع مختلف صفحات حافظه در مدیریت موثر حافظه در رایانهها نقش دارند. به عنوان یک پارامتر مدیریت حافظه، تعویض حافظه نسبت تعویض بین صفحات پشتیبان فایل و صفحات ناشناس را متعادل میکند.
تعویض حافظه یا Swappiness چیست؟
Swappiness یک پارامتر هسته لینوکس است که کنترل میکند مکانیسم تعویض چقدر فعال است. Swappiness حافظه غیرفعال را از حافظه فیزیکی به حافظه تعویض روی دیسک منتقل میکند. این فرآیند هدف دارد تا تعادل دادهها را در رم حفظ کند و از فضای تعویض زمانی که حافظه فیزیکی به محدودیتهای خود میرسد استفاده کند.
مقدار Swappiness عددی بین ۰ تا ۱۰۰ است. مقادیر پایین نشاندهنده تعویض جزئی و مقادیر بالاتر نشاندهنده تعویض تهاجمی هستند. زمانی که حافظه فیزیکی کم میشود، مقدار تعویض حافظه تصمیم هسته را برای تعویض صفحات هدایت میکند.
نامزدهای ایدهآل برای تعویض، صفحات غیرفعال یا کم استفاده هستند. این فرآیند فضای رم را آزاد میکند و اولویت را به فرآیندهای فعالتر میدهد.
رابطه بین Swappiness و Swap
پارامتر Swappiness بر نحوه رخ دادن تعویض و استفاده از فضای تعویض تاثیر میگذارد. زمانی که فرآیندها از رم خارج میشوند، به Swap منتقل میشوند. این فضا گسترش حافظه فیزیکی است و به آزاد شدن فضای رم کمک میکند.
فضای تعویض یا Swap دارای اندازه مشخصی است و مقدار دادهای را که یک سیستم میتواند تعویض کند تعیین میکند. زمانی که فرآیندها در رم کامل میشوند و حافظه را آزاد میکنند، فرآیندهای تعویض شده به رم باز میگردند. تعویض حافظه اندازه فضای تعویض را کنترل نمیکند بلکه بر محدودیتها و فرکانس تعویض تاثیر میگذارد.
بهترین مقدار Swappiness چیست؟
انتخاب بهترین مقدار Swappiness به عوامل مختلفی بستگی دارد، مانند:
- پیکربندی سیستم
- بار کاری
- حافظه
- نیازمندیهای عملکرد
مقادیر پایینتر تعویض حافظه اولویت را برای نگه داشتن دادهها در رم تعیین میکنند. برای سیستمهایی که حافظه فیزیکی فراوانی دارند، مقدار پایینتری را انتخاب کنید. حداقل کردن فرکانس تعویض، فرکانس عملیات ورودی/خروجی دیسک (disk I/O operations) را کاهش میدهد. در این مورد، مقدار Swappiness پایینتر مفید است.
از سوی دیگر، مقادیر بالاتر تعویض حافظه منجر به تعویض تهاجمیتر میشود. سیستمهایی با حافظه فیزیکی محدود و بارهای کاری که تعویض مکرر برای آنها مفید است، از مقادیر Swappiness بالاتر بهرهمند میشوند. این روش تضمین میکند که فضای رم به طور مکرر برای فرآیندهای فعال آزاد میشود.
از آنجایی که تعویض حافظه نسبت تعویض بین صفحات پشتیبان فایل و صفحات ناشناس را تعیین میکند، این عدد تعادلی بین این دو را تعیین میکند. زمانی که Swappiness حداکثر است، صفحات ناشناس و پشتیبان فایل اولویت تعویض یکسانی دارند، در حالی که زمانی که تعویض حافظه صفر است، صفحات پشتیبان فایل اولویت پیدا میکنند.
جدول زیر مثالهایی از مقادیر تعویض حافظه و تاثیر آنها را ارائه میدهد:
| مقدار Swappiness | تاثیر تعویض حافظه |
| ۰ | مقدار به هسته میگوید تا از تعویض حافظه تا حد امکان اجتناب کند. |
| ۱۰-۵۰ | مقدار به هسته میگوید که در تعویض صفحات حافظه کمی تهاجمی باشد. |
| ۵۰-۱۰۰ | مقدار به هسته میگوید که در تعویض صفحات حافظه کمی بیشتر تهاجمی باشد. |
| >100 | مقادیر بالاتر به هسته میگوید که در تعویض صفحات حافظه بسیار تهاجمی باشد. |
برای تعیین بهترین مقدار تعویض برای تنظیم خاص، عملکرد سیستم، استفاده از حافظه و تغییرات افزایشی را مانیتور کنید. تغییر تعویض حافظه نیاز به راهاندازی مجدد سیستم ندارد.
چگونه مقدار Swappiness را بررسی کنیم؟
دو روش برای بررسی مقدار Swappiness در یک سیستم لینوکس وجود دارد. هر دو روش نیازمند دسترسی به ترمینال هستند و اطلاعات یکسانی در مورد مقدار فعلی تعویض حافظه ارائه میدهند.
روش ۱: بررسی فایل /proc/sys/vm/swappiness
از دستور cat برای بررسی محتوای فایل ` /proc/sys/vm/swappiness` استفاده کنید. دستور زیر را در ترمینال وارد کنید:
#cat /proc/sys/vm/swappiness
خروجی یک عدد بین ۰ تا ۱۰۰ را نشان میدهد.
روش ۲: بررسی پارامتر sysctl
همچنین، میتوانید از دستور sysctl برای بررسی مقدار پارامتر `vm.swappiness` استفاده کنید:
#sysctl vm.swappiness
خروجی به صورت `vm.swappiness=[مقدار]` نمایش داده میشود، که در آن `[مقدار]` عددی بین ۰ تا ۱۰۰ است.
چگونه مقدار Swappiness را تغییر دهیم؟
تغییر مقدار تعویض حافظه در یک سیستم لینوکس نیازمند دسترسی root است. مراحل کار بسته به اینکه تغییر موقت باشد یا مقدار پس از راهاندازی مجدد باقی بماند، متفاوت است.
برای تغییر موقت تعویض حافظه، `vm.swappiness` را با دستور زیر به مقدار دلخواه تنظیم کنید:
#sysctl vm.swappiness=[مقدار]
برای اینکه تغییرات پس از راهاندازی مجدد سیستم باقی بماند، فایل `/etc/sysctl.conf` را با استفاده از یک ویرایشگر متن باز کنید:
#vim /etc/sysctl.conf
مقدار را به صورت زیر اضافه کنید:
#vm.swappiness = [مقدار]
فایل را ذخیره کرده و ویرایشگر را ببندید و با دستور زیر را تغییرات اعمال کنید:
#sysctl -p



