有没有办法使用perf“实时”动态地监控汇编指令?我已经看到,如果我使用perf record /perf top,然后点击所记录的函数,我可以看到汇编指令,但我是否可以直接监控特定的汇编指令,例如,rdtsc或clflush,例如,在特定时间段内使用perf的进程调用它们的频率?
我在Skylake和Haswell上使用Debian 9。
sudo uname -a
Linux bla 4.9.0-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
sudo /proc/config.gz
返回command not found
。
任何帮助/想法我们都很感激。
发布于 2018-11-22 11:33:25
是的,您当然可以构建一些动态采样在主机上运行的指令的东西。
基本思想是定期采样您感兴趣的进程(可能是“所有进程”),并检查采样指令指针周围的区域,以确定这样的采样必须已经执行的指令:例如,通过反汇编直到下一个条件分支,或者可能直到基本块的末尾。
重复这样做,您将获得已执行指令的直方图,然后您可以估计rdtsc
或任何其他感兴趣的指令的运行频率。
这实际上并不困难:大多数逻辑已经存在于perf top
、perf record
和perf report
中:只需将来自perf top
的采样代码与来自perf top
和/或perf report
的注释代码结合起来,如上所述。也许您甚至可以在事后执行此操作:使用perf record --all-cpus
收集样本,然后运行perf script
或以其他方式解析文件以监视指令。
每个示例只会给你提供一个小的执行指令窗口,所以如果你需要准确地捕捉偶然出现的rdtsc
,这根本不会起作用。
你可以通过利用“最后一个分支记录”特性来扩展每个样本的“窗口”,基本上可以基于最近的分支回到过去,并分解所有这些基本块,这将使你的每个样本的覆盖范围扩大很多。
https://stackoverflow.com/questions/53390392
复制相似问题