3

与真实硬件相比,在虚拟机中执行的基准测试的可信度如何?

让我们剖析一个具体的情况。假设我们想要对最近代码更改的性能影响进行基准测试。为简单起见,假设工作负载完全受 CPU 限制(尽管 IO 限制和混合工作负载也很重要)。假设这台机器在 VirtualBox 下运行,因为它是最好的;)

假设我们测量了原始代码和新代码,新代码速度提高了 5%(在虚拟机中进行基准测试时)。我们是否可以有把握地声称它在真实硬件上也至少会快 5%?

更重要的是,假设新代码慢了 3%。我们能否完全确定在真正的硬件上它会慢 3% 或更少,但绝对不会低于3%?

更新:我最感兴趣的是你的战场结果。IE。你能见证一个例子,在虚拟机中慢 10% 的代码在真铁上执行快 5%,反之亦然?还是它总是一致的(即如果它在 VM 中更快/更慢,它在真实机器上总是成比例地更快/更慢)?到目前为止,我的或多或少是一致的;至少,总是朝着同一个方向前进。

4

4 回答 4

1

如果您将 VM 上的结果与未在 VM 上运行的结果进行比较,那么不,结果不可信。

另一方面,如果两个测试都在相同的环境中运行,他们是的,结果是可信的。这两个测试在虚拟机内都会变慢,但差异仍然应该是可信的。

于 2008-12-26T18:07:34.753 回答
1

考虑到所有因素,使用 Fair Witness 原则,您可以断言应用程序在 VM 中的性能如何,因为这就是您实际测量的内容。

现在,如果您希望尝试根据环境推断您观察到的内容,那么,假设您正在运行本机 VM(与模拟虚拟机相比,例如 x86 上的 PPC),CPU 绑定任务甚至是 CPU 绑定任务在 VM 中,因为 CPU 承担了大部分繁重的工作。

可以说可能涉及一些内存管理问题,可以区分 VM 和本机应用程序,但是一旦正确映射内存,我认为 VM 和本机机器之间的 CPU 绑定运行时间不会有显着差异.

因此,我认为在虚拟机上运行时,从应用程序的一个实例到另一个实例的性能变化会产生类似的性能变化,我认为这是公平的,特别是对于 CPU 密集型应用程序,当在本机机器上运行时。

但是,我认为您不能公平地说“您知道”,除非您在正确的环境中亲自测试它。

于 2008-12-26T18:15:19.653 回答
1

我不认为虚拟机有什么特别之处。即使在“真实”机器上,您仍然使用虚拟内存运行并与其他进程共享 CPU,因此需要考虑类似的考虑。

于 2008-12-26T18:55:13.753 回答
0

在测试和生产环境之间获得可靠的性能结果的唯一方法是运行相同的硬件和软件。一直到硬件版本和软件补丁级别。

否则你几乎是在浪费时间。

例如,一些记忆棒的性能比其他记忆棒更好,这很容易在其他相同的盒子上造成 5% 的吞吐量差异。

关于软件,VM 软件总是会产生影响;并且某些操作可能会比其他操作受到更大的影响,这取决于许多不同的因素,以至于无法比较它们。

于 2008-12-26T18:43:52.030 回答