Sebuah tambalan tertunda melalui x86/mendesak untuk mengatasi masalah dengan prosesor Intel Alder Lake dan Raptor Lake yang membuat pengembang kernel untuk sementara waktu menonaktifkan Process Context Identifiers (PCID) dengan prosesor seluler/desktop Intel ini.
Sebuah tambalan diatur untuk menjadi jalur utama untuk pengembangan Linux 6.4 dan juga di-porting-balik ke versi kernel yang stabil untuk menghindari flush INVLPG global yang tidak lengkap. Tambalan dari seorang insinyur Intel Linux menjelaskan:
“Instruksi INVLPG digunakan untuk membatalkan entri TLB untuk alamat virtual yang ditentukan. Ketika PCID diaktifkan, INVLPG seharusnya membatalkan entri TLB untuk alamat yang ditentukan untuk keduanya entri PCID *dan* Global saat ini. (Catatan: Hanya pemetaan kernel yang ditetapkan Global=1.)
Sayangnya, beberapa implementasi INVLPG dapat membuat terjemahan Global tidak terhapus saat PCID diaktifkan.
Sebagai solusinya, jangan pernah mengaktifkan PCID pada prosesor yang terpengaruh.
Saya berharap akhirnya akan ada mitigasi kode mikro untuk menggantikan solusi perangkat lunak ini. Namun, nomor versi pasti di mana hal itu akan terjadi tidak diketahui hari ini. Setelah nomor versi ditetapkan, daftar prosesor dapat diubah untuk hanya menonaktifkan PCID pada prosesor yang terpengaruh dengan mikrokode yang terpengaruh.
Catatan: jika ada yang menginginkan perbaikan cepat yang tidak memerlukan penambalan, cukup tempelkan’nopcid’pada baris perintah kernel Anda.”
Prosesor yang terpengaruh berakhir menjadi prosesor Intel Alder Lake dan Raptor Lake. Seperti disebutkan dalam pesan tambalan, Intel dikatakan sedang mengerjakan mitigasi mikrokode untuk masalah ini, tetapi untuk saat ini setidaknya kernel Linux disetel untuk menonaktifkan dukungan PCID untuk Alder Lake/Alder Lake L/Danau Alder N/Danau Raptor/Danau Raptor P/Danau Raptor S hingga mitigasi kode mikro dapat ditangani.
INVLPG digunakan untuk membatalkan entri TLB yang ditentukan. Setidaknya Danau Alder dan Danau Raptor tidak memerlukan Kernel Page Table Isolation (KPTI) untuk memitigasi Meltdown karena prosesor yang lebih baru ini tidak terpengaruh olehnya. Namun untuk prosesor Intel yang lebih lama, dukungan PCID membantu mengimbangi beberapa overhead dalam menangani Kernel Page Table Isolation/memitigasi Meltdown seperti yang ditunjukkan beberapa bertahun-tahun yang lalu. dokumentasi kernel PTI terus mencatat manfaat dukungan PCID secara lebih luas:
“Process Context Identifiers (PCID) adalah fitur CPU yang memungkinkan kita melewatkan pembilasan seluruh TLB saat berpindah tabel halaman dengan menyetel bit khusus di CR3 saat tabel halaman diubah. Ini membuat peralihan tabel halaman (pada sakelar konteks, atau masuk/keluar kernel) lebih murah. Namun, pada sistem dengan dukungan PCID, kode pengalih konteks harus mengeluarkan entri pengguna dan kernel dari TLB. Siram PCID TLB pengguna ditangguhkan hingga keluar ke ruang pengguna, meminimalkan biaya. Lihat intel.com/sdm untuk detail berdarah PCID/INVPCID.
…
Pada sistem tanpa dukungan PCID, setiap penulisan CR3 menghapus seluruh TLB. Itu berarti bahwa setiap syscall, interupsi, atau pengecualian mem-flush TLB.”
Dalam hal apa pun saya akan menjalankan beberapa tolok ukur di Raptor Lake untuk melihat apakah ini-setidaknya sementara-menonaktifkan dukungan PCID berarti untuk salah satu area kinerja biasa bagi pengguna akhir.