我们支持在 Windows Server 2008 R2 上运行的企业应用程序。我们的一位客户选择安装到 VMWare,我发现虚拟机相对于硬件而言相对较慢。我们的产品开发团队建议,许多虚拟机在 I/O 基准测试中似乎运行得特别慢,这会影响生产性能。
我尝试过 AttoSoft I/O 基准测试,发现对于较小的 I/O 块(1-32K),我所查看的虚拟机比硬件慢 25 倍,而对于较大的 I/O 块(1-8MB),它慢 10 倍。
这是一个公平的基准吗?如果不是,有什么公平测试的建议吗?
答案1
这是当前你的客户的虚拟基础设施;特别是其共享存储的局限性。然而,这些结果并不一定适用于所有虚拟化解决方案……
完全可以构建 I/O 性能与裸机硬件相当甚至超过裸机硬件的 VMware 配置。听起来好像您无法控制客户端的设置。您是否知道所用存储类型的任何详细信息?也许是服务器规格和网络详细信息?
答案2
在无争用 ESXi 系统上,您应该预计 CPU、内存、网络和磁盘 IO 性能会损失约 5-10% - 这是我们为虚拟化带来的所有美好事物付出的代价。也就是说,您看到的结果远低于这些预期,所以有些地方出了问题。
首先,你知道整个基础设施是否使用兼容设备吗?他们有一个兼容性检查器这里供您检查,我们经常看到 serverfault 上的人们使用未经 HCL 认可的套件并遇到问题。其次,存储是否真的适合用途,还是他们只是使用廉价的消费级 SATA 磁盘?他们安装了“vmtools”吗?他们是否在 VM 中执行了可能会减慢 IO 速度的操作(例如 VM 内 RAIDing)?主机是否争相并努力满足对资源的总体需求?如果他们使用共享存储,这是否是过度劳累?
正如您所看到的,有很多事情需要检查,但您说得对,这里有问题,这些数字相差甚远。
答案3
无论是基准测试还是大多数应用程序,甚至 I/O 堆栈都没有考虑到虚拟机上常见的时间抖动。这会导致某些类型的负载效率极低;尤其是那些受 IO 限制的负载。
问题在于 I/O 堆栈的某些特定部分(即 TCP 公平速率限制)必须测量和比较非常短的时间跨度;但在虚拟机上,应用程序通常会获得 CPU 和 I/O 时间切片。这使得此类测量结果非常不准确。系统将其解释为不稳定的 I/O,并且自身评级远低于必要水平。
现代 I/O 堆栈在这方面正在慢慢变得更好,特别是在较长的传输中(因为它可以应用一些平滑统计数据),但短传输受到很大影响。
这也许可以解释您得到的糟糕数字(1/10 - 1/25),但很难说这是否是您从实际应用程序中获得的结果。如果实际负载非常相似,并使用与基准相同的堆栈,那么是的,您可以获得这种性能。但如果应用程序必须在进行 I/O 的同时进行大量处理,那么糟糕的性能可以通过大多数虚拟机具有的更好的 CPU 分区来分摊。