我想弄清楚爲什麼修改後的C程序運行速度比未修改的計數器部分要快(我添加了幾行代碼來執行一些額外的工作)。在這種情況下,我懷疑「緩存效果」是主要的解釋(指令緩存)。因此,我到達perf
(https://perf.wiki.kernel.org/index.php/Main_Page)概要分析工具,但不幸的是,我無法理解其輸出緩存未命中的含義。提供什麼是perf cache事件的含義?
有關緩存幾個事件:
cache-references [Hardware event]
cache-misses [Hardware event]
L1-dcache-loads [Hardware cache event]
L1-dcache-load-misses [Hardware cache event]
L1-dcache-stores [Hardware cache event]
L1-dcache-store-misses [Hardware cache event]
L1-dcache-prefetches [Hardware cache event]
L1-dcache-prefetch-misses [Hardware cache event]
L1-icache-loads [Hardware cache event]
L1-icache-load-misses [Hardware cache event]
L1-icache-prefetches [Hardware cache event]
L1-icache-prefetch-misses [Hardware cache event]
LLC-loads [Hardware cache event]
LLC-load-misses [Hardware cache event]
LLC-stores [Hardware cache event]
LLC-store-misses [Hardware cache event]
LLC-prefetches [Hardware cache event]
LLC-prefetch-misses [Hardware cache event]
dTLB-loads [Hardware cache event]
dTLB-load-misses [Hardware cache event]
dTLB-stores [Hardware cache event]
dTLB-store-misses [Hardware cache event]
dTLB-prefetches [Hardware cache event]
dTLB-prefetch-misses [Hardware cache event]
iTLB-loads [Hardware cache event]
iTLB-load-misses [Hardware cache event]
branch-loads [Hardware cache event]
branch-load-misses [Hardware cache event]
node-loads [Hardware cache event]
node-load-misses [Hardware cache event]
node-stores [Hardware cache event]
node-store-misses [Hardware cache event]
node-prefetches [Hardware cache event]
node-prefetch-misses [Hardware cache event]
我在哪裏可以找到有關這些字段的解釋?緩存未命中事件總是比其他事件小。這個事件是什麼措施?
如何解釋ls中的26,760個L1-icache-load-misses與下例中的5,708個cache-misses?
perf stat -e L1-icache-load-misses ls
caches caches~ out
Performance counter stats for 'ls':
26,760 L1-icache-load-misses
0.002816690 seconds time elapsed
perf stat -e cache-misses ls
caches caches~ out
Performance counter stats for 'ls':
5,708 cache-misses
0.002822122 seconds time elapsed
感謝您的回答。你在使用這個工具嗎?您如何解釋被稱爲硬件事件而不是硬件緩存事件的緩存未命中事件。我雖然是其他人的總和,但根本沒有。 –
此外,「加載」和「預取」之間有什麼區別? –
@ManuelSelva:我自己並沒有使用'perf',所以我沒有什麼實際經驗。特別是,與所有硬件緩存事件相比,我不確定「cache-missses」事件實際描述的是什麼。我並不完全確定預取:有一種方法可以在應用程序級別觸發預取以及硬件預測的數據訪問的自動預取。其中之一或兩者都可能是預取計數器實際描述的內容。 'perf'文件提到製造商規格的更多細節,但我還沒有找到相關章節。 – MvG