Satu set patch telah diterbitkan yang mempercepatkan pembinaan kernel Linux sebanyak 50-80%

Ingo Molnar, pembangun kernel Linux yang terkenal dan pengarang penjadual tugas CFS (Completely Fair Scheduler), mencadangkan untuk perbincangan mengenai senarai mel pembangun kernel Linux satu siri patch yang menjejaskan lebih separuh daripada semua fail dalam sumber kernel dan memberikan peningkatan dalam kelajuan pembinaan semula kernel yang lengkap sebanyak 50-80% bergantung pada tetapan. Pengoptimuman yang dilaksanakan patut diberi perhatian kerana ia dikaitkan dengan penambahan set perubahan terbesar dalam sejarah pembangunan kernel - 2297 patch telah dicadangkan untuk dimasukkan sekaligus, mengubah lebih daripada 25 ribu fail (10 ribu fail pengepala dalam "termasuk /” dan β€œarch/*/include/” direktori "dan 15 ribu fail dengan teks sumber).

Keuntungan prestasi dicapai dengan menukar kaedah pemprosesan fail pengepala. Adalah diperhatikan bahawa lebih dari tiga puluh tahun pembangunan kernel, keadaan fail pengepala telah mengambil rupa yang menyedihkan kerana kehadiran sejumlah besar kebergantungan silang antara fail. Penstrukturan semula fail pengepala mengambil masa lebih setahun dan memerlukan kerja semula yang ketara bagi hierarki dan kebergantungan. Semasa penstrukturan semula, kerja telah dilakukan untuk mengasingkan definisi jenis dan API untuk subsistem kernel yang berbeza.

Antara perubahan yang dibuat: memisahkan fail pengepala peringkat tinggi antara satu sama lain, menghapuskan fungsi sebaris yang memautkan fail pengepala, mengasingkan fail pengepala untuk jenis dan API, memastikan pemasangan berasingan bagi fail pengepala (kira-kira 80 fail mempunyai kebergantungan tidak langsung yang mengganggu pemasangan, terdedah melalui fail pengepala lain), penambahan automatik kebergantungan kepada fail ".h" dan ".c", pengoptimuman langkah demi langkah fail pengepala, penggunaan mod "CONFIG_KALLSYMS_FAST=y", penyatuan terpilih fail C ke dalam blok pemasangan untuk mengurangkan bilangan fail objek.

Akibatnya, kerja yang dilakukan memungkinkan untuk mengurangkan saiz fail pengepala yang diproses pada peringkat pasca prapemprosesan sebanyak 1-2 pesanan magnitud. Contohnya, sebelum pengoptimuman, menggunakan fail pengepala "linux/gfp.h" menghasilkan penambahan 13543 baris kod dan kemasukan 303 fail pengepala bergantung, dan selepas pengoptimuman saiznya dikurangkan kepada 181 baris dan 26 fail bergantung. Atau contoh lain: semasa pramemproses fail "kernel/pid.c" tanpa tampalan, 94 ribu baris kod disertakan, kebanyakannya tidak digunakan dalam pid.c. Mengasingkan fail pengepala memungkinkan untuk mengurangkan jumlah kod yang diproses sebanyak tiga kali, mengurangkan bilangan baris yang diproses kepada 36 ribu.

Apabila kernel telah dibina semula sepenuhnya dengan arahan "make -j96 vmlinux" pada sistem ujian, penggunaan patch menunjukkan pengurangan dalam masa binaan cawangan v5.16-rc7 daripada 231.34 kepada 129.97 saat (daripada 15.5 kepada 27.7 binaan sejam), dan juga meningkatkan kecekapan menggunakan teras CPU semasa pemasangan. Dengan binaan tambahan, kesan pengoptimuman adalah lebih ketara - masa untuk membina semula kernel selepas membuat perubahan pada fail pengepala telah menurun dengan ketara (daripada 112% kepada 173% bergantung pada fail pengepala yang diubah). Pengoptimuman pada masa ini hanya tersedia untuk seni bina ARM64, MIPS, Sparc dan x86 (32- dan 64-bit).

Sumber: opennet.ru

Tambah komen