Estamos بعد أيام قليلة من إصدار الإصدار الثابت من Linux 6.10، وهو الإصدار الذي سيتضمن سلسلة من التغييرات المثيرة للاهتمام، بالإضافة إلى تحسينات كبيرة من حيث دعم الجهاز والوظائف والمزيد.
في الوقت المناسب سنتحدث عن هذا الإصدار، حيث أن سبب هذه المقالة هو الإشارة إلى الإصدار التالي المتوقع من Linux، وهو "Linux 6.11"، وهو الإصدار الذي تم الإعلان عن بعض التغييرات فيه والتي سأذكرها ما يكفي من الوقت، وأنا أحب أن أتناولها في وظيفة أخرى.
حسنًا، ننتقل الآن إلى صلب المقال، الذي فيه إشارة إلى إعلان أدلى به لينوس تورفالدس حول رغبتهم في تضمين نواة Linux 6.11، بعض التصحيحات التي تنفذ الآلية "sched_ext" (SCX).
هذه الآليةأو يهدف إلى استخدام eBPF لإنشاء برامج جدولة وحدة المعالجة المركزية داخل Linux kernel. فيما يلي ملخص لكيفية العمل:
- مبرمجو eBPF ووحدة المعالجة المركزية: باستخدام eBPF، يمكن تحميل برامج جدولة وحدة المعالجة المركزية (CPU) ديناميكيًا وتنفيذها داخل Linux kernel. يقوم تجميع Just-In-Time (JIT) بترجمة كود eBPF الثانوي إلى تعليمات الجهاز للتنفيذ.
- فئة SCHED_EXT: هذه فئة برمجة جديدة، تكون أولوية استدعاء kernel الخاصة بها من بين الفئات SCHED_IDLE وSCHED_NORMAL. برامج تشغيل BPF مرتبطة بـ SCHED_EXT يمكنه التعامل مع المهام التي لها أولوية أقل من التنفيذ في الوقت الفعلي، دون التأثير على المهام المرتبطة بالفعل بالمجدول العادي SCHED_NORMAL.
- العملية: تقوم برامج تشغيل BPF بتحليل قوائم انتظار المهام التي تنتظر تنفيذها على وحدة المعالجة المركزية (CPU) وتحديد المهمة التي سيتم تعيينها عند تحرير نواة وحدة المعالجة المركزية (CPU). إذا لم يكن هناك برامج تشغيل BPF نشطة SCHED_EXT، يتم التعامل مع المهام باستخدام المجدول SCHED_NORMAL.
- الفوائد: الآلية sched_ext يسهل تجربة تقنيات واستراتيجيات البرمجة المختلفة بطريقة ديناميكية. يتيح لك ذلك إنشاء نماذج أولية وظيفية للمبرمجين بسرعة واستبدالها بسرعة في بيئات الإنتاج. على سبيل المثال، يمكن ضبطه ليناسب الخصائص المحددة لأحد التطبيقات وتغيير استراتيجية الجدولة بناءً على حالة النظام وعوامل أخرى.
ومن الجدير بالذكر أن تم اقتراح "sched_ext" في البداية لينظر فيه مطورو kernel في عام 2022، يليه إصدار ستة مراجعات تصحيحية. على الرغم من عدم دعمه في النواة الرئيسية، توفر العديد من التوزيعات مثل Ubuntu وArch Linux وFedora وNixOS إمكانية تثبيت "sched_ext" من خلال حزم إضافية. تدرس شركة Canonical تضمين مكونات «sched_ext» في Ubuntu 24.10، ويعمل Valve على تكامله مع Steam Deck. في ميتا، المبرمج يعتمد على «sched_ext» يستخدم بالفعل في البنية التحتية للإنتاج.
بالإضافة إلى ذلك، يُذكر أن هناك حاليًا ما يقرب من عشرة مبرمجين يعتمدون على "sched_ext"كل منها مزود بمنطق جدولة المهام المحدد في مساحة المستخدم ويتم تحميله في النواة باستخدام برامج BPF.
- scx_layered: برنامج جدولة مختلط يقسم المهام إلى طبقات، لكل منها استراتيجية جدولة خاصة بها. يسمح لك بتعيين مهام معينة لطبقات معينة مع موارد وحدة المعالجة المركزية المضمونة أو زيادة أولوية التطبيقات الفردية. تم تطويره بواسطة Meta، ويتم كتابة منطق مساحة المستخدم الخاص به بلغة Rust.
- scx_rustland: مُحسّن لإعطاء الأولوية للمهام التفاعلية على المهام التي تستهلك وحدة المعالجة المركزية بشكل مكثف. على سبيل المثال، يعمل على تحسين FPS في لعبة Terraria أثناء تجميع النواة المتزامنة مقارنة بمجدول EEVDF القياسي. تم تطويره بواسطة موظف Canonical، مع المنطق في Rust.
- scx_lavd: تنفيذ خوارزمية LAVD (الموعد النهائي الظاهري لأهمية الكمون)، مما يقلل زمن الوصول في ألعاب الكمبيوتر والمهام التفاعلية من خلال النظر في أهمية تقليل التأخيرات وتقدم العملية. تم تطويرها بواسطة Igalia وValve، مع المنطق في Rust.
- scx_rusty، scx_rlfifo، scx_mitosis: برامج الجدولة التي تعمل على موازنة مجموعات المهام بناءً على التحميل، وتنفيذ برنامج جدولة FIFO بسيط، وربط مجموعات المهام بنوى وحدة المعالجة المركزية. كل ذلك مع مكونات الصدأ.
- scx_central، scx_flatcg، scx_nest، scx_pair، scx_qmap، scx_simple، scx_userland: أمثلة لمبرمجين بمكونات لغة C، توضح القدرات المختلفة لـ "sched_ext".
أخيرًا، تجدر الإشارة إلى أن Google تقوم بتجربة استخدام إطار العمل الخاص بها، ghOSt، للتأثير على قرارات جدولة المهام باستخدام برامج BPF، وقد بدأت في ترحيل ghOSt إلى sched_ext. بالإضافة إلى ذلك، تعمل Google على تطوير منفذ "sched_ext" لنظام التشغيل ChromeOS.
مصدر: https://lkml.org