Pertikaian spinlock selama alokasi memori ruang kerja
Di sinilah mulai bersenang-senang. Saya sudah menggambarkan pekerjaan semacam itu dan hash di memori ruang kerja mengkonsumsi CPU tetapi tidak tercermin dalam angka pencarian bpool.
Pertikaian spinlock adalah lapisan lain untuk kesenangan khusus ini. Ketika memori dicuri dari kumpulan buffer dan dialokasikan untuk digunakan terhadap permintaan memori kueri, akses memori diserialisasi dengan spinlock. Secara default, ini terjadi dengan sumber daya dipartisi di tingkat simpul NUMA. Jadi setiap query pada NUMA node yang sama menggunakan memori ruang kerja berpotensi mengalami pertikaian spinlock ketika mencuri memori terhadap hibah. Sangat penting untuk dicatat: ini bukan risiko pertikaian "satu kali per kueri", karena jika pertengkarannya adalah pada saat hibah yang sebenarnya. Sebaliknya, itu ketika memori dicuri terhadap hibah - jadi permintaan dengan hibah memori yang sangat besar akan memiliki banyak peluang untuk pertikaian spinlock jika menggunakan sebagian besar hibahnya.
Bendera jejak 8048 melakukan pekerjaan yang baik untuk menghilangkan pertengkaran ini dengan lebih lanjut mempartisi sumber daya di tingkat inti.
Microsoft mengatakan "pertimbangkan untuk melacak flag 8048 jika 8 atau lebih core per socket". Tapi ... itu tidak benar-benar berapa banyak core per socket (selama ada banyak), tetapi berapa banyak peluang untuk pertikaian dalam pekerjaan yang dilakukan pada satu NUMA node.
Pada prosesor AMD yang direkatkan (12 core per socket, 2 NUMA node per socket) ada 6 core per node NUMA. Saya melihat sebuah sistem dengan 4 dari CPU tersebut (jadi delapan NUMA node, masing-masing 6 core) yang macet di konvoi spinlock sampai jejak flag 8048 diaktifkan.
Saya telah melihat pertikaian spinlock ini menurunkan kinerja pada VM sekecil 4 vCPU. Bendera jejak 8048 melakukan apa yang seharusnya ketika diaktifkan pada sistem tersebut.
Mempertimbangkan bahwa masih ada beberapa CPU yang dioptimalkan frekuensi 4 inti di luar sana, dengan beban kerja yang tepat, mereka akan mendapat manfaat dari jejak flag 8048 juga.
CMEMTHREAD menunggu menemani jenis pertikaian spinlock yang melacak flag 8048 berkurang. Tapi satu kata peringatan: menunggu CMEMTHREAD adalah gejala yang menguatkan, bukan akar penyebab masalah khusus ini. Saya telah melihat sistem dengan CMEMTHREAD "tunggu mulai" yang tinggi di mana bendera jejak 8048 dan / atau 9024 ditunda dalam penyebaran karena akumulasi waktu tunggu CMEMTHREAD cukup rendah. Dengan spinlocks, akumulasi waktu tunggu biasanya merupakan hal yang salah untuk dilihat. Sebaliknya, Anda ingin melihat waktu CPU yang terbuang - diwakili terutama oleh putaran itu sendiri, kedua oleh menunggu terkait yang mewakili konteks yang berpotensi tidak perlu beralih.