تخصيص النواة (Kernel Tuning) عبر ملفات /proc و /sys


أهلاً يا شباب! اليوم راح نتكلم عن شيء مهم جداً لأي مهندس أنظمة Linux: تخصيص النواة (Kernel Tuning). لا تخافوا، الموضوع أبسط مما تتخيلون، وراح نركز على أداتين أساسيتين: ملفات /proc و /sys.

وش هي /proc و /sys؟

تخيل أن نواة Linux عندها واجهة برمجية (API) تقدر تتفاعل معاها. ملفات /proc و /sys هي جزء كبير من هالواجهة. هي أنظمة ملفات افتراضية (pseudo-filesystems)، يعني ما هي ملفات حقيقية على القرص الصلب، بل هي واجهة لتغيير أو قراءة معلومات حية من النواة مباشرة.

ملاحظة: كثير من المطورين يسمونها "نافذة على النواة" أو "واجهة المستخدم للنواة".

البداية مع /proc/sys: كنوز الضبط

الجزء الأكثر استخداماً لتخصيص النواة هو /proc/sys. هنا تجد مجموعة كبيرة من المتغيرات اللي تتحكم في سلوك النواة في جوانب مختلفة مثل الشبكات، الذاكرة، إدارة الملفات، وغيرها.

كيف نقرأ قيمة؟

بسيطة جداً، استخدم cat:

cat /proc/sys/net/ipv4/ip_forward

هذا الأمر راح يعرض لك قيمة ip_forward. إذا كانت 1، يعني توجيه IP شغال. إذا 0، يعني لا.

كيف نغير قيمة (مؤقتاً)؟

استخدم echo مع إعادة توجيه (>):

echo 1 > /proc/sys/net/ipv4/ip_forward

هذا الأمر راح يشغل توجيه IP. لكن انتبه، التغيير هذا مؤقت! يعني إذا سويت إعادة تشغيل للنظام، راح يرجع للوضع الافتراضي.

أمثلة على متغيرات مهمة في /proc/sys:

  • net.ipv4.ip_forward: هل النظام يشتغل كموجه (router)؟ (0 أو 1)
  • net.ipv4.tcp_syn_retries: كم مرة يحاول النظام إعادة إرسال حزم SYN؟
  • vm.swappiness: مدى "حب" النواة لاستخدام الـ swap. (0-100، 0 يعني أقل استخدام، 100 يعني أكثر استخدام)
  • fs.file-max: أقصى عدد للملفات المفتوحة على مستوى النظام.
  • kernel.pid_max: أقصى قيمة لمعرفات العمليات (PIDs).

كيف نخلي التغييرات دائمة؟

هنا يجي دور ملف /etc/sysctl.conf أو ملفات داخل /etc/sysctl.d/. ببساطة، تحط المتغيرات اللي تبيها بهذا الشكل:

net.ipv4.ip_forward = 1
vm.swappiness = 10
fs.file-max = 65536

بعد ما تعدل الملف، طبق التغييرات باستخدام sysctl -p:

sysctl -p

هذا الأمر راح يقرأ الملف ويطبق كل الإعدادات اللي فيه.

نظرة على /sys: معلومات الأجهزة والنواة

ملفات /sys مختلفة عن /proc/sys. هي توفر واجهة أكثر تنظيماً للأجهزة المتصلة بالنظام (مثل كروت الشبكة، أقراص التخزين، USB) ولإعدادات النواة المتعلقة بالأجهزة. هي مبنية على مفهوم "Kobject" في النواة.

أمثلة على استخدام /sys:

مثلاً، لو تبي تشوف سرعة مروحة معينة أو درجة حرارة معالج، ممكن تلقاها هنا (طبعاً يختلف المسار حسب الجهاز):

cat /sys/class/hwmon/hwmon0/temp1_input

أو لو تبي تشوف حالة جهاز USB معين:

ls /sys/bus/usb/devices/

تقدر حتى تغير بعض الإعدادات المتعلقة بالأجهزة. مثلاً، تفعيل أو تعطيل كرت شبكة (مع الأخذ في الاعتبار أن بعض الإعدادات قد تحتاج أدوات أعلى مستوى مثل ip link):

echo 'disable' > /sys/class/net/eth0/device/power/control

تحذير: التعديل المباشر في /sys ممكن يكون خطير إذا ما كنت تعرف وش تسوي بالضبط. استخدمه بحذر.

الفرق الجوهري بين /proc/sys و /sys

  • /proc/sys: للتحكم في سلوك النواة العام (networking, memory, filesystem limits). التغييرات هنا عادةً ما تكون على مستوى "السياسة" أو "السلوك".
  • /sys: للتحكم في الأجهزة المتصلة بالنظام، وإظهار معلومات مفصلة عنها، وأحياناً لتغيير خصائصها (مثل إعدادات الطاقة، تعريفات الأجهزة). هو أقرب لـ "Hardware Abstraction Layer".

نصائح أخيرة

  • اقرأ الوثائق: قبل ما تغير أي شيء، ابحث عن المتغير اللي تبي تغيره. معظم المتغيرات مشروحة في وثائق النواة.
  • جرب على بيئة اختبار: لا تجرب تعديلات النواة على أنظمة إنتاج مباشرة بدون اختبار كافي.
  • استخدم sysctl -a: عشان تشوف كل المتغيرات المتاحة في /proc/sys وقيمها الحالية.
  • استخدم find /sys -name "*": لاستكشاف محتويات /sys، لكن كن مستعداً لكثير من المخرجات!

أتمنى يكون الدرس هذا مفيد لكم. تخصيص النواة قوة كبيرة بين يديك، لكن استخدمها بحكمة!