在英特尔 x86 上,Linux用途 https://stackoverflow.com/a/52172985/149138事件l1d.replacements
来实施其L1-dcache-load-misses
event.
该事件定义如下:
计数 L1D 数据线更换,包括机会性更换
替换,以及需要停顿替换或
块替换。
或许我天真地以为perf
使用类似的东西mem_load_retired.l1_miss
,支持 PEBS 并定义为:
计算至少有一个微指令丢失的退休加载指令
L1 缓存。 (支持PEBS)
事件值通常不是非常接近,有时差异很大。例如:
$ocperf stat -e mem_inst_retired.all_loads,l1d.replacement,mem_load_retired.l1_hit,mem_load_retired.l1_miss,mem_load_retired_fb_hit head -c100M /dev/urandom > /dev/null
Performance counter stats for 'head -c100M /dev/urandom':
445,662,315 mem_inst_retired_all_loads
92,968 l1d_replacement
443,864,439 mem_load_retired_l1_hit
1,694,671 mem_load_retired_l1_miss
28,080 mem_load_retired_fb_hit
有超过17个times更多“L1 未命中”的测量结果为mem_load_retired.l1_miss
相比于l1d.replacement
。相反,您还可以找到以下示例:l1d.replacement
远高于mem_load_retired
柜台。
到底是什么l1d.replacement
测量,为什么在内核中选择它,以及它是否比 L1 d-cache 未命中更好的代理mem_load_retired.l1_miss
?