如何测量多线程应用程序中的缓存性能?

Posted

技术标签:

【中文标题】如何测量多线程应用程序中的缓存性能?【英文标题】:how do I measure cache performance in multithreaded applications? 【发布时间】:2012-01-25 01:37:40 【问题描述】:

标题几乎概括了它。我需要基于每个线程的缓存命中/未命中之类的东西。我如何获得这些信息? Cachegrind 似乎不起作用,因为我的顺序程序给出了执行的 X 指令的计数,以及我的并行程序的 Y 的计数,除了 X = Y 之外,一切正常。我假设 Cachegrind 不适合线程?我可以使用任何其他工具吗?谢谢。

【问题讨论】:

【参考方案1】:

您可以使用 perf 从硬件性能计数器中获取所需的信息。

尝试:

$ perf stat -e cache-misses,cache-references /bin/ls /tmp/
...

Performance counter stats for '/bin/ls /tmp/':

             3,534 cache-misses              #   16.605 % of all cache refs    
            21,283 cache-references                                            

       0.001649284 seconds time elapsed

【讨论】:

但是perf stat 不能输出单独的每线程计数器;仅摘要... perf.wiki.kernel.org/index.php/Tutorial#Counting_with_perf_stat "默认情况下,perf stat 对进程的所有线程以及后续子进程和线程进行计数。这可以使用 -i 选项进行更改。无法获得每个线程的计数细分或每个进程。”

以上是关于如何测量多线程应用程序中的缓存性能?的主要内容,如果未能解决你的问题,请参考以下文章

读 perf 笔记 简写

java编程,如何彻底理解volatile关键字?

如何测量 .NET 内存缓存 4.0 的当前大小?

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

多线程性能分析

Nginx多进程高并发低时延高可靠机制在滴滴缓存代理中的应用