0

我有一个在戴尔服务器中虚拟化的 RHEL6.5 系统之一上运行 20 个线程(增强线程)的 C++ 程序。结果是确定性的,但 cpu 时间和墙时间在不同的运行中变化很大。有时,完成需要 200s cpu 时间,有时可能需要 300s cpu 时间才能完成。这让我很困扰,因为性能是我们测试的标准。

我已经将最初使用的 boost::timer::cpu_timer 更改为 wall/cpu 时间计算,并使用 sys apis 'clock_gettime' 和 'getrusage'。它没有帮助。

是因为管理程序(Vmware)的“窃取时间”吗?'getrusage' 收集的用户/系统时间中是否包含窃取时间?

有人知道这方面的知识吗?非常感谢。

4

1 回答 1

0

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

由于您使用的是虚拟机,您的 CPU 如何与服务器的其他用户共享。甚至可能共享相同的单个 CPU 内核,因此并非每次您都分配相同的 CPU 资源[这是您上面提到的窃取时间]。

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

于 2019-03-22T07:48:40.083 回答