2016-03-28 22 views
1

Sadece bir süre çalışıyorum 1 döngü ve ölçüm önbellek özniteliği.Önbellek, bellek başvurusu olmadan sonsuz bir döngüde özlüyor mu?

int main() { 
    while(1); 
} 

Bu özel işlem, bir işlemci (kullanarak taskset) bağlıdır ve bu işlemci başka bir yöntem, aynı işlemci üzerinde zamanlanan, yani izole edilir. Şimdi perf kullanarak önbellek performansını ölçmeye başladım ve sürprizim son seviye önbellek öznemde% 42.

22,579  cache-references           (20.82%) 
8,976  **cache-misses   # 39.754 %** of all cache refs  (20.83%) 
4,414  **LLC-load-misses  # 42.74%** of all LL-cache hits 

şaşırıyorum ve herhangi hafıza operasyonu yapmıyorum ben sıfır önbellek bayan bekleniyor. Bu konuda herhangi bir yardım/düşünce. cpu: Model adı: Intel (R) Xeon (R) CPU E5-2670 v3 @ 2.30GHz

ben% 1'den az düşürüldü 0,1 mili ikinci ve önbellek gereksinimi olması nano uyku vererek mi başka deney. Neler olup bittiğine dair hiçbir fikrim yok.

+0

Anlamsız kodlar, anlamsız sonuçlar. –

+0

Bunu yapmak için nedenlerim var. Önbellek sorunlarını büyük bir parça kodda yalıtmaya çalışıyorum ve sonunda kodumun sıkı bir döngü olduğu ortaya çıkıyor. Şimdi, önbellek özdesinde bir sıçrama olduğunu görüyorum. Bu yüzden, basit bir döngüde denemeye karar verdim ve sonuç beni şaşırttı. – deadbeef

+0

# 1: Derleme çıktısı asm koduna sahip olup bitenleri daha iyi anlayabilirsiniz. # 2 Örneğiniz muhtemelen çok basittir - Sadece önbellek kullanmanız gereken * bir kaç talimatı derleyecektir - şube tahmini her zaman * bilir * herhangi bir belleğe erişme ihtiyacı olmadan ne yapacağınızı *. – tofro

cevap

0

Muhtemelen perf sayaçları, kesme işleyicilerindeki bazı kodları çekirdek kodundan sayar. perf sayaç olayları hassas değildir, bu yüzden yakın talimatlara atfedilen sayımlar elde edeceksiniz ve çekirdek kodu iret yaptıktan sonra hala boru hattında ops için sanırım. Ya da bu, çekirdek bağlamında gerçekleşen olayları tam olarak sayabilir, çünkü her bir kesintide mükemmel sayaçlarla uğraşmak pahalı olur. Eğer dikkate almazsan önbellek bayan oranı sadece vardır erişir ne kadar az önbellek toplam kötü görünüyor


Not: (a Conroe Core2Duo E6600 üzerinde Zamanlı

$ perf stat -e cycles,instructions,L1-dcache-loads,LLC-load-misses,LLC-loads,cache-references,cache-misses ./infloop 

Performance counter stats for './infloop': 

6,177,174,823  cycles              (28.79%) 
6,167,361,425  instructions    # 1.00 insns per cycle   (43.00%) 
    1,884,882  L1-dcache-loads            (42.93%) 
     13,133  LLC-load-misses   # 19.41% of all LL-cache hits  (42.75%) 
     67,676  LLC-loads              (28.74%) 
     391,004  cache-references            (28.50%) 
     18,025  cache-misses    # 4.610 % of all cache refs  (28.42%) 

    2.604227273 seconds time elapsed 

I beri Intel'in bozuk BIOS güncellemeleri ile Intel SnB anakartı döşedi). LLC-* ve L1-* "Donanım önbellek olaylar" iken

cache-references ve cache-missesperf list göre, "Çekirdek PMU olayları" dir. Bunun ne anlama geldiğinden emin değilim.

+1

Bu doğru, yalnızca kullanıcı uzay olaylarını ölçtüğümde sıfıra ulaşıyorum.Önbellek kayıpları, zamanlayıcı kesintileri nedeniyle çekirdendir. – deadbeef