Çalışma alanı hafızasının tahsisi sırasında spinlock çekişmesi
Burası eğlenmeye başladığı yer. Çalışma alanı belleğindeki sıralama ve karma çalışmaların CPU harcadığını ancak bpool arama numaralarına yansıtılmadığını zaten tarif etmiştim.
Spinlock çekişmesi bu özel eğlence için başka bir katmandır. Bellek arabellek havuzundan çalındığında ve sorgu belleği verilmesine karşı kullanılmak üzere tahsis edildiğinde, bellek erişimi bir döndürme kilidi ile serileştirilir. Varsayılan olarak, bu NUMA düğümü düzeyinde bölümlenmiş bir kaynakla gerçekleşir. Bu nedenle, çalışma alanı belleği kullanan aynı NUMA düğümündeki her sorgu, belleği hibelere karşı çalarken potansiyel olarak spinlock çekişmesi yaşayabilir. Unutulmaması gereken çok önemli: bu, "sorgu başına bir kez" çekişme riski değildir, çekişme noktası gerçek hibe zamanında olsaydı olduğu gibi. Aksine, hafızanın hibeye karşı çalınması durumunda - çok büyük bir hafıza hibesine sahip bir sorgu, hibesinin çoğunu kullanıyorsa, spinlock çekişmesi için birçok fırsata sahip olacaktır.
İz bayrağı 8048, kaynağı temel düzeyde daha da bölümlere ayırarak bu çekişmeyi gidermek için harika bir iş çıkarmaktadır.
Microsoft, "soket başına 8 veya daha fazla çekirdek varsa, izleme bayrağı 8048'i düşünün" diyor. Ama ... bu gerçekten yuva başına kaç tane çekirdek (çoklu olduğu sürece) değil, tek bir NUMA düğümü üzerinde çalışmalarda çekişme için kaç tane fırsat var.
Yapıştırılmış AMD işlemcilerinde (soket başına 12 çekirdek, soket başına 2 NUMA düğüm), NUMA düğümü başına 6 çekirdek vardı. İzleme bayrağı 8048 etkinleştirilinceye kadar spinlock konvoyunda sıkışan bu CPU'lardan 4'ünün (yani sekiz NUMA düğümü, her biri 6 çekirdekli) bir sistemi gördüm.
Bu spinlock çekişmesinin, VM'lerdeki performansı 4 vCPU kadar küçük düşürdüğünü gördüm. İz bayrağı 8048, bu sistemlerde etkinleştirildiğinde olması gerekeni yaptı.
Dışarıda hala 4 çekirdek frekans optimize edilmiş işlemcisi olduğu göz önüne alındığında, doğru iş yüküyle birlikte 8048 iz bayrağından da faydalanacaklardı.
CMEMTHREAD, izleme bayrağı 8048'in rahatlattığı spinlock çekişmesi tipine eşlik ediyor. Ancak dikkatli olunacak bir kelime: CMEMTHREAD beklemeleri, bu özel sorunun kök nedeni değil, destekleyici bir semptomdur. CMEMTHREAD yüksek "bekleme başlangıcı" olan sistemler gördüm, burada 8048 ve / veya 9024 izleme bayrağı dağıtımda ertelendi, çünkü biriken CMEMTHREAD bekleme süresi oldukça düşüktü. Döndürme kilitlerinde, biriktirilmiş bekleme süresi genellikle bakmak için yanlış bir şeydir. Daha ziyade, boşa harcanan CPU zamanına bakmak istersiniz - öncelikli olarak dönüşlerin kendileri tarafından temsil edilir, ikincil olarak potansiyel olarak gereksiz bağlam anahtarlarını temsil eden ilişkili beklemeler tarafından temsil edilir.