تاريخ النشر: 2022-03-31
يتم استخدام مساحة المبادلة (Swap space ) عندما يقرر نظام التشغيل الخاص بك أنه يحتاج إلى المزيد من الذاكرة الفعلية RAM (Random Access Memory ) للعمليات النشطة وأن حجم الذاكرة الفعلية المتاحة غير المستخدمة غير كافٍ. عند حدوث ذلك ، يتم نقل الصفحات غير النشطة(inactive pages) من الذاكرة الفعلية إلى مساحة المبادلة ، مما يؤدي إلى تحرير هذه الذاكرة الفعلية لاستخدامات أخرى. ستلاحظ أن وقت الوصول للمبادلة يكون أبطأ ، اعتمادًا على سرعة محرك الأقراص الثابتة (HDD أو SSD ) .
لا يجب أن تعتبر مساحة المبادلة بديلاً كاملاً للذاكرة الفعلية. يمكن أن تكون مساحة التبديل عبارة عن قسم مخصص للتبديل (swap partition) ، أو ملف مبادلة swap file ، أو مجموعة من أقسام المبادلة وملف (ملفات) المبادلة.
سنشرح في هذا المقال كيفية إضافة مساحة المبادلة على شكل ملف مبادلة على نظام تشغيل Ubuntu 20.04.
بشكل عام ، يعتمد حجم ملف المبادلة على مقدار ذاكرة الوصول العشوائي التي يمتلكها نظامك ، وماإذا كنت تود استعمال خاصية الإسبات أو لا.
تقوم ميزة الإسبات Hibernation بكتابة محتويات ذاكرة الوصول العشوائي إلى قسم المبادلة قبل إيقاف تشغيل الجهاز. لذلك ، يجب أن يكون قسم المبادلة على الأقل كبيرًا مثل حجم ذاكرة الوصول العشوائي. على الرغم من أن أحدث إصدارات Ubuntu لا تدعم وضع الإسبات OOTB (Out Of The Box ) ، يمكنك تفعيل نظامك للسماح بالإسبات. في كلا البديلين (PM-UTILS أو SYSTEMD)، يمكنك استخدام قسم مبادلة أو ملف مبادلة.
الجدول التالي يوضح أهم التوصيات التي يوصى باتباعها في اختيار الحجم الصحيح لملف المبادلة:
حجم ذاكرة الوصول العشوائي (GB) RAM | من دون خاصية الإسبات | مع تدعيم خاصية الإسبات | القيمة القصوى لملف المبادلة |
---|---|---|---|
1 | 1 | 2 | 2 |
2 | 1 | 3 | 4 |
4 | 2 | 6 | 8 |
8 | 3 | 11 | 16 |
12 | 3 | 15 | 24 |
16 | 4 | 20 | 32 |
24 | 5 | 29 | 48 |
32 | 6 | 38 | 64 |
64 | 8 | 72 | 128 |
قبل أن نبدأ ، يمكننا التحقق مما إذا كان النظام به مساحة تبديل متاحة بالفعل. من الممكن أن يكون لديك ملفات مبادلة متعددة أو أقسام مبادلة ، ولكن عادة ما يكفي واحد.
يمكننا معرفة ما إذا كان النظام يحتوي على تبادل مهيأ عن طريق كتابة:
sudo swapon -show
إذا لم يقوم الأمر باسترداد أي نتائج ، فهذا يعني أن نظامك ليس به مساحة تبديل متاحة حاليًا.
يمكنك التحقق من عدم وجود مساحة تبديل نشطة باستخدام الأداة free:
free -h
total used free shared buff/cache available
Mem: 11Gi 2.3Gi 7.2Gi 74Mi 2.0Gi 9.0Gi
Swap: 0B 0B 0B
كما ترى في سطر Swap الخاص بالمخرجات ، لا يوجد مساحة تبديل نشطة على النظام.
لإضافة مساحة مبادلة على أكمل الخطوات أدناه :
أولاً ، قم بإنشاء ملف باسم swapfile على مستوى الجذر (/) بحجم 2G (عدل القيمة حسب احتياجك) والذي سيتم استخدامه كمساحة تبديل :
sudo fallocate -l 2G /swapfile
يمكن التحقق:
ls -lh /swapfile
-rw-r--r-- 1 root root 2.0G Mar 31 22:12 /swapfile
اضبط أذونات ( permissions) الملف على القيمة 600 لمنع المستخدمين العاديين من كتابة وقراءة الملف:
sudo chmod 600 /swapfile
تحقق من تغيير الأذونات عن طريق كتابة الأمر:
ls -lh /swapfile
-rw-r--r-- 1 root root 2.0G Mar 31 22:12 /swapfile
يمكننا الآن تحديد الملف كمساحة مبادلة عن طريق كتابة:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=5d1c6830-cecf-4634-98d1-79e5f47eb858
قم بتنشيط ملف المبادلة عن طريق تشغيل الأمر التالي:
sudo swapon /swapfile
لجعل مساحة المبادلة مفعلة بشكل ثابت ونهائي ، افتح ملف etc/fstab/ :
sudo vim /etc/fstab
وقم بإضافة السطر التالي:
/swapfile swap swap defaults 0 0
أو مباشرة باستعمال الأمر التالي:
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
تحقق من أن المبادلة نشطة باستخدام إما swapon أو الأمر free ، كما هو موضح أدناه:
sudo swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
sudo free -h
total used free shared buff/cache available
Mem: 11Gi 4.3Gi 4.2Gi 86Mi 3.0Gi 6.9Gi
Swap: 2.0Gi 0B 2.0Gi
المبادلة (Swappiness ) هي خاصية نواة لينوكس ( Linux kernel ) التي تحدد عدد المرات التي سيستخدم فيها النظام مساحة المبادلة. يمكن أن يكون لها قيمة بين 0 و 100. القيمة المنخفضة ستجعل النواة تحاول تجنب المبادلة كلما أمكن ذلك والإعتماد أكثر على ذاكرة الوصول العشوائي ، بينما القيمة الأعلى ستجعل النواة تستخدم مساحة المبادلة بشكل أكثر قوة وتخفيف الضغط قليلا على ذاكرة الوصول العشوائي .
في Ubuntu ، يتم تعيين المبادلة الافتراضية على القيمة 60. يمكنك التحقق من القيمة الحالية عن طريق كتابة الأمر التالي:
cat /proc/sys/vm/swappiness
60
على الرغم من أن قيمة المبادلة 60 مناسبة لمعظم أنظمة Linux الموجهة للإستعمال الشخصي، فقد تحتاج إلى تعيين قيمة أقل لخوادم الإنتاج (production servers ) .
على سبيل المثال ، لتعيين قيمة المبادلة على 10 ، قم بتشغيل:
sudo sysctl vm.swappiness=10
vm.swappiness = 10
لجعل هذه المعلمة ثابتة عبر عمليات إعادة التشغيل التمهيد ، قم بإلحاق السطر "vm.swappiness=10" بملف etc/sysctl.conf/ عن طريق الأمر التالي مباشرة :
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
تعتمد قيمة المبادلة المثلى على حجم عمل النظام ( system workload ) وكيفية استخدام الذاكرة. يجب عليك ضبط هذه المعلمة بزيادات صغيرة للعثور على القيمة المثلى.
نلاحظ مثلا في هذه الصورة وفي المرحلة التي ازداد فيها استعمال الذاكرة المحلية ( اللون الأحمر) بوتيرة أكبر ، تم الاستعانة بذاكرة المبادلة (اللون الأخضر ) لتخفيف الضغط والاستجابة لمتطلبات البرامج:
كما نلاحظ أنه لم يتم استعمال الا حوالي 25% (GB 1 ) من مساحة المبادلة المحددة ب: 4 GB وهذا راجع أساسا الى ضبط نسبة استعمال ذاكرة المبادلة على القيمة الدنيا كما ذكرنا آنفا، ما جعل النواة تحاول تجنب المبادلة كلما أمكن
ونفس الأمر في حالة انتهاء الحمل على ذاكرة الوصول العشوائي، يتم تلقائيا تحرير ذاكرة المبادلة كما هو موضح في هذه الصورة:
لإلغاء تنشيط ملف المبادلة وحذفه ، يمكن اتباع الخطوات التالية:
أولاً ، قم بإلغاء تنشيط مساحة المبادلة:
sudo swapoff -v /swapfile
بعد ذلك ، قم بإزالة القيمة “swapfile swap swap defaults 0 0/” من الملف “etc/fstab/” .
sudo vim /etc/fstab
أو بإضافة رمز التجزئة (#) أول السطر لكي تصبح غير نافذة ابتداءا من التشغيل القادم:
#/swapfile swap swap defaults 0 0
أخيرًا ، قم بإزالة ملف swapfile باستخدام الأمر rm:
sudo rm /swapfile
وبهذا نكون أوضحنا في هذا المقال كيفية إنشاء ملف مبادلة وتنشيط وتكوين مساحة التبديل على نظام Ubuntu 20.04 .