Linux 监控ubuntu中运行程序的指令?

Linux 监控ubuntu中运行程序的指令?,linux,performance,profiling,x86-64,instructions,Linux,Performance,Profiling,X86 64,Instructions,我有点困在这里了 我的想法是,我想得到一个文件,其中包含程序在执行过程中运行的每条指令。我只想用手头的可执行文件(没有源代码)来完成它,并且能够确定什么时候在什么地址上发生什么操作 例如,我希望能够在Google Chrome、Firefox等平台上运行它 我想把它用于我正在开发的性能预测系统。我想如果我能够获得在系统1上执行的每个指令的顺序,我可以尝试模拟/建模在系统2上运行的相同程序的运行时间,因为我能够预测(尽管我不知道是否100%准确)一级/二级缓存未命中、一级/二级缓存命中、TLB命中

我有点困在这里了

我的想法是,我想得到一个文件,其中包含程序在执行过程中运行的每条指令。我只想用手头的可执行文件(没有源代码)来完成它,并且能够确定什么时候在什么地址上发生什么操作

例如,我希望能够在Google Chrome、Firefox等平台上运行它

我想把它用于我正在开发的性能预测系统。我想如果我能够获得在系统1上执行的每个指令的顺序,我可以尝试模拟/建模在系统2上运行的相同程序的运行时间,因为我能够预测(尽管我不知道是否100%准确)一级/二级缓存未命中、一级/二级缓存命中、TLB命中/未命中、页面错误,浮点乘法运算等所花费的时间

我想尝试在两种不同的系统上执行此操作:

系统1:Intel Core 2 Duo CPU上的Ubuntu 10.10

系统2:Ubuntu12.04,安装在2x AMD十六核Opteron 6274型系统上

(我当然可以根据需要更改操作系统,但如果可能的话,我更愿意使用Ubuntu)

这可能吗/我如何着手做这件事?我知道使用调试器,您可以使用它们来逐步完成所有操作,但我没有可用的源代码。

我认为,您可以使用qemu(甚至bochs)或valgrind来监视每个执行的指令。它们是x86二进制翻译工具(不包括bochs,它是x86代码的解释器)。有一个名为
cachegrind
(+kcachegrind gui)的valgrind工具,它可以通过检测每个内存访问并模拟一些一级/二级缓存模型(大小可以通过命令行选项配置)来模拟缓存


若要深入了解(管道),您可能需要查看免费SIM卡(http://www.ptlsim.org/)

top不是为您做的吗?您不需要源代码在调试器中运行某些东西,虽然它显然有助于您了解所看到的内容。但如果您的模型完全忽略每个指令的延迟(由于缓存和每个CPU的超标量体系结构的详细建模),我看不出执行的指令列表如何提供衡量或预测性能的方法。@TJD,在这种情况下,你能推荐一个更好的方法吗?我正试图为我的硕士论文做这件事,我有点困在寻找解决这个问题的策略上。@user982835,在我的研究生院经历中,我们使用了SimpleScalar(),它可以让你做一个真正详细的周期精确模拟,其中包括缓存和处理器的实现细节,比如无序执行,分支预测等。