频率
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