7

在 Intel x86 上,Linux 使用事件l1d.replacements来实现其L1-dcache-load-misses事件。

该事件定义如下:

计算 L1D 数据线替换,包括机会替换,以及需要停止替换或替换块的替换。

也许天真地,我本来希望perf使用类似 的东西mem_load_retired.l1_miss,它支持 PEBS 并被定义为:

计算在 L1 缓存中丢失的至少一个 uop 的已停用加载指令。(支持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                                     

与 相比,“L1 未命中”的数量超过 17。相反,您还可以找到比计数器高得多的示例。mem_load_retired.l1_missl1d.replacementl1d.replacementmem_load_retired

究竟l1d.replacement测量的是什么,为什么在内核中选择它,它是否比 L1 d-cache 未命中更好mem_load_retired.l1_miss

4

0 回答 0