Valgrind与Linux perf的相关性

8
假设我选择perf事件instructions, LLC-load-misses, LLC-store-misses。进一步假设我通过改变程序输入来测试一个名为prog的程序。对于相同的输入和相同的计数器,valgrind是否应该为我提供“相同”的功能结果?也就是说,如果perf中的一个值增加了,valgrind中的一个值应该始终执行相同的操作吗?在进行代码性能分析时,valgrind作为模拟器是否会产生任何影响,我需要注意什么? 编辑:顺便说一下,在人们批评我没有自己进行实验之前,我不得不说我已经(有点)这样做了,问题在于我有一台Sandybridge处理器,而perf有一个“错误”,导致我无法测量LLC-*事件。有一个补丁,但我不想重新编译我的内核...
1个回答

6
好的,Cachegrind是一个缓存模拟器。尽管它试图模拟一些硬件特性(缓存大小,关联度等),但它并没有模拟系统的每一个特性和行为。因此,在某些情况下,您可能会看到一些差异。
例如,Valgrind的文档指出,“Cachegrind模拟的分支预测器旨在成为2004年左右主流桌面/服务器处理器的典型代表”。Sandy Bridge处理器于2011年首次出现,可以猜测自2004年以来分支预测器已经有了很大的改进。
话虽如此,Valgrind仍然是一个非常好用的工具。
对于Sandy Bridge处理器,perf的LLC事件有什么问题?我在我的Sandy Bridge笔记本电脑上每天都使用这些事件,并且它们按预期工作(archlinux 64位,linux 3.6)。

似乎我的 SandyBridge 版本的 perf 无法访问 LLC 计数器。我得到了这个:http://comments.gmane.org/gmane.linux.kernel.perf.user/899,虽然有几年历史了,但与此相关:http://lwn.net/Articles/430100/。 - Dervin Thunk
哦,我不知道这个 bug。但是我再试了一下,现在在当前内核上似乎不再是问题了(但我不知道修复是何时合并的)。 - Moncef M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接