تم نشر مجموعة من التصحيحات التي تعمل على تسريع بناء نواة لينكس بنسبة 50-80%

إنغو مولنار، وهو مطور معروف لـ Linux kernel ومؤلف برنامج جدولة المهام CFS (Completely Fair مجدولة)، اقترح للمناقشة في القائمة البريدية لمطوري kernel Linux سلسلة من التصحيحات التي تؤثر على أكثر من نصف جميع الملفات في مصادر kernel و توفير زيادة في سرعة إعادة بناء النواة الكاملة بنسبة 50-80% حسب الإعدادات. التحسين المطبق جدير بالملاحظة لأنه يرتبط بإضافة أكبر مجموعة من التغييرات في تاريخ تطوير kernel - تم اقتراح 2297 تصحيحًا لتضمينها مرة واحدة، وتغيير أكثر من 25 ألف ملف (10 آلاف ملف رأس في "التضمين" /" و"arch/*/include/" الدلائل "و 15 ألف ملف بنصوص المصدر).

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

من بين التغييرات التي تم إجراؤها: فصل ملفات الرأس عالية المستوى عن بعضها البعض، وإزالة الوظائف المضمنة التي تربط ملفات الرأس، وفصل ملفات الرأس للأنواع وواجهات برمجة التطبيقات، وضمان التجميع المنفصل لملفات الرأس (حوالي 80 ملفًا بها تبعيات غير مباشرة تتداخل مع التجميع، مكشوفة من خلال ملفات الرأس الأخرى)، والإضافة التلقائية للتبعيات إلى ملفات ".h" و".c"، وتحسين ملفات الرأس خطوة بخطوة، واستخدام الوضع "CONFIG_KALLSYMS_FAST=y"، والدمج الانتقائي لملفات C في كتل التجميع من أجل تقليل عدد ملفات الكائنات.

نتيجة لذلك، جعل العمل المنجز من الممكن تقليل حجم ملفات الرأس التي تمت معالجتها في مرحلة ما بعد المعالجة بمقدار 1-2 أوامر من حيث الحجم. على سبيل المثال، قبل التحسين، أدى استخدام ملف الرأس "linux/gfp.h" إلى إضافة 13543 سطرًا من التعليمات البرمجية وإدراج 303 ملفات رأس تابعة، وبعد التحسين تم تقليل الحجم إلى 181 سطرًا و26 ملفًا تابعًا. أو مثال آخر: عند المعالجة المسبقة للملف "kernel/pid.c" بدون تصحيح، يتم تضمين 94 ألف سطر من التعليمات البرمجية، معظمها غير مستخدم في pid.c. أدى فصل ملفات الرأس إلى تقليل كمية التعليمات البرمجية المعالجة ثلاث مرات، مما يقلل من عدد الأسطر المعالجة إلى 36 ألفًا.

عندما أعيد بناء النواة بالكامل باستخدام الأمر "make -j96 vmlinux" على نظام اختبار، أظهر تطبيق التصحيحات انخفاضًا في وقت إنشاء الفرع v5.16-rc7 من 231.34 إلى 129.97 ثانية (من 15.5 إلى 27.7 نسخة) في الساعة)، وكذلك زيادة كفاءة استخدام نوى وحدة المعالجة المركزية أثناء التجميعات. مع البناء المتزايد، يكون تأثير التحسين أكثر وضوحًا - فقد انخفض وقت إعادة بناء النواة بعد إجراء تغييرات على ملفات الرأس بشكل ملحوظ (من 112% إلى 173% اعتمادًا على ملف الرأس الذي يتم تغييره). التحسينات متاحة حاليًا فقط للبنيات ARM64 وMIPS وSparc وx86 (32 و64 بت).

المصدر: opennet.ru

إضافة تعليق