استراتژی معاملاتی

فضای SWAP

حافظه Swap چیست و چگونه آن را در CentOS اضافه کنیم؟

سیستم عامل برای اینکه بتواند برنامه ای را اجرا کند، باید آن برنامه را به داخل حافظه اصلی (RAM) منتقل کند. درسیستم عامل های مدرن امروزی در هر لحظه تعداد زیادی برنامه در حال اجرا هستند همچنین تعداد زیادی سرویس نیز در پس زمینه در حال اجرا می باشند. با توجه به این که مقدار حافظه اصلی کامپیوتر محدود است، وقتی تعداد برنامه هایی که قرار است همزمان اجرا شوند زیاد شود، مقدار حافظه لازم جهت اجرای همزمان برنامه ها از کل حافظه اصلی کامپیوتر بیشتر می شود. در این حالت سیستم دچار کمبود حافظه اصلی شده و در نهایت crash می کند.

برای حل این مشکل دو راه وجود دارد:
اول اینکه مقدار حافظه اصلی کامپیوتر را افزایش دهیم. این را حل دارای مشکلاتی است. هزینه حافظه اصلی بسیار گران است و علاوه بر این مقدار حافظه اصلی قابل آدرس دهی دارای محدودیت است
دوم این که بخشی از فضای دیسک را بصورت مجازی برای استفاده به عنوان حافظه اصلی معرفی کنیم. به این فضا در سیستم عامل های خانواده لینوکس و یونیکس فضای swap گفته می شود. فضای swap را می توان به دو صورت پارتیشن و فایل تعریف کرد.

سیستم عامل چگونه از فضای swap استفاده می کند؟

سیستم عامل حافظه اصلی را به بخش هایی تقسیم می کند، که page نامیده می شوند. هر برنامه در حال اجرا یک یا چندین page را در حافظه اصلی اشغال می کند. تصور کنید که تمام حافظه اصلی استفاده شده باشد و برنامه دیگری بخواهد اجرا شود، در این وضعیت سیستم عامل page هایی که کمتر استفاده می شوند را از داخل حافظه اصلی به فضای swap انتقال می دهد تا برای اجرا برنامه یا برنامه های جدید فضای خالی ایجاد کند. به این کار در اصطلاح swapping یا paging گفته می شد.

اما استفاده از فضای swap معایبی هم دارد. زمان دسترسی حافظه اصلی در حد نانو فضای SWAP ثانیه است، در حالی که زمان دسترسی در هارد دیسک ها در حد میلی ثانیه می باشد. این بدین معنی است که سرعت هارد دیسک دهها هزار برابر کندتر از حافظه اصلی است. در نتیجه استفاده از فضای swap به جای حافظه اصلی به معنی کندتر شدن سیستم است. حال اگر مقدار حافظه اصلی کامپیوتر خیلی کم باشد، تمام وقت و قدرت پردازش سیستم به انتقال page ها بین فضای swap و حافظه اصلی تلف می شود. در این حالت تنها گزینه اضافه کردن حافظه اصلی می باشد.

اندازه فضای swap چقدر باید باشد؟

برای یک سرور (server) مقدار فضای swap را کمتر از مقدار حافظه اصلی (تقریبا نصف) در نظر بگیرید تا حاشیه اطمینانی برای سیستم در صورت نیاز به فضای swap وجود داشته باشد. ولی باید بطور پیوسته مقدار استفاده سیستم از فضای swap بررسی شود و در صورت استفاده زیاد سیستم از فضای swap، که به معنی کمبود حافظه اصلی است، حافظه اصلی سیستم را ارتقا دهید.

چگونه حافظه Swap را به CentOS اضافه کنیم؟

در SSH سرور خود دستور زیر را وارد کنید:

به وسیله این دستور میتوانید ببینید که از قبل حافظه Swap وجود دارد در سرورتان یا خیر.در صورتی که نتیجه ای مشاهده نشد بمعنی نبودن فایل swap است.

اکنون با دستور زیر میتوانید فایل Swap را در سرور خود ایجاد کنید:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

توجه: “of=/swapfile” نام فایل swpa است و میتواند هرنام دلخواه دیگری باشد.

sudo mkswap /swapfile

Setting up swapspace version 1, size = 536866 kB

و در نهایت فعال کردن Swap:

sudo swapon /swapfile

اکنون دوباره با دستور زیر میتوانید اطلاعات Swap ساخته شده را مشاهده کنید:

swapon -s
Filename Type Size Used Priority
/swapfile file 524280 0 -1

برای دائمی کردن فایل Swap باید فایل fstab را به صورت زیر ویرایش کنیم:

sudo nano /etc/fstab

و خط زیر را به ان اضافه و ذخیره کنید:

/swapfile swap swap defaults 0 0

توجه: بجای swapfile نامی که برای swap انتخاب کرده بودید را جایگزین کنید.

اکنون فضای SWAP با دو دستور زیر دسترسی های فایل swap را تغییر دهید:

chown root:root /swapfile
chmod 0600 /swapfile

با تنظیم Swappiness به کرنل سیستم میگوییم که در چه مواقعی از Swap ساخته شده استفاده کند که با عددی مابین ۰ و ۱۰۰ تنظیم میشود. – که بهطور پیشفرض ۶۰ میباشد – .

وقتی شما Swappiness را روی ۱۰۰ تنظیم میکنید به این معنی است که سیستم عامل معمولا(۹۰% مواقع یا بیشتر) از حافظه Swap استفاده کند.

همچنین زمانی که آن را فضای SWAP روی ۰ تنظیم میکنید به این معنی است که سیستم عامل تنها در مواقع ضروری و موردنیاز از حافظه Swap استفاده کند.

برای مشاهده مقدار Swappiness سیستم فضای SWAP عامل خود دستور زیر را وارد کنید (که پیشفرض مقدار ۶۰ میباشد.):

به منظور تغییر این مقدار دستور زیر را وارد کنید:

توجه: بجای XX مقدار مورد نظر را برای Swappiness وارد کنید.

حال در صورتی که دوباره دستور زیر را وارد کنید , مشاهده میکنید که به مقدار مورد نظر تغییر کرده است:

حال برای اینکه Swappiness تنظیم شده در هنگام ReBoot نیز همین مقدار باشد میابیست فایل sysctl.conf را به صورت زیر ویرایش کنیم:

sudo nano /etc/sysctl.conf

# Search for the vm.swappiness setting. Uncomment and change it as necessary.
vm.swappiness=XX

حافظه SWAP چیست؟ معرفی کاربرد SWAP Partition لینوکس به زبان ساده

در اکثر فرآیند های نصب سیستم عامل لینوکس حتما مشاهده کرده اید که سیستم عامل به شما پیشنهاد می کند که یک پارتیشن به نام SWAP Partition ایجاد کنید. این موضوع شاید برای کاربران ویندوزی که به تازگی با لینوکس آشنا شده اند کمی عجیب و غریب باشد زیرا آنها عادت کرده اند که یک پارتیشن برای سیستم عامل ویندوز ایجاد کنند و از آن استفاده کنند. اما شاید جالب باشد بدانید که سیستم عامل ویندوز هم چنین پارتیشنی دارد اما نه اسم آن SWAP است و نه به عنوان یک پارتیشن شناخته می شود.

  1. جلوگیری از Overflow شدن حافظه RAM سیستم عامل
  2. اولویت بندی یا Prioritization
  3. استفاده از قابلیت Hibernate در سیستم عامل لینوکس

چیزی که در لینوکس ما به عنوان SWAP Partition می شناسیم در سیستم عامل ویندوز به عنوان Page File یا Virtual Memory معروف است. قبلا در خصوص اینکه Virtual Memory در ویندوز چیست و چگونه ایجاد می شود در انجمن تخصصی فناوری اطلاعات ایران توضیحاتی داده ایم اما در واقع این ویندوز است که از لینوکس ساختار SWAP را الگو برداری کرده است و در سیستم عامل خود به نام Virtual Memory معرفی می کند .

بنابراین همان کاری که در ویندوز Virtual Memory انجام می دهد ، SWAP Partition در لینوکس انجام می دهد. اما امروز بحث ما لینوکس است و می خواهیم بدانیم که در سیستم عامل لینوکس کاربرد SWAP Partition چیست و چرا ما به SWAP Partition نیاز داریم و در نهایت چقدر می تواند ظرفیت این پارتیشن باشد ؟ اگر به درستی بتوانید به این سئوالات پاسخ بدهید می توانید کارایی سیستم عامل خود را تا حدود زیادی افزایش دهید.

جلوگیری از Overflow شدن حافظه RAM سیستم عامل

تا به حال حتما به این مشکل خورده اید که سیستم عامل شما دچار کمبود RAM می شود. برای حل فضای SWAP کردن چنین مشکلی می توانیم از SWAP Partition استفاده کنیم ، در واقع SWAP به عنوان یک حافظه مجازی به سیستم عامل معرفی می شود که در صورتیکه ظرفیت RAM سیستم برای پردازش کردن و نگهداری داده ها کافی نبود از این فضا بتواند استفاده کند. هر زمانیکه بر روی سیستم عامل لینوکس حافظه RAM بصورت کامل توسط نرم افزارها پر شود .

هر نرم افزار جدیدی که اجرا شود می تواند همانند RAM از حافظه SWAP یا فضای SWAP ای که معمولا بر روی هارد دیسک سیستم قرار گرفته است استفاده کند. شاید به نظر برسد که این یک راهکار بسیار خوب برای اضافه کردن حافظه RAM سیستم بدون نیاز به خریدن RAM سخت افزاری برای سیستم است ، اما واقعا به این شکل نیست . حافظه RAM به این دلیل به عنوان حافظه اصلی سیستم عنوان می شود که بسیار سریع است و سخت افزار آن بصورت خاصی برای استفاده شدن به عنوان حافظه اصلی طراحی شده اند .

اما حافظه SWAP Partition بر روی هارد دیسک سیستم قرار می گیرد که سرعت هارد دیسک و RAM اصلا قابل مقایسه نیست. هر چند امروزه استفاده از هارد درایو های SSD با سرعت های بسیار زیاد باعث شده است کارایی SWAP Partition نیز تا حدودی افزایش پیدا کند اما به هر حال هیچوقت نمی تواند جایگزین RAM اصلی و سخت افزاری سیستم شود. توجه کنید که با اینکه ما حافظه SWAP را در لینوکس یا Page File های ویندوز مقایسه کردیم اما از لحاظ فنی این دو با هم تفاوتی های زیادی دارند.

اولویت بندی یا Prioritization

SWAP Partition به شما این امکان را می دهد که برخی از آیتم ها را از درون حافظه RAM خود به درون حافظه هارد دیسک خود منتقل کنید تا فضای لازم برای اجرا کردن سایر برنامه های ضروری تر در حافظه RAM باز شود. در واقع آیتم هایی که کمتر توسط CPU مورد دسترسی قرار می گیرند را می توانیم به داخل SWAP Partition منتقل کنیم. زمانیکه صحبت از استفاده کم یا به ندرت از یک آیتم می شود این استفاده به ندرت به فاکتوری به نام swappiness بر می گردد که این فاکتور در SWAP Partition کاملا قابل پیکربندی است.

زمانیکه عدد swappiness برای یک آیتم بالا باشد به معنی این است که آیتم مورد نظر بیشتر مستعد است که در فضای SWAP قرار بگیرد. اگر عدد مربوط به swappiness کم باشد آیتم مورد نظر کمتر احتمال دارد که در فضای SWAP قرار بگیرد. قابلیت swappiness در واقع یک پارامتر کرنل لینوکس است که فرآیند swap کردن برنامه ها بین سیستم و حافظه RAM را مدیریت می کند ، در واقع ارسال و دریافت فایل ها از و به حافظه Cache سیستم نیز بر عهده این قابلیت است.

قابلیت Swappiness می تواند دارای مقدار عددی بین 0 تا 100 باشد . هر چقدر این عدد پایین تر باشد احتمال اینکه swap نشود بیشتر است و هر چقدر این عدد بیشتر باشد احتمال swap شدن آن بالاتر می رود. مقدار پیشفرض برای آیتم های سیستم عامل عدد 60 است و برای بسیاری از سیستم عامل های دسکتاپ در صورتیکه این عدد به 100 تغییر پیدا کند به شدت کارایی سیستم را تحت تاثیر قرار می دهد.

استفاده از قابلیت Hibernate در سیستم عامل لینوکس

یکی از مهمترین و آخرین کاربردهایی که حافظه یا پارتیشن SWAP دارد امکان انتقال فایل های ما از داخل حافظه RAM به داخل هارد دیسک است ، این قابلیت که ما آن را به عنوان Hibernate چه در سیستم عامل لینوکس و چه در سیستم عامل ویندوز می شناسیم این امکان را می دهد که بعد از اینکه اطلاعات از داخل حافظه RAM به داخل SWAP Partition منتقل شدند بلافاصله همه اطلاعات بعد از روشن شدن مجدد سیستم عامل به داخل RAM بازگردانی و سیستم عامل به حالت قبلی خود برگردد. بدون وجود SWAP Partition در لینوکس امکان Hibernate کردن این سیستم عامل وجود ندارد.

فضای swap چیست؟

اگر تاکنون در لینوکس لیست پارتیشن ها را دیده باشید، حتما پارتیشن swap نظر شما را جلب کرده است. swap چیست؟ چه نیازی به وجود swap هست؟ مقدار swap چقدر باید باشد؟ در این مطلب به بررسی فضای swap می پردازیم.

سیستم عامل برای اینکه بتواند برنامه ای را اجرا کند، باید آن برنامه را به داخل حافظه اصلی (RAM) منتقل کند. درسیستم عامل های مدرن امروزی در هر لحظه تعداد زیادی برنامه در حال اجرا هستند همچنین تعداد زیادی سرویس نیز در پس زمینه در حال اجرا می باشند. با توجه به این که مقدار حافظه اصلی کامپیوتر محدود است، وقتی تعداد برنامه هایی که قرار است همزمان اجرا شوند زیاد شود، مقدار حافظه لازم جهت اجرای همزمان برنامه ها از کل حافظه اصلی کامپیوتر بیشتر می شود. در این حالت سیستم دچار کمبود حافظه اصلی شده و در نهایت crash می کند.

برای حل این مشکل دو راه وجود دارد:

  • اول اینکه مقدار حافظه اصلی کامپیوتر را افزایش دهیم. این را حل دارای مشکلاتی است. هزینه حافظه اصلی بسیار گران است و علاوه بر این مقدار حافظه اصلی قابل آدرس دهی دارای محدودیت است(هر چند در معماری های جدید سخت افزاری مقدار حافظه اصلی قابل آدرس دهی بسیار بیشتر شده است).
  • دوم این که بخشی از فضای دیسک را بصورت مجازی برای استفاده به عنوان حافظه اصلی معرفی کنیم. به این فضا در سیستم عامل های خانواده لینوکس و یونیکس فضای swap گفته می شود. فضای swap را می توان به دو صورت پارتیشن و فایل تعریف کرد. توصیه می شود فضای swap را به صورت پارتیشن تعریف کنید، چون در صورتی که فضای swap به صورت فایل تعریف شود تکه تکه شدن (fragmentation) فایل سرعت و بهره وری عملیات swap را پایین می آورد.

سیستم عامل چگونه از فضای swap استفاده می کند؟

سیستم عامل حافظه اصلی را به بخش هایی تقسیم می کند، که page نامیده می شوند. هر برنامه در حال اجرا یک یا چندین page را در حافظه اصلی اشغال می کند. تصور کنید که تمام حافظه اصلی استفاده شده باشد و برنامه دیگری بخواهد اجرا شود، در این وضعیت سیستم عامل page هایی که کمتر استفاده می شوند را از داخل حافظه اصلی به فضای swap انتقال می دهد تا برای اجرا برنامه یا برنامه های جدید فضای خالی ایجاد کند. به این کار در اصطلاح swapping یا paging گفته می شد.

اما استفاده از فضای swap معایبی هم دارد. زمان دسترسی حافظه اصلی در حد نانو ثانیه است، در حالی که زمان دسترسی در هارد دیسک ها در حد میلی ثانیه می باشد. این بدین معنی است که سرعت هارد دیسک دهها هزار برابر کندتر از حافظه اصلی است. در نتیجه استفاده از فضای swap به جای حافظه اصلی به معنی کندتر شدن سیستم است. حال اگر مقدار حافظه اصلی کامپیوتر خیلی کم باشد، تمام وقت و قدرت پردازش سیستم به انتقال page ها بین فضای swap و حافظه اصلی تلف می شود. در این حالت تنها گزینه اضافه کردن حافظه اصلی می باشد.

اندازه فضای swap چقدر باید باشد؟

اگر کامپیوتر دارای حافظه اصلی کافی باشد، لینوکس می تواند بدون هیچ فضای swap به کار خود ادامه دهد. اما اگر حافظه اصلی تمام شود سیستم crash خواهد کرد. به همین دلیل عاقلانه است که فضای swap تعریف شود، مخصوصا با توجه به قیمت ارزان دیسک سخت به نسبت حافظه اصلی.

سوال اصلی این است که چه مقدار برای فضای swap اختصاص دهیم؟ سیستم عامل های مبتنی بر یونیکس قدیمی تر(مثل Sun OS یا Ultrix) فضای swap دو یا سه برابر حافظه اصلی نیاز داشتند. اما سیستم عامل های جدیدتر (مثل لینوکس) به این مقدار فضای swap نیاز ندارند، هرچند اگر شما برای سیستم تنظیم کنید، سیستم می تواند از این مقدار نیز استفاده کنند. برای تعیین مقدار دقیق فضای swap سه اصل وجود دارد:

  1. برای یک کامپیوتر دسکتاپ مقدار فضای swap را دو برابر مقدار حافظه اصلی در نظر بگیرید. این امر به شما اجازه می دهد تا همزمان تعداد زیادی برنامه را اجرا کنید. و معمولا چون تعداد زیادی از برنامه ها در حالت انتظار هستند و کاری انجام نمی دهند، سیستم برنامه های بلا استفاده را به فضای swap انتقال می دهد و همیشه برای برنامه های فعال حافظه اصلی کافی در دسترس خواهد بود.
  2. برای یک کامپیوتر سرور (server) مقدار فضای swap را کمتر از مقدار حافظه اصلی (تقریبا نصف) در نظر بگیرید تا حاشیه اطمینانی برای سیستم در صورت نیاز به فضای swap وجود داشته باشد. ولی باید بطور پیوسته مقدار استفاده سیستم از فضای swap بررسی شود و در صورت استفاده زیاد سیستم از فضای swap، که به معنی کمبود حافظه اصلی است، حافظه اصلی سیستم را ارتقا دهید.
  3. برای کامپیوترهای قدیمی تر با حافظه اصلی 128 مگابایت یا کمتر حداکثر مقدار فضای swap را که می توانید کنار بگذارید، حتی تا 1 گیگابایت.

این اواخر تلاش هایی برای استفاده از حافظه روی کارت گرافیکی به عنوان فضای swap انجام شده است. بدلیل سرعت بالای حافظه روی کارت گرافیکی، این روش سرعت سیستم را بسیار افزایش می دهد. ولی این روش بی خطر نیست و ممکن است تداخل دسترسی درایور کارت گرافیک و سیستم مدیریت فضای swap به یک آدرس حافظه، باعث crash سیستم شود. در کل فضای SWAP هیچ روشی برای محدود کردن فضای حافظه روی کارت گرافیکی برای درایور گرافیک وجود ندارد، به همین دلیل بنظر می رسد این روش فعلا خیلی کاربردی نیست.

مقالات مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برو به دکمه بالا