Pengepala Kernel Pantas, satu set tampalan yang mempercepatkan penyusunan kernel sebanyak 50-80%

Ingo Molnar, pembangun kernel Linux yang terkenal dan pengarang Penjadual Tugas CFS dicadangkan untuk perbincangan senarai mel pembangunan kernel Linux beberapa tampalan, menjejaskan lebih separuh daripada semua fail dalam sumber kernel dan menyediakan peningkatan kelajuan bina semula kernel keseluruhan sebanyak 50 -80% bergantung pada konfigurasi.

Pengoptimuman yang dilaksanakan adalah ketara kerana ia dikaitkan dengan penambahan set perubahan terbesar dalam sejarah pembangunan kernel: mereka menetapkan untuk memasukkan 2297 patch sekaligus, menukar lebih daripada 25 ribu fail.

Keuntungan prestasi dicapai dengan menukar kaedah pengendalian fail pengepala. Perlu diingatkan bahawa selama tiga puluh tahun pembangunan kernel, keadaan fail pengepala telah berubah menjadi suram kerana kehadiran sejumlah besar kebergantungan silang antara fail.

Penstrukturan semula fail pengepala mengambil masa lebih setahun dan memerlukan reka bentuk semula yang ketara bagi hierarki dan kebergantungan. Semasa penstrukturan semula, kerja telah dilakukan untuk memisahkan definisi jenis dan API untuk subsistem kernel yang berbeza.

Saya berbesar hati untuk mengumumkan versi awam pertama projek "Fast Kernel Headers" baharu saya yang telah saya kerjakan sejak lewat 2020, yang merupakan kerja semula menyeluruh bagi hierarki pengepala kernel Linux dan kebergantungan pengepala, dengan matlamat berganda:

- mempercepatkan binaan kernel (masa binaan mutlak dan tambahan)

- jenis penyahgandingan subsistem dan definisi API antara satu sama lain

Seperti yang diketahui oleh kebanyakan pembangun kernel, terdapat sekitar ~ 10,000 pengepala .h utama dalam kernel Linux, dalam hierarki include / dan arch / * / include /. Sepanjang 30+ tahun yang lalu, mereka telah berkembang menjadi satu set pergantungan silang yang rumit dan menyakitkan yang kami panggil 'Neraka Ketergantungan'.

Antara perubahan yang dilakukan ialah: pemisahan fail pengepala peringkat tinggi antara satu sama lain, pengecualian fungsi sebaris yang memautkan fail pengepala, pemetaan fail pengepala untuk jenis dan API, penyediaan set fail pengepala yang berasingan (kira-kira 80 fail mempunyai kebergantungan tidak langsung yang mengganggu pemasangan, didedahkan melalui fail pengepala fail lain), penambahan kebergantungan automatik 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 dibenarkan untuk mengurangkan saiz fail pengepala yang diprosesdalam peringkat pasca prapemprosesan sebanyak 1-2 urutan magnitud.

  • Sebagai contoh, 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.
  • Contoh lain: pramemproses fail "kernel / pid.c" yang tidak ditambal menghubungkan 94 ribu baris kod, yang kebanyakannya tidak digunakan dalam pid.c. Membahagikan fail pengepala membolehkan kami mengurangkan jumlah kod yang diproses tiga kali, mengurangkan bilangan baris yang diproses kepada 36.

Apabila kernel telah dibina semula sepenuhnya dengan arahan "make -j96 vmlinux" pada sistem ujian, tampalan menunjukkan pengurangan masa penyusunan cawangan v5.16-rc7 daripada 231,34 kepada 129,97, 15,5 saat (daripada 27,7 kepada XNUMX binaan setiap jam) dan juga meningkatkan kecekapan penggunaan teras CPU semasa membina.

Dengan kompilasi tambahan, kesan pengoptimuman adalah lebih ketara: masa untuk membina semula kernel selepas membuat perubahan pada fail pengepala telah dikurangkan 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-bit dan 64-bit).

Baiklah sekiranya anda berminat untuk mengetahui lebih lanjut mengenainya, anda boleh menyemak butiran di pautan berikut.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.