Satu set tambalan telah diterbitkan yang mempercepat pembangunan kernel Linux sebesar 50-80%

Ingo Molnar, seorang pengembang kernel Linux terkenal dan penulis penjadwal tugas CFS (Completely Fair Scheduler), mengusulkan untuk berdiskusi di milis pengembang kernel Linux serangkaian tambalan yang mempengaruhi lebih dari separuh semua file di sumber kernel dan memberikan peningkatan kecepatan pembangunan kembali kernel secara lengkap sebesar 50-80% tergantung pada pengaturan. Optimalisasi yang diterapkan patut diperhatikan karena ini terkait dengan penambahan serangkaian perubahan terbesar dalam sejarah pengembangan kernel - 2297 patch diusulkan untuk dimasukkan sekaligus, mengubah lebih dari 25 ribu file (10 ribu file header di “termasuk /” dan “arch/*/include/” direktori "dan 15 ribu file dengan teks sumber).

Peningkatan kinerja dicapai dengan mengubah metode pemrosesan file header. Perlu dicatat bahwa selama tiga puluh tahun pengembangan kernel, keadaan file header menjadi terlihat menyedihkan karena adanya sejumlah besar ketergantungan silang antar file. Restrukturisasi file header memakan waktu lebih dari satu tahun dan memerlukan pengerjaan ulang hierarki dan dependensi yang signifikan. Selama restrukturisasi, pekerjaan dilakukan untuk memisahkan definisi tipe dan API untuk subsistem kernel yang berbeda.

Di antara perubahan yang dilakukan: memisahkan file header tingkat tinggi satu sama lain, menghilangkan fungsi inline yang menghubungkan file header, memisahkan file header berdasarkan jenis dan API, memastikan perakitan file header terpisah (sekitar 80 file memiliki ketergantungan tidak langsung yang mengganggu perakitan, diekspos melalui file header lainnya), penambahan dependensi secara otomatis ke file “.h” dan “.c”, optimalisasi file header selangkah demi selangkah, penggunaan mode “CONFIG_KALLSYMS_FAST=y”, konsolidasi selektif file C ke dalam blok perakitan untuk mengurangi jumlah file objek.

Hasilnya, pekerjaan yang dilakukan memungkinkan untuk mengurangi ukuran file header yang diproses pada tahap pasca-pemrosesan sebanyak 1-2 kali lipat. Misalnya, sebelum optimasi, penggunaan file header “linux/gfp.h” menghasilkan penambahan 13543 baris kode dan penyertaan 303 file header dependen, dan setelah optimasi ukurannya dikurangi menjadi 181 baris dan 26 file dependen. Atau contoh lain: saat melakukan pra-pemrosesan file “kernel/pid.c” tanpa patch, 94 ribu baris kode disertakan, sebagian besar tidak digunakan di pid.c. Pemisahan file header memungkinkan pengurangan jumlah kode yang diproses sebanyak tiga kali lipat, mengurangi jumlah baris yang diproses menjadi 36 ribu.

Ketika kernel dibangun kembali sepenuhnya dengan perintah “make -j96 vmlinux” pada sistem pengujian, penerapan patch menunjukkan pengurangan waktu build cabang v5.16-rc7 dari 231.34 menjadi 129.97 detik (dari 15.5 menjadi 27.7 build per jam), dan juga meningkatkan efisiensi penggunaan inti CPU selama perakitan. Dengan build inkremental, efek optimasi bahkan lebih terlihat - waktu untuk membangun kembali kernel setelah melakukan perubahan pada file header telah berkurang secara signifikan (dari 112% menjadi 173% tergantung pada file header yang diubah). Pengoptimalan saat ini hanya tersedia untuk arsitektur ARM64, MIPS, Sparc, dan x86 (32 dan 64-bit).

Sumber: opennet.ru

Tambah komentar