3

我有点卡在这里。

这个想法是我想获得一个程序在执行期间运行的每条指令的文件。我想只用手中的可执行文件(无源)来完成它,并且能够确定什么时候在什么地址上发生了什么操作。

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

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

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

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

系统 2:Ubuntu 12.04 在系统上使用 2x AMD 十六核 Opteron 型号 6274

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

这可能吗/我该怎么做?我知道调试器,您可以使用它们来逐步执行所有操作,但我没有可用的源代码。

4

1 回答 1

1

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

要更深入(进入管道),您可能需要查看免费的 ptlsim (http://www.ptlsim.org/)

于 2012-09-07T13:40:30.957 回答