你能检查使用Qemu模拟器运行的程序的性能吗?

说如果我正在使用Qemu运行ARM模拟器,是否有可能find一个程序的执行时间,就像在真正的ARM处理器上一样。 换句话说,如果我在模拟器上运行的程序中使用诸如gettimeofday函数来检查stream逝的时间,那么通过周期精确的模拟可以准确给出stream逝的时间吗?

在我们公司的这个问题上的调查得出的结论是,Qemu(对于ARM)不是周期准确的。 如果我没有记错的话,循环精度不是Qemu的目标,而是瞄准快速仿真。 还要小心,确切的时机取决于相当不可预知的事情,如缓存命中和未命中。 这也将取决于所选择的实际架构。 请注意,ARM仅仅是一个指令集IP,存在几个不同的实现。 如果另外一个操作系统被模拟,事情变得更加难以预料。

我们使用来自ARM的模拟器来评估性能,但即使这样,对于最新版本的ARM体系结构来说,它也不是完全循环的。

GEM5

我见过一个研究人员使用gem5 。 本文评估它是多么准确。

正如Bryan所提到的,QEMU是为速度而设计的:只有一个有效的x86 API行为必须达到,不一定是正确的周期数或相同的流水线顺序。 这也被称为功能仿真。

另一方面循环精确的模拟器,也模拟CPU的内部,因此速度较慢。

问题的根源当然是处理器的不足之处,这些厂商为了防止知识产权泄露而不予以释放。

GEM5似乎实现了通用CPU内部的通用版本,所以它应该比功能仿真器更精确的周期,但是如果没有内部知识,真正的周期精确仿真是不可能的。

第三方仿真实现者必须从实验和现有文档中逆向设计CPU性能。

一些关键的“内部”是高速缓存,流水线和分支预测。

有关:

  • 询问循环准确模拟器的可行性: PTLsim等CAS仿真器如何实现对x86硬件的周期精确仿真?
  • ARM周期精确模拟器