A tampalan daripada AMD untuk menala lebih lanjut penjadual kernel Linux di sekitar ketidakseimbangan NUMA telah dibariskan dan dijadualkan untuk pengenalan dalam Linux 5.20. Untuk beberapa beban kerja, penalaan penjadual ini boleh membantu dengan ketara untuk sistem berasaskan AMD Zen dan malah pada pelayan Intel Xeon mempunyai kemungkinan untuk membantu juga.
Perubahan daripada AMD kepada penjadual adil sedang mempertimbangkan pertalian CPU apabila membenarkan ketidakseimbangan NUMA dalam fungsi find_idlest_group().
Jurutera AMD K Prateek Nayak menjelaskan:
Dalam kes sistem yang mengandungi berbilang LLC bagi setiap soket, seperti sistem AMD Zen, pengguna ingin menyebarkan aplikasi lapar lebar jalur merentasi berbilang LLC. Strim ialah satu beban kerja yang mewakili di mana prestasi terbaik diperoleh dengan mengehadkan satu utas aliran bagi setiap LLC. Untuk memastikan ini, pengguna dikenali untuk menyematkan tugasan untuk menentukan subset CPU yang terdiri daripada satu CPU setiap LLC semasa menjalankan tugasan yang memerlukan lebar jalur tersebut.
…
Sebaik-baiknya kami lebih suka setiap utas strim dijalankan pada CPU yang berbeza daripada senarai CPU yang dibenarkan. Walau bagaimanapun, heuristik semasa dalam find_idlest_group() tidak membenarkan ini semasa peletakan awal.
[Tingkah laku contoh]
Setelah empat utas pertama diedarkan di antara CPU yang dibenarkan bagi soket satu, tapak selebihnya mula menumpuk pada CPU yang sama ini apabila jelas terdapat CPU pada soket kedua yang boleh digunakan.Berikutan timbunan awal pada sebilangan kecil CPU, walaupun pengimbang beban akhirnya bermula, ia mengambil sedikit masa untuk sampai ke {4}{4} malah {4}{4} tidak stabil kerana kami memerhatikan sekumpulan ping pong antara {4}{4} hingga {5}{3} dan kembali sebelum keadaan stabil dicapai lebih lama kemudian (1 utas Strim bagi setiap CPU dibenarkan) dan tiada lagi penghijrahan diperlukan.
Kami boleh mengesan cerucuk ini dan mengelakkannya dengan menyemak sama ada bilangan CPU yang dibenarkan dalam kumpulan tempatan adalah kurang daripada bilangan tugas yang dijalankan dalam kumpulan tempatan dan menggunakan maklumat ini untuk menyebarkan tugasan ke-5 ke dalam soket seterusnya (lagipun, matlamat dalam laluan perlahan ini adalah untuk mencari kumpulan terbiar dan CPU terbiar semasa penempatan awal!).
Untuk kes ujian penanda aras memori Strim, tampung ini dapat meningkatkan prestasi sehingga 40%:
Tampung ini di atas kod kernel Linux semasa memanfaatkan Stream dengan 36~44% sebagai contoh kes ujian biasa.
Walaupun AMD mengetuai pengoptimuman untuk memanfaatkan pemproses berasaskan Zen mereka dengan berbilang cache peringkat terakhir setiap soket, perubahan penjadual Linux ini juga boleh memanfaatkan CPU Intel dalam kes pelayan berbilang soket. Untuk Strim pada pelayan Intel Xeon Scalable”Ice Lake”prestasi Strim menyaksikan peningkatan 54~82% berbanding prestasi Linux semasa.
Tidak buruk sama sekali dengan tampung kernel ini hanya menjadi beberapa baris kod!
Sehingga pagi ini tampung telah digilir ke dalam jadual/teras, menjadikannya bahan untuk dihantar untuk tetingkap gabungan Linux 5.20 lewat musim panas ini melainkan sebarang isu timbul dengan kod ini yang sebelum ini berada dalam senarai mel kernel. Setelah kitaran Linux 5.20 dipenuhi dengan ini dan mana-mana pengoptimuman lain, saya pasti akan berada di sekeliling dengan beberapa penanda aras Xeon dan EPYC yang baharu.