CPU时间在虚拟机中跳很多



我在Dell Server中虚拟化的RHEL6.5系统之一上运行了一个C 程序,该程序在RHEL6.5系统之一上运行了20个线程(Boost threads)。结果是确定性的,但是CPU时间和墙壁时间在不同的运行中有很大差异。有时,需要200秒的CPU完成,有时可能需要300秒的CPU时间才能完成。这使我感到困扰,因为性能是我们测试的标准。

我已经更改了最初使用的boost :: Timer :: CPU_Timer用于墙/CPU时间计算,并使用sys apis'clock_getTime'和'getRusage'。它无济于事。

是由于管理程序(VMware)的"窃取时间"?" getRusage"收集的用户/系统时间中包含窃取时间?

有人对此有所了解吗?非常感谢。

如果您提供了一些额外的信息,这将很有用。例如,您的线程取决于吗?意思是它们之间有任何同步吗?

由于您使用的是虚拟机,因此您的CPU如何与服务器的其他用户共享。也许即使是同一单个CPU核心也可以共享,因此,每次您拥有相同的CPU资源分配时(这是您上面提到的窃取时间)。

您还提到CPU时间是不同的:这是在用户代码中花费的时间。如果您在线程之间具有同步性(例如静音等),则取决于操作系统如何唤醒线程等,所有时间都可能会有所不同。

最新更新