C 你们能用Qemu模拟器检查程序的性能吗?
比如说,如果我使用Qemu运行一个ARM模拟器,是否可以像在真正的ARM处理器上一样找到程序的执行时间。换句话说,如果我在模拟器上运行的程序中使用函数(如C 你们能用Qemu模拟器检查程序的性能吗?,c,linux,arm,qemu,C,Linux,Arm,Qemu,比如说,如果我使用Qemu运行一个ARM模拟器,是否可以像在真正的ARM处理器上一样找到程序的执行时间。换句话说,如果我在模拟器上运行的程序中使用函数(如gettimeofday)来检查经过的时间,经过的时间会通过周期精确模拟准确给出吗?我们公司在这一问题上的调查得出结论,Qemu(用于ARM)不是周期精确的。如果我没记错的话,周期精度不是Qemu的目标,相反,它的目标是快速仿真。还要注意的是,确切的时间取决于相当不可预测的事情,如缓存命中和未命中。它还将取决于所选择的实际架构。请注意,ARM只
gettimeofday
)来检查经过的时间,经过的时间会通过周期精确模拟准确给出吗?我们公司在这一问题上的调查得出结论,Qemu(用于ARM)不是周期精确的。如果我没记错的话,周期精度不是Qemu的目标,相反,它的目标是快速仿真。还要注意的是,确切的时间取决于相当不可预测的事情,如缓存命中和未命中。它还将取决于所选择的实际架构。请注意,ARM只是一个指令集IP,存在几种不同的实现。如果再加上一个操作系统被模拟,事情会变得更加不可预测
我们使用来自ARM的模拟器来评估性能,但对于最新版本的ARM体系结构来说,即使是这个模拟器也不是完全循环准确的。GEM5
我见过一位对此的研究人员。评估其准确性。我创造了
正如Bryan提到的那样,QEMU是为速度而设计的:只有有效的x86API行为才能达到,而不一定是以正确的周期数或相同的管道顺序。这也称为功能仿真
此外,DRAM内存访问被认为是即时的,因此模拟缓存也没有意义。正如我们所知,当前的CPU基本上是内存延迟隐藏机器
另一方面,周期精确模拟器也模拟CPU内部,因此速度慢得多
问题的根源当然是没有充分记录处理器的性能特性,供应商不会发布这些特性来防止知识产权泄漏
GEM5似乎实现了通用CPU内部构件的通用版本,因此它应该比功能仿真器更精确地进行周期模拟,但如果没有内部人员的了解,真正精确的周期模拟可能是不可能的
然后,第三方仿真实现人员必须根据实验和现有文档对CPU性能进行反向工程
一些关键的“内部”是缓存、管道和分支预测
相关的:
- 提出如何实现周期精确模拟器的问题: