Agar panggilan sistem execve() menjalankan program berdasarkan nama path, kernel Linux 6.8 diatur untuk melakukan optimasi baru untuk mempercepat pencarian PATH secara "dramatis".
Pembaruan execve untuk Linux 6.8 menghadirkan pemeriksaan fail-fast baru untuk mempercepat pencarian PATH berbasis execve.
Pengembang Linux Josh Triplett menulis optimasi dan mengomentari patch tersebut:
"Saat ini, execve mengalokasikan mm dan mem-parsing argv dan envp sebelum memeriksa apakah jalurnya ada. Namun, kasus umum pencarian $PATH mungkin memiliki beberapa panggilan gagal ke exec sebelum satu kali berhasil. Lakukan pencarian nama file untuk tujuan kembali ENOENT sebelum melakukan operasi yang lebih mahal.
...
Untuk mengukur kinerja, saya menjalankan 2000 panggilan fork dan execvpe dengan PATH tujuh elemen di mana file tersebut ditemukan di direktori ketujuh (mewakili kasus umum karena /usr/bin adalah direktori ketujuh di $PATH saya), juga sebagai 2000 panggilan fork dan execve dengan jalur absolut ke biner yang ada. Saya mencatat waktu minimum untuk masing-masing, untuk menghilangkan kebisingan dari saklar konteks dan sejenisnya.
Tanpa jalur cepat:
garpu/execvpe: 49876ns
garpu/eksekutif: 32773ns
Dengan jalur cepat:
garpu/execvpe: 36890ns
garpu/eksekutif: 32069ns
Biaya pencarian tambahan tampaknya menjadi hambatan bagi eksekutif yang sukses, tetapi ini memberikan peningkatan 26% untuk pencarian jalur
kasus dengan mempercepat enam eksekutif yang gagal." Kemenangan yang cukup bagus dengan 26% lebih cepat untuk pencarian PATH berbasis eksekutif, terutama karena ini adalah operasi yang umum. Di patch itu disebutkan bahwa skrip shell cenderung menggunakan stat() untuk memeriksa file di PATH sedangkan GNU C Library (glibc) dan sejenisnya Musl libc, Python, Perl, dan lainnya cenderung menggunakan pendekatan berbasis execve dan karenanya mendapat manfaat dari optimasi kernel ini.
Tidak ada yang mengalahkan patch kecil untuk kemenangan kinerja yang bagus.
Itulah berita seputar Linux 6.8 Mendapat Optimasi Menggiurkan Untuk Pencarian Umum Berbasis $PATH, semoga bermanfaat. Disadur dari Phoronix.com.