أهلاً يا شباب! اليوم راح نتكلم عن شيء مهم جداً لأي مهندس أنظمة 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، لكن كن مستعداً لكثير من المخرجات!
أتمنى يكون الدرس هذا مفيد لكم. تخصيص النواة قوة كبيرة بين يديك، لكن استخدمها بحكمة!