我发现这种行为perf top -e cache-misses:pp -p <my_pid>
很令人困惑。我拥有一台 Intel i5-3230M,运行内核 4.4.5 64 位。
如果我只是运行该命令,我基本上不会从我的应用程序中获得任何样本(具有大型数据集的数值模拟,因此它肯定必须显示缓存未命中),但几乎只能从一些内核函数中获得样本,例如intel_pmu_lbr_enable_all
、native_write_msr_safe
、native_read_msr_safe
、__intel_pmu_lbr_disable
。如果我使用 限制对用户空间的点击-K
,我只会在我的应用程序中获得点击,但数量非常低。如果我删除“精确”( p
) 修饰符,我会得到更多的命中,但来自操作码的命中显然不会导致内存加载/写入。
我该如何解释这种行为?到底什么才算是“缓存未命中”?