Linux çekirdeğinin oluşturulmasını %50-80 oranında hızlandıran bir dizi yama yayınlandı

Tanınmış bir Linux çekirdek geliştiricisi ve CFS (Tamamen Adil Zamanlayıcı) görev zamanlayıcısının yazarı Ingo Molnar, Linux çekirdek geliştirici posta listesinde tartışma için çekirdek kaynaklarındaki tüm dosyaların yarısından fazlasını etkileyen bir dizi yamayı önerdi ve Ayarlara bağlı olarak tam çekirdek yeniden oluşturma hızında %50-80 oranında artış sağlar. Uygulanan optimizasyon, çekirdek geliştirme tarihindeki en büyük değişiklik kümesinin eklenmesiyle ilişkili olması açısından dikkat çekicidir - aynı anda dahil edilmek üzere 2297 yama önerildi ve 25 binden fazla dosya değiştirildi ("dahil etme" bölümündeki 10 bin başlık dosyası). /” ve “arch/*/include/” dizinleri "ve kaynak metinleri içeren 15 bin dosya).

Performans artışı, başlık dosyalarının işlenmesi yönteminin değiştirilmesiyle elde edilir. Otuz yıldan fazla süren çekirdek geliştirme sürecinde, dosyalar arasında çok sayıda çapraz bağımlılığın varlığı nedeniyle başlık dosyalarının durumunun iç karartıcı bir görünüme büründüğü belirtilmektedir. Başlık dosyasının yeniden yapılandırılması bir yıldan fazla sürdü ve hiyerarşi ile bağımlılıkların önemli ölçüde yeniden işlenmesini gerektirdi. Yeniden yapılanma sırasında farklı çekirdek alt sistemleri için tür tanımlarının ve API'lerin ayrılmasına yönelik çalışmalar yapıldı.

Yapılan değişiklikler arasında: üst düzey başlık dosyalarının birbirinden ayrılması, başlık dosyalarını birbirine bağlayan satır içi işlevlerin ortadan kaldırılması, başlık dosyalarının türler ve API'ler için ayrılması, başlık dosyalarının ayrı bir şekilde birleştirilmesinin sağlanması (yaklaşık 80 dosyada derlemeyi engelleyen dolaylı bağımlılıklar vardı, diğer başlık dosyaları), “.h” ve “.c” dosyalarına otomatik bağımlılık eklenmesi, başlık dosyalarının adım adım optimizasyonu, “CONFIG_KALLSYMS_FAST=y” modunun kullanımı, C dosyalarının montaj blokları halinde seçici birleştirilmesi nesne dosyalarının sayısını azaltın.

Sonuç olarak, yapılan çalışma, ön işleme sonrası aşamada işlenen başlık dosyalarının boyutunun 1-2 kat azaltılmasını mümkün kıldı. Örneğin, optimizasyondan önce, "linux/gfp.h" başlık dosyasının kullanılması, 13543 kod satırının eklenmesine ve 303 bağımlı başlık dosyasının eklenmesine neden oldu ve optimizasyondan sonra boyut 181 satıra ve 26 bağımlı dosyaya düşürüldü. Veya başka bir örnek: “kernel/pid.c” dosyası yama olmadan ön işleme tabi tutulduğunda, çoğu pid.c'de kullanılmayan 94 bin satır kod dahil edilir. Başlık dosyalarının ayrılması, işlenen kod miktarının üç kat azaltılmasını sağlayarak işlenen satır sayısını 36 bine düşürdü.

Çekirdek, bir test sisteminde "make -j96 vmlinux" komutuyla tamamen yeniden oluşturulduğunda, yamaların uygulanması, v5.16-rc7 dalının yapım süresinin 231.34'ten 129.97 saniyeye (15.5'ten 27.7'ye) düştüğünü gösterdi. saat başına) ve aynı zamanda montajlar sırasında CPU çekirdeklerini kullanma verimliliğini de artırdı. Artımlı bir yapıyla, optimizasyonun etkisi daha da belirgindir - başlık dosyalarında değişiklik yaptıktan sonra çekirdeği yeniden oluşturma süresi önemli ölçüde azaldı (değiştirilen başlık dosyasına bağlı olarak %112'den %173'e). Optimizasyonlar şu anda yalnızca ARM64, MIPS, Sparc ve x86 (32 ve 64 bit) mimariler için mevcuttur.

Kaynak: opennet.ru

Yorum ekle