Valgrind 与 Linux 性能相关性

标签 valgrind perf cachegrind

假设我选择perf events instructionsLLC-load-missesLLC-store-misses 。进一步假设我测试一个程序 prog 改变其输入。对于相同的输入和相同的计数器,valgrind 是否应该为我提供“相同”的功能结果?也就是说,如果 perf 中的一个值上升,valgrind 中的值应该总是相同吗?在分析我的代码期间,我应该注意 valgrind 作为模拟是否有任何影响?

编辑:顺便说一句,在人们因为我没有亲自尝试而拷问我之前,我不得不说我(有点)有,问题是我有一个 Sandybridge 处理器,并且 perf 有一个“错误”,阻止我测量 LLC-* 事件。有补丁,但我不想重新编译我的内核...

最佳答案

嗯,Cachegrind 是一个缓存模拟器。尽管它尝试模仿硬件的某些特征(缓存大小、关联性等),但它并不会模拟系统的每个功能和行为。因此,在某些情况下您可能会看到一些差异。

例如,Valgrind 的文档指出“Cachegrind 模拟了 2004 年左右主流桌面/服务器处理器的典型分支预测器”。 Sandy Bridge 处理器于 2011 年首次出现,您可以猜测自 2004 年以来分支预测器已经有了很大的改进。

话虽这么说,Valgrind 仍然是您工具箱中的一个很棒的工具。

Sandy Bridge 处理器上的 perf LLC 事件有什么问题?我每天在我的 Sandy Bridge 笔记本电脑上工作时使用这些事件,它按预期工作(archlinux 64 位,linux 3.6)。

关于Valgrind 与 Linux 性能相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906911/

相关文章:

c - Valgrind 的输出缺少基本值

c++ - 全局重载运算符 new/new[] delete/delete[] C++

linux - 为什么命令 "perf list"在相同版本的 RedHat Linux 上产生不同的输出?

linux - 硬件缓存事件和性能

windows - Wincachegrind 报错

c++ - std::string 内存泄漏

c++ - 带有模板的 vector 在打印上下文时在 Valgrind 中给出错误

linux - 在 VirtualBox guest 中运行 perf

c - 使用cachegrind和callgrind的不同读写计数

performance - 为什么 cachegrind 忽略了 L3 缓存,这与文档相矛盾?