linux x86 性能调试记录

频率
urbostat是intel针对自己的x86 CPU,做的一个CPU频率、能耗监控的用户态程序,位于linux代码的tools/power/x86/turbostat目录下,编译也很简单,可以直接在这个目录下make,就生成二进制文件了。

这个工具在监控cpu运行频率方面有很大用途。

cache伪共享
当应用在 NUMA 环境中运行,或者应用是多线程的,又或者是多进程间有共享内存,满足其中任意一条,那么这个应用就可能因为 Cache Line 伪共享而性能下降。

但是,要怎样才能知道一个应用是不是受伪共享所害呢?Joe Mario 提交的 patch 能够解决这个问题。Joe 的 patch 是在 Linux 的著名的 perf 工具上,添加了一些新特性,叫做 c2c, 意思是“缓存到缓存” (cache-2-cache)。

Redhat 在很多 Linux 的大型应用上使用了 c2c 的原型,成功地发现了很多热的伪共享的 Cache Line。 Joe 在博客里总结了一下 perf c2c 的主要功能:

发现伪共享的 Cache Line
谁在读写上述的 Cache Line,以及访问发生处的 Cache Line 的内部偏移
这些读者和写者分别的 pid, tid, 指令地址,函数名,二进制文件
每个读者和写者的源代码文件,代码行号
这些热点 Cache Line 上的,load 操作的平均延迟
这些 Cache Line 的样本来自哪些 NUMA 节点, 由哪些 CPU 参与了读写
perf c2c 和 perf 里现有的工具比较类似:

先用 perf c2c record 通过采样,收集性能数据
再用 perf c2c report 基于采样数据,生成报告
如果想了解 perf c2c 的详细使用,请访问: PERF-C2C(1)

这里还有一个完整的 perf c2c 的输出的样例。

最后,还有一个小程序的源代码,可以产生大量的 Cache Line 伪共享,用以测试体验: Fasle sharing .c src file

发布了25 篇原创文章 · 获赞 13 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章