在虚拟化环境中测量时间

Measuring time in a virtualized environment

我使用一些共享内存库(例如 openmp、tbb 等)开发了一系列微基准测试,以检查它们如何缩放不同的线程数。

目前我运行在 4 核处理器上运行它们,结果相当合理,但我在加速图上只得到 3 分。

为了获得更多数据并对它们进行更广泛的分析,我计划 运行 在 32 核机器上进行它们。

一种可能性是购买 32 核处理器,例如 AMD Epyc 或 Intel Xeon,它们有点贵,但我知道我会用它们得到什么。 我的第二个更便宜的选择是 运行 将它们放在云端,例如亚马逊 AWS 或微软 Azure。

那么,在做出选择之前,我需要澄清一下:

据我了解,AWS 可以制造一台具有任意多内核的机器,但它们都是虚拟化的。

当我 运行 一个应用程序时,它的执行时间测量有多可靠?

我是否会获得与 运行 真正的 32 核处理器上的应用程序相同的可扩展性?

根据数十年的虚拟化性能经验,这是一个需要谨慎的领域。很大程度上取决于您的虚拟机与其他虚拟机之间的争用程度,在许多云环境中,如果没有工具,很难知道这一点。 此外,不清楚您是否在讨论经过的时间 and/or 处理器时间。两者都可能受到虚拟化的影响,尽管我的经验是经过的时间变化更大。 我无法谈论所列环境,但在 IBM Z 虚拟化解决方案中,我们提供了涵盖虚拟机消耗的处理器时间和管理程序消耗的处理器时间的指标。出于您的目的,您只需要虚拟机使用的那些。抱歉,我不知道您提到的任何一个平台是否提供该信息。 在这些类型的实验中,我们经常发现进行更多测量迭代以查看 运行 时间变异性很有用。