linux perf 是不是准确测量多线程 C 程序的缓存未命中?

Posted

技术标签:

【中文标题】linux perf 是不是准确测量多线程 C 程序的缓存未命中?【英文标题】:Is linux perf accurate for measuring cache misses for multithread C program?linux perf 是否准确测量多线程 C 程序的缓存未命中? 【发布时间】:2021-03-09 02:55:14 【问题描述】:

linux perf 可以测量多线程程序的缓存未命中,还是只能报告主线程的结果?我在使用 pthread 的 C 程序上使用它,似乎缓存未命中数低于预期数。

【问题讨论】:

【参考方案1】:

是的,perf stat 是所有线程的准确总数。 (除非您的 CPU 有一个错误,其中某个 PMU 事件计数过多或不足。这些确实会发生,而不是实际架构状态的正确性错误,因此请检查勘误表,也就是英特尔 CPU 的“规格更新”。)

不过,请确保您准确了解每个缓存事件的重要性,例如L1d-misses 在像 Skylake 这样的现代 Intel 上计数 l1d.replacement,因此同一行上的多个未命中只是一个替代品。 (How does Linux perf calculate the cache-references and cache-misses events)。

还要注意,如果内存可以跟上,硬件预取可以避免大量顺序访问的未命中。也相关:L2 instruction fetch misses much higher than L1 instruction fetch misses


也相关:Difference Between mem_load_uops_retired.l3_miss and offcore_response.demand_data_rd.l3_miss.local_dram Events 详细说明了这些特定事件的确切数量。

Performance Counters for DRAM Accesses What is the meaning of Perf events: dTLB-loads and dTLB-stores? Hardware cache events and perf

【讨论】:

以上是关于linux perf 是不是准确测量多线程 C 程序的缓存未命中?的主要内容,如果未能解决你的问题,请参考以下文章

用于测量 Linux 中 NUMA 节点缓存未命中/命中的工具?

perf 在 Linux 中运行进程

如何在 Linux 多线程环境中测量函数的总执行时间

使用 linux perf 工具测量应用程序的 FLOP

我看不到 perf 的功率/能量核心选项来测量功耗

linux多线程控制详述