Hızlı Çekirdek Başlıkları, çekirdek derlemesini %50-80 oranında hızlandıran bir dizi yama

Ingo Molnar, iyi bilinen bir Linux çekirdek geliştiricisi ve CFS Görev Zamanlayıcı'nın yazarı Linux çekirdeği geliştirme posta listesi tartışması için önerilen, çekirdek kaynağındaki tüm dosyaların yarısından fazlasını etkileyen ve yapılandırmaya bağlı olarak %50-80'lik bir genel çekirdek yeniden oluşturma hızı artışı sağlayan bir dizi yama.

Uygulanan optimizasyon en büyük değişiklik kümesinin eklenmesiyle ilişkili olması dikkate değerdir. çekirdek geliştirme tarihinde: 2297 binden fazla dosyayı değiştirerek bir kerede 25 yamayı dahil etmek için yola çıktılar.

Performans kazancı başlık dosyası işleme yöntemini değiştirerek elde edilir. Otuz yıllık çekirdek geliştirme sırasında, dosyalar arasında çok sayıda çapraz bağımlılık bulunması nedeniyle başlık dosyalarının durumunun kasvetli bir şekil aldığına dikkat edilmelidir.

Başlık dosyalarının yeniden yapılandırılması bir yıldan fazla sürdü ve hiyerarşi ve bağımlılıkların önemli ölçüde yeniden tasarlanmasını gerektirdi. Yeniden yapılandırma sırasında, farklı çekirdek alt sistemleri için tip tanımlarını ve API'leri ayırmak için çalışmalar yapıldı.

2020'nin sonlarından beri üzerinde çalıştığım yeni "Hızlı Çekirdek Başlıkları" projemin ilk genel sürümünü duyurmaktan memnuniyet duyuyorum.

– çekirdek derlemesini hızlandırın (hem mutlak hem de artımlı derleme süreleri)

– alt sistem tipinin ve API tanımlarının birbirinden ayrılması

Çoğu çekirdek geliştiricisinin bildiği gibi, Linux çekirdeğinde include / ve arch / * / include / hiyerarşilerinde yaklaşık 10,000 ana .h başlığı vardır. Son 30 yılı aşkın bir süredir, sevgiyle 'Bağımlılık Cehennemi' olarak adlandırdığımız karmaşık ve acı verici bir karşılıklı bağımlılıklar dizisine dönüştüler.

Yapılan değişiklikler arasında şunlar yer almaktadır: üst düzey başlık dosyalarının birbirinden ayrılması, başlık dosyalarını bağlayan satır içi işlevlerin hariç tutulması, türler ve API'ler için başlık dosyalarının eşlenmesi, ayrı bir başlık dosyası kümesinin sağlanması (yaklaşık 80 dosyanın derlemeye müdahale eden dolaylı bağımlılıkları vardı, diğer dosyaların başlık dosyaları aracılığıyla açığa çıktı), otomatik olarak bağımlılıkların eklenmesi ".h" ve ".c" dosyaları, başlık dosyalarının adım adım optimizasyonu, "CONFIG_KALLSYMS_FAST = y" modunun kullanımı, nesne dosyalarının sayısını azaltmak için C dosyalarının montaj bloklarında seçici olarak birleştirilmesi.

Sonuç olarak, yapılan iş, işlenen başlık dosyalarının boyutunu azaltmaya izin verdiön işleme aşamasında 1-2 büyüklük mertebesi ile.

  • Örneğin, optimizasyondan önce, "linux/gfp.h" başlık dosyasının kullanılması, 13543 kod satırı eklenmesiyle ve 303 bağımlı başlık dosyasının eklenmesiyle sonuçlandı ve optimizasyondan sonra, boyut 181 satıra düşürüldü. 26 bağımlı dosya.
  • Başka bir örnek: yama uygulanmamış "kernel / pid.c" dosyasının ön işlenmesi, çoğu pid.c'de kullanılmayan 94 bin satırlık kodu birbirine bağlar. Başlık dosyalarını bölmek, işlenen kod miktarını üç kez azaltmamızı ve işlenen satır sayısını 36'e düşürmemizi sağladı.

Çekirdek, test sisteminde "make -j96 vmlinux" komutuyla tamamen yeniden oluşturulduğunda, yama, v5.16-rc7 dalının derleme süresinde 231,34'ten 129,97, 15,5 saniyeye (derleme başına 27,7'ten XNUMX'ye) bir azalma gösterdi. saat) ve ayrıca derleme sırasında CPU çekirdeği kullanımının verimliliğini artırdı.

Artımlı bir derleme ile, optimizasyon 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 azaltılmıştır (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 bit ve 64 bit) mimarileri için kullanılabilir.

İncecik onun hakkında daha fazla bilgi edinmekle ilgileniyorsanayrıntılarını kontrol edebilirsiniz. aşağıdaki bağlantı.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.