حافظه swap چیست و چگونه ایجاد میشود؟
سیستم عامل برای اینکه بتواند برنامه ای را اجرا کند، باید آن برنامه را به داخل حافظه اصلی (RAM) منتقل کند.
درسیستم عامل های مدرن امروزی در هر لحظه تعداد زیادی برنامه در حال اجرا هستند همچنین تعداد زیادی سرویس نیز در پس زمینه در حال اجرا می باشند. با توجه به این که مقدار حافظه اصلی کامپیوتر محدود است، وقتی تعداد برنامه هایی که قرار است همزمان اجرا شوند زیاد شود، مقدار حافظه لازم جهت اجرای همزمان برنامه ها از کل حافظه اصلی کامپیوتر بیشتر می شود. در این حالت سیستم دچار کمبود حافظه اصلی شده و در نهایت crash می کند.
برای حل این مشکل دو راه وجود دارد:
اول اینکه مقدار حافظه اصلی کامپیوتر را افزایش دهیم. این را حل دارای مشکلاتی است. هزینه حافظه اصلی بسیار گران است و علاوه بر این مقدار حافظه اصلی قابل آدرس دهی دارای محدودیت است(هر چند در معماری های جدید سخت افزاری مقدار حافظه اصلی قابل آدرس دهی بسیار بیشتر شده است).
دوم این که بخشی از فضای دیسک را بصورت مجازی برای استفاده به عنوان حافظه اصلی معرفی کنیم. به این فضا در سیستم عامل های خانواده لینوکس و یونیکس فضای swap گفته می شود. فضای swap را می توان به دو صورت پارتیشن و فایل تعریف کرد. توصیه می شود فضای swap را به صورت پارتیشن تعریف کنید، چون در صورتی که فضای swap به صورت فایل تعریف شود تکه تکه شدن (fragmentation) فایل سرعت و بهره وری عملیات swap را پایین می آورد.
حافظه swap چیست؟
فضای Swap قسمتی از هارد سیستم است که می تواند بصورت پارتیشن یا فایل به کرنل لینوکس معرفی شود. کرنل لینوکس در مواقعی که احتیاج به حافظه RAM بیشتری داشته باشد با استفاده از قابلیت Swapping قسمت های کم استفاده تر درون حافظه RAM را درون فضای Swap کپی می کند و برای خود درون حافظه RAM فضای خالی درست می کند و در صورتی که قسمت حافظه RAM کپی شده درون فضای Swap مورد نیاز باشد عکس عمل قبل اتفاق می افتد، به عبارت دیگر کرنل لینوکس از فضای Swap بعنوان مکمل حافظه RAM استفاده می کند.
استفاده از فضای Swap در لینوکس باعث می شود سیستم هایی که حافظه RAM کمی دارند بتوانند بتوانند برنامه های بیشتر و سنگین تری را اجرا کنند، اما باید به این نکته هم دقت داشت که کپی کردن از حافظه RAM به فضای Swap و بلعکس ممکن است باعث کندی سیستم شود.
اندازه فضای swap چقدر باید باشد؟
سوال اصلی این است که چه مقدار برای فضای swap اختصاص دهیم؟ سیستم عامل های مبتنی بر یونیکس قدیمی تر(مثل Sun OS یا Ultrix) فضای swap دو یا سه برابر حافظه اصلی نیاز داشتند. اما سیستم عامل های جدیدتر (مثل لینوکس) به این مقدار فضای swap نیاز ندارند، هرچند اگر شما برای سیستم تنظیم کنید، سیستم می تواند از این مقدار نیز استفاده کنند. برای تعیین مقدار دقیق فضای swap سه اصل وجود دارد:
– برای یک کامپیوتر دسکتاپ مقدار فضای swap را دو برابر مقدار حافظه اصلی در نظر بگیرید. این امر به شما اجازه می دهد تا همزمان تعداد زیادی برنامه را اجرا کنید. و معمولا چون تعداد زیادی از برنامه ها در حالت انتظار هستند و کاری انجام نمی دهند، سیستم برنامه های بلا استفاده را به فضای swap انتقال می دهد و همیشه برای برنامه های فعال حافظه اصلی کافی در دسترس خواهد بود.
– برای یک کامپیوتر سرور (server) مقدار فضای swap را کمتر از مقدار حافظه اصلی (تقریبا نصف) در نظر بگیرید تا حاشیه اطمینانی برای سیستم در صورت نیاز به فضای swap وجود داشته باشد. ولی باید بطور پیوسته مقدار استفاده سیستم از فضای swap بررسی شود و در صورت استفاده زیاد سیستم از فضای swap، که به معنی کمبود حافظه اصلی است، حافظه اصلی سیستم را ارتقا دهید.
– برای کامپیوترهای قدیمی تر با حافظه اصلی 128 مگابایت یا کمتر حداکثر مقدار فضای swap را که می توانید کنار بگذارید، حتی تا 1 گیگابایت.
نحوه ایجاد حافظه swap
معقول نیست که سیستم شما بیش از یک فضای swap داشته باشد. برای بررسی اینکه آیا سیستم شما این فضا را دارد می توانید از دستور زیر را استفاده کنید:
$ sudo swapon -s
or
$ sudo swapon –show
اگر این دستور به شما خروجی نداد به این معناست ک سیستم شما در حال حاضر این فضا را ندارد. در غیر این صورت اگه خروچی مانند زیر داشت که این فضا قبلا ایجاد شده است.
خوب برای ایجاد یک فضای swap میشه از یک پارتیشن استفاده کرد. ممکن است که سیستم شما پارتیشن جدایی نداشته باشد و یا شاید برایتان سحت باشد که یک پارتیشن بسازید برای همین میشه از یک فایل استفاده کرد و اونو به شکل یک پارتیشن به سیستم معرفی کنیم
در این مثال، من یک فضای swap به حجم یک گیگ را ایجاد و فعال میکنم . شما می تونین بزرگتر ایجاد کنین فقط لازمه که مقداری که مدنظر دارین رو با 1G جایگزین کنید.
$ sudo fallocate -l 1G /swapfile
اگر این دستور به شما خروجی ارور داد که مثلا fallocate نصب نیست یا fallocate failed: Operation not supported میتوانید به جای این دستور از ابزار dd استفاده کنید.
در این صورت دستور به شکل زیر می شود
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
فقط یوزر روت حق دسترسی به این فایل را باید داشته باشد لذا حق دسترسی این فایل را اصلاح می کنیم
$ sudo chmod 600 /swapfile
از ابزار mkswap برای ساخت یک فضای swap از یک فایل در لینوکس استفاده می کنیم:
$ sudo mkswap /swapfile
برای فعال کردن فضای swap از دستور زیر استفاده کنید
$ sudo swapon /swapfile
برای دایمی شدن تغییرات خط زیر را وارد فایل etc/fstab/ می کنیم
$ sudo nano /etc/fstab
/swapfile swap swap defaults 0 0
برای چک کردن می توانید از یکی از دستورات زیر استفاده کنید
$ sudo swapon -s
$ sudo swapon -s
$ free
$ vmstat
تنظیم مقدار swappiness
Swappiness یک ویژگی هسته لینوکس است که مشخص می کند که چقدر سیستم از فضای swap استفاده کند.
Swappiness می تواند یک مقدار بین 0 تا 100 داشته باشد. مقدار کم باعث می شود که کرنل کمتر از این فضا استفاده کند و بیشتر به رم متکی باشد، در حالی که یک مقدار بالاتر باعث می شود که کرنل فضای swap را به شدت مورد استفاده قرار دهد.
مقدار swappiness به طور پیش فرض 60 است. شما می توانید مقدار swappiness فعلی را با استفاده از دستور cat چک کنید:
$ cat /proc/sys/vm/swappiness
برای تغییر این مقدار به طور دایم می توانید خط زیر را در انتهای فایل etc/sysctl.conf/ وارد کنید
$ sudo nano /etc/sysctl.conf
vm.swappiness=10
امیدوارم آموزش مفید و کاملی بوده باشد.
منبع: https://www.cyberciti.biz/faq/linux-add-a-swap-file-howto/