在Intel x86上,Linux uses事件l1d.replacements
用于实现其L1-dcache-load-misses
事件。
此事件的定义如下:
计算L1D数据线的替换情况,包括机会 替代品,以及需要停顿换货或 替换区块。
我可能天真地希望perf
使用mem_load_retired.l1_miss
之类的东西,它支持PEBS,并且定义为:
计算至少有一个未完成的uop的退休加载指令 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
与mem_load_retired.l1_miss
相比,l1d.replacement
衡量的“ L1未命中”次数多于17次 。相反,您还可以找到l1d.replacement
比mem_load_retired
计数器高得多的示例。
l1d.replacement
到底是什么测量值,为什么要在内核中选择它,并且它是L1 d缓存未命中比mem_load_retired.l1_miss
更好的代理?