Pengembang kernel Linux lama Thomas Gleixner dengan Linutronix milik Intel telah menghabiskan banyak waktu selama beberapa bulan terakhir untuk mengerjakan ulang kode evaluasi topologi CPU x86 kernel Linux. Hal ini untuk membersihkan kekacauan kode kernel yang menua serta beberapa area kode yang salah di era prosesor Intel Core hybrid saat ini dengan campuran inti P/E dengan inti E yang tidak memiliki SMT/HT dan dengan demikian membuang asumsi kernel sebelumnya. Dengan kode yang sekarang dimasukkan ke dalam cabang TIP hari ini, sepertinya pengerjaan ulang topologi CPU dapat dilakukan dengan baik pada Linux 6.9.
Gleixner telah bekerja sejak musim panas lalu untuk meningkatkan kode evaluasi toplogi CPU x86 dalam kernel Linux. Seperti sebagian besar kode kernel yang dimulai sejak lama, kode ini menjadi tidak jelas seiring berjalannya waktu serta memiliki asumsi yang salah mengingat desain prosesor hybrid Intel Core saat ini. Gleixner telah menjelaskan musim panas lalu dalam surat lamaran aslinya:
“Komitmen baru-baru ini pada parser daun CPUID 0xb/0x1f membuat saya melihat lebih dalam tentang cara mengevaluasi topologi. “Perbaikan” itu hanyalah obat lain dari peretasan sistem yang sepenuhnya mengabaikan bencana yang mendasarinya.
Cara kerja evaluasi topologi adalah dengan menimpa variabel yang relevan sesering mungkin. Misalnya. smp_num_siblings ditimpa trilyunan kali, dan ini salah. CPU boot menulisnya 3 kali, masing-masing AP dua kali.
Yang lebih buruknya adalah ini hanya bekerja secara kebetulan pada sistem hybrid karena fakta bahwa semua sistem yang sudah ada sepertinya melakukan booting pada P-Core yang memiliki SMT. Apakah itu akan boot pada E-Core yang tidak memiliki SMT, maka bagian dari evaluasi topologi awal termasuk thread mask utama yang diperlukan untuk memunculkan CPU paralel akan sepenuhnya salah. Menimpanya nanti dengan nilai yang benar tidak membantu sama sekali.
Apa yang salah saat ini dengan hybrid adalah jumlah core per paket. Pada ADL dengan 8 P-Core dan 8 E-core, jumlah core yang dihasilkan per paket dievaluasi menjadi 12. Hal ini tidak mengherankan lagi karena parser CPUID 0xb/0x1f melihat jumlah prosesor logis pada level inti dan membaginya mereka dengan jumlah saudara SMP.
24/2 = 12
Hanya saja CPU ini jelas memiliki 16 core, bukan 12.
Bahkan secara jelas didokumentasikan dalam SDM bahwa hal ini salah.
…
Kalimat “_NOT_ untuk digunakan untuk evaluasi topologi” ini sudah ada bahkan sebelum hybrid muncul dan diabaikan. Kode ini bekerja secara kebetulan, tetapi dengan hybrid semua taruhan dibatalkan. Kode tersebut benar-benar berantakan setelah daun CPUID 0x1f menyebutkan tingkat topologi apa pun antara CORE dan DIE, tapi itu tidak mengherankan.
Hal yang tepat untuk dilakukan adalah mengevaluasi topologi lengkap termasuk CPU yang tidak ada (hotpluggable) berdasarkan APICID yang disediakan oleh firmware dan parser tingkat domain topologi yang tepat. Ini dapat mengetahui dengan tepat jumlah paket fisik, paket logis, dll. _sebelum_ bahkan mem-boot satu AP. Semua itu bisa dievaluasi sejak awal.
Selain itu terlalu banyak tempat yang melakukan evaluasi topologinya sendiri, namun sama sekali tidak ada titik pusat yang benar-benar dapat memberikan semua informasi tersebut secara konsisten. Ini perlu diubah.”Selama setengah tahun terakhir, seri patch besar yang meningkatkan kode evaluasi topologi CPU Intel / AMD / Hygon / Centaur / Zhaoxin ini telah direvisi sebanyak enam kali.
Dengan kondisinya yang sekarang baik, banyak tambalan yang dimasukkan ke dalam cabang x86/apic tip/tip.git. Dengan masuknya ke cabang TIP, kemungkinan besar akan dikirimkan untuk jendela penggabungan Linux 6.9 bulan depan kecuali ada masalah baru yang terungkap atau keberatan yang diajukan oleh Linus Torvalds.
Itulah berita seputar Membersihkan Kekacauan: Linux 6.9 Kemungkinan Akan Melakukan Pengerjaan Ulang Kode Topologi CPU x86, semoga bermanfaat. Disadur dari Phoronix.com.