التحكم في أولويات وجدولة عمليات لينكس بأمر chrt

نظرة عامة

تعتبر القدرة على توجيه سلوك مجدول النواة وضبط أولويات المهام الحرجة إحدى أهم المهارات المتقدمة لهندسة النظم، لا سيما عند التعامل مع أعباء عمل تتطلب استجابة فائقة السرعة وأدنى معدل تأخير ممكن. يركز هذا المقال على الأداة القوية chrt المدمجة ضمن حزمة util-linux، موضحاً الآلية الهندسية لسياسات الجدولة الفورية في الوقت الحقيقي (مثل FIFO وRR) وكيفية تفعيلها عملياً. سنستعرض عبر بيئة أوبونتو خطوات تبدأ بتجهيز الأدوات اللازمة، ثم تعديل أولويات العمليات قيد التشغيل في الخلفية ومراقبتها، وصولاً إلى إطلاق مهام جديدة بمستويات أولوية مخصصة.

استكشاف سياسات الجدولة ونطاقات الأولويات المدعومة

قبل الخوض في الجوانب التطبيقية، نضمن توافر أحدث إصدارات الحزم الأساسية لنظام التشغيل، وتحديداً util-linux وprocps:

sudo apt-get update -qq && sudo apt-get install -y util-linux procps

تتيح أداة chrt لمدير النظام الاستعلام عن سمات الجدولة الفورية للعمليات وتعديلها بدقة متناهية. وعند تمرير الخيار -m، تعرض الأداة سجلاً شاملاً بكافة سياسات الجدولة المتاحة في نواة لينكس الحالية، متضمنةً الحدود الدنيا والقصوى للأولويات المقبولة لكل سياسة.
⚙️ [أبرز الخيارات واستخداماتها]

-m : يسرد السياسات المدعومة في النظام مع بيان مجال القيم المسموح بها للأولوية (الحد الأدنى والأقصى).
-p : يعيّن رقم تعريف العملية (PID) المستهدفة للقراءة أو التحديث.
-f : يُفعّل سياسة المعالجة الفورية وفق أسبقية الوصول (SCHED_FIFO).
-r : يطبّق سياسة الجدولة الدائرية للوقت الفعلي بالتناوب العادل (SCHED_RR).
-o : يعيد العملية إلى وضع الجدولة القياسي المعتمد على المشاركة الزمنية (SCHED_OTHER).
-b : يخصص الجدولة لأعمال المعالجة الدفعية غير التفاعلية (SCHED_BATCH).
-i : يمنح العملية أدنى اهتمام بحيث تُنفذ فقط عندما يكون المعالج خاملاً (SCHED_IDLE).
-d : يفعّل الجدولة الصارمة المبنية على المواعيد النهائية المحددة للمهام (SCHED_DEADLINE).

chrt -m

فحص السياسة الافتراضية وأولوية العمليات النشطة

لتطبيق المفاهيم بصورة عملية دون التأثير على خدمات حيوية، نقوم بإنشاء عملية تجريبية تعمل في الخلفية لمدة 600 ثانية عبر تشغيل الأمر sleep 600 &.

sleep 600 &

وحتى يسهل علينا التعامل مع هذه العملية خلال الخطوات اللاحقة، نحفظ معرّفها الرقمي مباشرة داخل متغير بيئي في الطرفية عبر إسناد TARGET_PID=$!.

TARGET_PID=$!

نبدأ أولاً باستكشاف الوضع الافتراضي للعملية بالاعتماد على خيار الاستعلام chrt -p.
يكشف الناتج بوضوح أن النظام يُخضع العملية لسياسة المشاركة الزمنية التقليدية SCHED_OTHER، مع إسناد القيمة 0 كأولوية افتراضية للمهام العادية.

chrt -p $TARGET_PID

لتعميق الرؤية من منظور جدول العمليات، نستعين بأمر ps مع محدد الحقول -o لإظهار صنف الجدولة (CLS)، ومستوى الأولوية الفورية (RTPRIO)، وأولوية النواة الكلية (PRI).
يُظهر التقرير تصنيف العملية تحت فئة المشاركة الزمنية (TS)؛ وتبعاً لذلك يبقى حقل الأولوية الفورية فارغاً تماماً (-)، بينما تستقر أولوية النواة القياسية عند القيمة 19.

ps -o pid,cls,rtprio,pri,comm -p $TARGET_PID

التبديل إلى سياسات الوقت الفعلي: SCHED_FIFO وSCHED_RR

نقوم بترقية سلوك المعالجة عبر تشغيل الأمر sudo chrt -f -p 50 $TARGET_PID، لنقل العملية إلى سياسة الوقت الحقيقي الصارمة SCHED_FIFO مع رفع أولويتها الفورية إلى الدرجة 50.
يتطلب هذا الإجراء صلاحيات إدارية عليا (sudo) نظراً لأن منح العملية أولوية حية يخولها الاستحواذ المباشر على موارد المعالج وتجاوز المهام العادية الأخرى.

sudo chrt -f -p 50 $TARGET_PID

للتحقق من إتمام النواة لعملية التعديل، نعاود استجواب حالة العملية بواسطة chrt -p.
توضح البيانات نجاح التحويل الكامل إلى SCHED_FIFO واستقرار مؤشر الأولوية الفورية عند المستوى 50.

chrt -p $TARGET_PID

إذا أردنا توزيع الموارد بمرونة أكبر بين مهام متكافئة الأهمية، يمكننا الانتقال إلى سياسة التناوب الزمني عبر الأمر sudo chrt -r -p 30 $TARGET_PID، مع ضبط الأولوية عند 30.
تتميز آلية SCHED_RR بمنح كل عملية شريحة زمنية محددة (Time Slice) لمعالجة بياناتها، ثم التنازل عن وحدة المعالجة المركزية بالتساوي لصالح المهام الأخرى التي تشترك معها في نفس درجة الأسبقية.

sudo chrt -r -p 30 $TARGET_PID

نعيد تدقيق سجلات المجدول بواسطة ps بمحددات العرض -o لمطابقة صنف الجدولة (CLS)، والأولوية الفورية (RTPRIO)، ودرجة أسبقية النواة (PRI).
يبرز الناتج انتقال التصنيف رسمياً إلى RR، مع تسجيل 30 في خانة الأولوية الفورية (RTPRIO)، بينما تترجم النواة ذلك داخلياً إلى أولوية تنفيذية مرتفعة تبلغ 70 في خانة PRI.

ps -o pid,cls,rtprio,pri,comm -p $TARGET_PID

تشغيل مهام جديدة بخصائص فورية وتنظيف بيئة العمل

لا تقتصر فائدة chrt على إدارة العمليات النشطة فحسب، بل تمتد لتتيح تدشين برامج جديدة بسمات جدولة فورية منذ لحظة ولادتها؛ ولتجربة ذلك نشغّل أمراً بالخلفية يفرض سياسة SCHED_RR وبأولوية 25 عبر الأمر sudo chrt -r 25 sleep 300 &.

sudo chrt -r 25 sleep 300 &

لمقارنة وضع العمليتين ومراجعة بيئة التنفيذ بشكل جماعي، ننفذ الاستعلام المجمع: ps -eo pid,cls,rtprio,comm | grep '[s]leep'.
يؤكد الناتج بوضوح خضوع العمليتين لسياسة التناوب الفوري (RR)، حيث تعمل الأولى بأولوية 30 بينما تواصل الثانية تنفيذها بأولوية 25 دون أي تعارض.

ps -eo pid,cls,rtprio,comm | grep ‘[s]leep’

بعد اكتمال مراحل التحقق، يتعين إغلاق العمليات التجريبية وتحرير موارد النظام باستخدام الأمر kill -9 $TARGET_PID && pkill -f 'sleep 300'.
يؤدي هذا الإجراء المشترك إلى إنهاء المهمة المحفوظة في المتغير والمهمة الأخرى التي تم إنشاؤها لاحقاً، لتعود بيئة النظام إلى حالتها النظيفة السابقة.

kill -9 $TARGET_PID && pkill -f ‘sleep 300’

قدم هذا الدليل نظرة تطبيقية شاملة حول كيفية استثمار أداة chrt في إحكام السيطرة على مجدول لينكس وسياسات الوقت الفعلي.
تعد هذه الإمكانيات ركيزة أساسية لمهندسي النظم عند ضبط أداء الخوادم وضمان الاستجابة اللحظية للخدمات بالغة الحساسية لتأخير المعالجة.