perf通过硬件性能计数器来获取cache miss的信息。硬件性能计数器是处理器提供的特殊寄存器,用于记录不同类型的事件发生的次数。对于cache miss,perf会使用相应的计数器来记录缓存未命中的次数。 在x86架构中,perf使用的是指令计数器(Instruction Counter)和缓存计数器(Cache Counter)来统计cache miss。指令计数器记录了程...
在cache miss 过多的场景下,perf 能够评估程序对各级 cache 的访问次数和丢失次数。利用 perf stat 命令可以查看与 cache 相关的性能事件,如 L1-dcache-loads、L1-dcache-load-miss 等,了解 cache 的利用情况。如果发现 cache miss 率过高,可以进一步分析代码,优化数据访问模式以提高 cache 命中率。 对于内存 I...
使用perf 来检测程序执行期间由此造成的cache miss的命令是perf stat -e cache-misses ./exefilename,另外,检测cache miss事件需要取消内核指针的禁用(/proc/sys/kernel/kptr_restrict设置为0)。 4.cache 优化实例 4.1数据合并 有两个数据A和B,访问的时候经常是一起访问的,总是会先访问A再访问B。这样A[i]和B...
使用perf 来检测程序执行期间由此造成的cache miss的命令是perf stat -e cache-misses ./exefilename,另外,检测cache miss事件需要取消内核指针的禁用(/proc/sys/kernel/kptr_restrict设置为0)。 4.cache 优化实例 4.1数据合并 有两个数据A和B,访问的时候经常是一起访问的,总是会先访问A再访问B。这样A[i]和B...
perf stat -p <PID> -e cache-references,cache-misses -- sleep <秒数> 也可以随程序一起运行,或者用 -t 挂载到具体线程,和1.1节中是一样的。 这里我经过了20秒的采集后,得到了如下的数据: perf stat 统计事件发生频率,例。 cache-references 是 cache 总访问数,cache-misses 是 cache miss 数。右边...
以cache miss 事件触发采样便可以知道 cache miss 的分布,即 cache 失效经常发生在哪些程序代码中。如此等等。 因此让我们先来了解一下 perf 中能够触发采样的事件有哪些。 使用perf list(在root权限下运行),可以列出所有的采样事件 事件分为以下三种:
以cache miss 事件触发采样便可以知道 cache miss 的分布,即 cache 失效经常发生在哪些程序代码中。如此等等。 因此让我们先来了解一下 perf 中能够触发采样的事件有哪些。 使用perf list(在root权限下运行),可以列出所有的采样事件
以cache miss 事件触发采样便可以知道 cache miss 的分布,即 cache 失效经常发生在哪些程序代码中。如此等等。 因此让我们先来了解一下 perf 中能够触发采样的事件有哪些。 使用perf list(在root权限下运行),可以列出所有的采样事件 事件分为以下三种:
从前面我们可以知道问题大概率是在四个子线程上,并且存在比较多的cache miss。因此我们可以尝试用perf c2c来查看是否存在伪共享情况: perf c2c 开始收集: perf c2c record 查看结果: perf c2c report 这里我们重点看HITM(LLC Misses to Remote cache),表示的是由cache的修改导致远端的cache失效的占比,由Load Remot...
处理器厂商针对这种情况,在硬件中加入了 PMU 单元,即 performance monitor unit。PMU 允许软件针对某种硬件事件设置 counter,此后处理器便开始统计该事件的发生次数,当发生的次数超过 counter 内设置的值后,便产生中断。比如 cache miss 达到某个值后,PMU 便能产生相应的中断。