linux - 在ubuntu中监视正在运行的程序的指令?

标签 linux performance profiling x86-64 instructions

我有点卡在这里。

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

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

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

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

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

系统 2:Ubuntu 12.04,配备 2 个 AMD 十六核皓龙型号 6274 的系统

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

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

最佳答案

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

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

关于linux - 在ubuntu中监视正在运行的程序的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271051/

相关文章:

linux - awk 命令问题以识别定界符

linux - 使用php5.3安装xdebug

与 C 中的 sqrt() 函数混淆

java - Java 函数的递归版本在第一次调用时比迭代慢,但在调用之后更快。为什么是这样?

Python:比较两个数组的元素

java - jProfiler 不提供方法级别的统计信息

Python 子进程将调用输出存储到文件

javascript - 用于大型 Web 应用程序的 native 或 jQuery

lambda 表达式的 Java 堆转储分析

wpf - Application.Run 是我的应用程序中 CPU 消耗最高的函数;我可以优化什么?