如何统计QEMU从运行开始到结束执行的客户指令数量?

Cir*_*四事件 3 qemu

我想对 QEMU 每秒的客户指令进行基准测试,以将其与其他模拟器进行比较。

如何获取访客指令数?我对用户模式和完整系统模式都感兴趣。

我现在唯一的解决方案是使用简单跟踪exec_tb-d in_asm如何使用 QEMU 的简单跟踪后端来记录所有指令?然后从那里计算指令。但这可能会由于输出操作而大大降低模拟性能,因此我可能必须运行测试程序两次,一次有跟踪,另一次没有跟踪,并希望两次执行是相似的(应该是,特别是对于单线程用户模式模拟)。

我看到了这个-icount选项,从名字上听起来很有希望,但是当我将它传递给 QEMU 4.0.0 时,我没有看到任何事情发生。它应该在某处打印指令计数吗?以下补丁似乎未合并,建议不要:https://lists.gnu.org/archive/html/qemu-devel/2015-08/msg01275.html

tha*_*mes 5

基本分析

为了跟进 Peter 的回答,我最近遇到了一种情况,我想获取在 QEMU 下运行的程序的指令计数(我正在使用 v4.2.0,这是第一个可用插件的版本)。

示例插件之一insn.c完全符合您的要求,并返回插件退出时执行的指令的计数。

(我假设您已经知道如何运行 QEMU,所以我将把它简化为重要的标志)

qemu-system-arm ... -plugin qemu-install-dir/build/tests/plugin/libinsn.so,arg=inline -d plugin
Run Code Online (Sandbox Code Playgroud)

第一部分加载插件并向其传递一个“内联”参数。下一部分启用插件的打印。-D filename您可以通过添加到命令行调用将插件输出重定向到不同的文件。

更高级的分析

当我寻找可能的方法来分析在 QEMU 下运行的程序时,这是我的搜索中唯一有希望的结果之一。本着为将来的其他搜索创建良好记录的精神,这里有一些我为此编写的代码的链接。

分析插件代码文档

免责声明:上面的代码是我写的。