性能缓存事件的含义是什么?

我试图弄明白为什么修改后的C程序比未修改的计数器部分运行得更快(我添加了很少的代码行来执行一些额外的工作)。在这种情况下,我怀疑“缓存效果”是主要的解释(指令缓存)。因此,我达到了perf(https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但不幸的是,我无法理解其输出有关缓存未命中的含义

提供了几个有关缓存的事件:

缓存引用[硬件事件]
缓存未命中[硬件事件]
L1数据缓存加载[硬件缓存事件]
L1数据缓存加载未命中[硬件缓存事件]
L1 dcache存储[硬件缓存事件]
L1 dcache存储未命中[硬件缓存事件]
L1 dcache预取[硬件缓存事件]
L1 dcache预取未命中[硬件缓存事件]
L1 icache加载[硬件缓存事件]
L1 icache加载未命中[硬件缓存事件]
L1 icache预取[硬件缓存事件]
L1 icache预取未命中[硬件缓存事件]
LLC加载[硬件缓存事件]
LLC加载未命中[硬件缓存事件]
LLC存储[硬件缓存事件]
LLC存储未命中[硬件缓存事件]
LLC预取[硬件缓存事件]
LLC预取未命中[硬件缓存事件]
dTLB加载[硬件缓存事件]
dTLB加载未命中[硬件缓存事件]
dTLB存储[硬件缓存事件]
dTLB存储未命中[硬件缓存事件]
dTLB预取[硬件缓存事件]
dTLB预取未命中[硬件缓存事件]
iTLB加载[硬件缓存事件]
iTLB加载未命中[硬件缓存事件]
分支加载[硬件缓存事件]
分支加载未命中[硬件缓存事件]
节点加载[硬件缓存事件]
节点加载未命中[硬件缓存事件]
节点存储[硬件缓存事件]
节点存储未命中[硬件缓存事件]
节点预取[硬件缓存事件]
节点预取未命中[硬件缓存事件]

我在哪里可以找到关于这些字段的解释?缓存未命中事件始终小于其他事件。这个事件衡量的是什么

在以下示例中,如何解释ls的26760 L1 icache加载未命中与5708缓存未命中

性能统计-e L1 icache加载未命中ls
缓存缓存~out
“ls”的性能计数器统计信息:
26760 L1 icache负载未命中
0.002816690秒经过的时间
perf stat-e缓存未命中ls
缓存缓存~out
“ls”的性能计数器统计信息:
5708缓存未命中
0.00282122秒经过的时间

一些答案:

  • L1是一级缓存,是最小、最快的一级缓存LLC表示缓存层次结构的最后一级,因此表示最大但最慢的缓存
  • ivs.d区分指令缓存和数据缓存。只有L1以这种方式拆分,其他缓存在数据和指令之间共享
  • TLB指的是转换查找缓冲区,一种将虚拟地址映射到物理地址时使用的缓存
  • 不同的TLB计数器取决于指定的地址引用的是指令还是某些数据
  • 对于所有数据访问,根据给定的内存位置是读取、写入还是预取(即检索以便稍后读取),保留不同的计数器
  • 未命中数表示访问给定数据项但缓存中不存在的频率

发表评论