اینگو مولنار، یک توسعهدهنده هسته لینوکس و نویسنده برنامه زمانبندی وظایف CFS (زمانبندی کاملا منصفانه)، برای بحث در لیست پستی توسعهدهندگان هسته لینوکس، مجموعهای از وصلهها را پیشنهاد کرد که بیش از نیمی از فایلهای موجود در منابع هسته را تحت تأثیر قرار میدهند. افزایش سرعت بازسازی کامل هسته را 50-80٪ بسته به تنظیمات فراهم می کند. بهینه سازی پیاده سازی شده از این جهت قابل توجه است که با افزودن بزرگترین مجموعه تغییرات در تاریخ توسعه هسته همراه است - 2297 وصله برای گنجاندن یکباره پیشنهاد شد و بیش از 25 هزار فایل را تغییر داد (10 هزار فایل هدر در "شامل دایرکتوری های /” و “arch/*/include/” و 15 هزار فایل با متن های منبع).
افزایش عملکرد با تغییر روش پردازش فایل های هدر به دست می آید. ذکر شده است که بیش از سی سال توسعه هسته، وضعیت فایلهای هدر به دلیل وجود تعداد زیادی وابستگی متقابل بین فایلها، ظاهری ناامیدکننده به خود گرفته است. بازسازی فایل هدر بیش از یک سال به طول انجامید و نیاز به بازکاری قابل توجهی در سلسله مراتب و وابستگی ها داشت. در طول بازسازی، کار برای جداسازی تعاریف نوع و API برای زیرسیستمهای مختلف هسته انجام شد.
از جمله تغییرات ایجاد شده: جداسازی فایلهای هدر سطح بالا از یکدیگر، حذف توابع درون خطی که فایلهای هدر را به هم پیوند میدهند، جداسازی فایلهای هدر برای انواع و APIها، اطمینان از مونتاژ جداگانه فایلهای هدر (حدود 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 ساخت) نشان داد. در ساعت)، و همچنین کارایی استفاده از هسته های CPU را در طول مونتاژها افزایش داد. با ساخت افزایشی، تأثیر بهینه سازی حتی بیشتر قابل توجه است - زمان ساخت مجدد هسته پس از ایجاد تغییرات در فایل های هدر به طور قابل توجهی کاهش یافته است (از 112٪ به 173٪ بسته به فایل هدر که تغییر می کند). بهینهسازیها در حال حاضر فقط برای معماریهای ARM64، MIPS، Sparc و x86 (32 و 64 بیتی) در دسترس هستند.
منبع: opennet.ru