آشنایی با حافظه مجازی در لینوکس و نحوه مدیریت آن
حافظه مجازی یکی از مواردی است که زیربنای سیستم عامل های مدرن است، اما معمولاً تا زمانی که مشکلی نداشته باشید، واقعاً به آن فکر نمی کنید. توزیعهای لینوکس از شما میخواهند که فضای حافظه مجازی خود (پارتیشنهای تعویض) را در حین نصب تنظیم کنید، اما بیشتر مبتدیان از مفید بودن آن آگاه نیستند. در این مقاله تمام چیزهای مربوط به حافظه مجازی در لینوکس را به شما نشان خواهیم داد.
حافظه مجازی چیست؟
حافظه مجازی راهی برای نمایش حافظه شما است که از حافظه فیزیکی دستگاه شما انتزاع شده است. هم از رم و هم از فضای ذخیره سازی شما استفاده می کند، خواه روی هارد دیسک سنتی یا SSD باشد. در لینوکس این کار در سطح هسته و سخت افزار انجام می شود. پردازنده دارای یک قطعه سخت افزاری به نام Memory Management Unit (MMU) است که آدرس های حافظه فیزیکی را به مجازی تبدیل می کند.
این آدرس ها مستقل از محل قرارگیری فیزیکی آنها در دستگاه هستند. این فضاهای آدرس به عنوان “صفحه” شناخته می شوند و می توانند در رم یا در هارد دیسک یا SSD شما باشند. سیستم عامل این آدرس ها را به عنوان یک مجموعه بزرگ از حافظه می بیند که به عنوان “فضای آدرس” شناخته می شود. حافظه مجازی از این واقعیت استفاده میکند که تمام حافظههایی که در تئوری استفاده شده، همیشه به کار گرفته نمیشوند.
اپلیکیشن های موجود در حافظه به صفحات تقسیم می شوند و قسمت هایی که هسته آن را غیرضروری می داند “تعویض می شوند” یا به هارد دیسک منتقل می شوند. در صورت نیاز، می توان آنها را “معاوضه” کرد یا به رم بازگرداند. فضای مورد استفاده برای حافظه مجازی در یک درایو به عنوان “backing store” یا “swap space” شناخته می شود. در دنیای ویندوز، معمولاً به عنوان یک فایل پیاده سازی می شود که به عنوان “فایل swap” شناخته می شود. انجام این کار در لینوکس نیز امکان پذیر است، اما استفاده از پارتیشن دیسک اختصاصی بسیار رایج تر است.
فایلهای Swap در لینوکس معمولاً برای سیستمهای حداقلی یا تعبیهشده رزرو میشوند، و معمول است که سیستمهای دوم بدون حافظه مجازی به طور کامل اجرا شوند، زیرا سیستمعاملهای تعبیهشده باید کوچک باشند. نتیجه حافظه مجازی این است که میتوان برنامههای بزرگ را با استفاده از حافظه بیشتر از رم فیزیکی در دستگاه خود اجرا کرد، مشابه اینکه کارت اعتباری به شما امکان میدهد با پولی که در حساب بانکی خود دارید، خریدهای بزرگ انجام دهید. مانند کارت اعتباری، حافظه مجازی زمانی مفید است که به آن نیاز دارید، اما نمی خواهید استفاده از آن را بیش از حد افزایش دهید.
حافظه مجازی همچنین به توسعه دهندگان این امکان را می دهد که بدون نیاز به دانستن نحوه سازماندهی حافظه رایانه برنامه های کاربردی ایجاد کنند. نقطه ضعف اصلی حافظه مجازی از لحاظ تاریخی، کندتر بودن هارد دیسک ها نسبت به رم بوده است. اگر دستگاهی حافظه رم کافی نداشته باشد، سیستم میتواند به طور بیپایان صفحات را به داخل و خارج کند، فرآیندی که به نام «thrashing» شناخته میشود. این موضوع در رایانههای مدرن با حافظه رم بیشتر و SSDهای سریعتر که جایگزین هارد دیسکهای مکانیکی شدهاند کمتر وجود دارد، اما هنوز هم باید از آن آگاه بود.
پارتیشن های Swap لینوکس
همانطور که قبلا ذکر شد، روش معمول برای تنظیم حافظه مجازی در لینوکس، استفاده از یک پارتیشن دیسک اختصاصی است. ابزار نصب سخت افزار شما را بررسی می کند و یک طرح پارتیشن بندی که شامل یک پارتیشن swap است پیشنهاد می کند.
همچنین می توانید پارتیشن های swap را پس از نصب اضافه کنید. اگر می خواهید یک پارتیشن جدید به درایو موجود اضافه کنید، باید از یک ابزار پارتیشن بندی غیرمخرب مانند GParted استفاده کنید. مطمئن شوید که “Swap لینوکس” را به عنوان سیستم فایل برای پارتیشن خود انتخاب کرده اید.
قبل از پارتیشن بندی مجدد درایو، از اطلاعات مهم نسخه پشتیبان تهیه کنید.
پس از ایجاد پارتیشن، از دستور mkswap برای فرمت پارتیشن خود استفاده کنید.
sudo mkswap /dev/sdX
اکنون باید /etc/fstab خود را به عنوان root ویرایش کنید تا پارتیشن swap خود را اضافه کنید. این خط که به فایل اضافه شده، یک پارتیشن swap راه اندازی می کند تا در زمان بوت نصب شود:
/dev/sdX none swap defaults 0 0
اکنون از دستور swapon برای فعال کردن فضای swap جدید خود استفاده کنید، جایی که sdX نام پارتیشن swap شما است:
sudo swapon /dev/sdX
استفاده از Swap Files در لینوکس
تنظیم یک فایل swap در لینوکس با استفاده از خط فرمان آسان است. اگر نمیخواهید درایو خود را مجدداً پارتیشن بندی کنید یا /etc/fstab را ویرایش کنید، ممکن است بخواهید این کار را انجام دهید. یک روش استفاده از فالوکیت است:
به عنوان مثال، برای ایجاد یک فایل سواپ 2 گیگابایتی:
sudo fallocate -l 2G /path/to/swapfile
به عنوان جایگزین، می توانید از دستور dd برای ایجاد فایل swap استفاده کنید.
sudo dd if=/dev/zero of=/path/to/swapfile bs=1024 count=2048
دستگاه /dev/zero دستگاه خاصی است که “0” را خروجی می دهد. کاری که این دستور dd انجام می دهد این است که یک فایل بلوک دو گیگابایتی خالی با استفاده از بلوک های 1024 کیلوبایتی مناسب برای استفاده به عنوان فضای سواپ ایجاد می کند. سپس می توانید از دستورات mkswap و swapon با یک فایل swap همانطور که با یک پارتیشن swap استفاده می کنید استفاده کنید:
sudo mkswap /path/to/swapfile sudo swapon /path/to/swapfile
ممکن است تعجب کنید که چه زمانی باید از یک فایل swap یا یک پارتیشن اختصاصی برای فضای swap خود استفاده کنید. انتخاب آسان است: در بیشتر شرایط، شما باید از یک پارتیشن استفاده کنید. این بهترین انتخاب برای دسکتاپ لینوکس یا سرور است. طرح پارتیشن پیشنهادی توسط نصب کننده معمولاً روی دسکتاپ لینوکس تک کاربره مناسب است.
اگر لینوکس را در یک ماشین مجازی، روی یک سیستم جاسازی شده کوچک اجرا می کنید، یا فقط نمی خواهید سیستم لینوکس موجود خود را مجدداً پارتیشن بندی کنید، ممکن است بخواهید از فایل swap استفاده کنید.
فضای سواپ چقدر است؟
برای سالیان متمادی، توصیه استاندارد برای میزان فضای سواپ مورد نیاز دو برابر رم فیزیکی است. با درایوهای بزرگ و مقدار حافظه ای که حتی ارزان ترین رایانه ها نیز با آن ها عرضه می شوند، این قانون ممکن است زیر سوال برود. در بسیاری از سیستم ها، اگر بالا یا htop را بررسی کنید، حتی ممکن است متوجه شوید که حتی اگر سیستم خود را به این ترتیب تنظیم کنید، فضای سواپ شما اصلا استفاده نمی شود.
با این حال، دو برابر حافظه فیزیکی یک نقطه شروع خوب و یک بیمه است اگر تقاضاهای بیشتری از حافظه داشته باشید. در صورت لزوم می توانید تغییراتی در سیستم خود ایجاد کنید. اگر سیستم شما از تمام رم شما استفاده می کند، ممکن است کامپیوتر هنگام استفاده از حافظه مجازی با مشکلات عملکردی مواجه شود. رایانه میتواند به جابجایی در داخل و خارج ادامه دهد، فرآیندی که به نام thrashing شناخته میشود و به نظر میرسد که پاسخگو نیست. اگر هنوز یک هارد دیسک سنتی دارید، اغلب می توانید به طور مداوم به آن دسترسی پیدا کنید.
این روزها موضوع بسیار کمتری است زیرا میزان رم حتی در ارزان ترین رایانه بیش از حد کافی است، به علاوه سرعت SSD ها بسیار سریعتر از هارد دیسک های قدیمی است. ساده ترین راه برای رفع این مشکل این است که فقط رم بیشتری به دستگاه خود اضافه کنید. اگر این امکان وجود ندارد، ممکن است سعی کنید “تغییر” هسته لینوکس را تنظیم کنید.
عدد swappiness تعیین می کند که هسته چقدر در حافظه مجازی فرو می رود. از 0 تا 100 متغیر است. تنظیم آن روی 0 به این معنی است که لینوکس به هیچ وجه تعویض نمی شود، در حالی که در 100، در هر فرصتی تعویض می شود. پیش فرض در اکثر سیستم ها 60 است.
برای تغییر موقت swappiness، از دستور sysctl استفاده کنید:
sudo sysctl vm.swappiness=20
“20” در آن دستور تا زمانی که راه اندازی مجدد نکنید، شماره تعویض خواهد بود. برای تغییر دائمی آن، فایل /etc/sysctl.conf را به عنوان root ویرایش کنید و خط “vm.swappiness=[swappiness number]” را قرار دهید، جایی که “[swappiness number]” شماره تعویض مورد نظر شما است. تا زمانی که بتوانید رم بیشتری نصب کنید، این یک توقف خواهد بود.