如何使用linux perf并解释其输出以了解CPU高速缓存未命中?

时间:2019-03-09 20:09:31

标签: linux cpu-cache perf

我正在尝试测量内存引用错过任何CPU缓存并需要从内存中获取缓存行的次数。我有一个非常简单的程序,可以将1亿个4字节整数加载到数组中,然后对其进行扫描或随机探测。我测量时间,然后使用性能报告各种与缓存有关的事件:LLC-load,LLC-load-misses,LLC-store,LLC-store-misses。我正在使用Pop OS 18.10(Ubuntu 18.10的一个变体)。

我通过三种方式运行程序:

1)只需加载数组(100m整数)。

2)加载阵列并按物理顺序扫描。

3)加载阵列并读取100m随机阵列位置。

#3比#2慢40倍,这并不奇怪。

我在知道要检查哪些性能事件以及如何解释结果方面都遇到了麻烦:

  • 我通过谷歌搜索发现了LLC- *事件,但“性能列表”未提及它们。

  • 我从加载和扫描运行(#2,#3)中减去仅加载运行(#1)的事件计数。与物理访问(#3)相比,物理扫描(#2)的数字通常要少。但是通过阅读文档并查看数字,我真的不理解各种事件代表什么。

  • 性能计数是对事件计数还是对事件进行采样?如果这是一个真实的数字,那么我真的无法理解我看到的数字。 (例如,LLC-load-misses事件的数量与应该需要的高速缓存行传输的数量不匹配。)

0 个答案:

没有答案