我们的应用程序在 ESX 下的 Xeon X5650 上的运行速度比在裸机 E5450 上的运行速度慢 50%。
物理服务器上的测试任务需要17分钟。
在虚拟服务器上执行相同的任务需要 25 分钟:时间延长了 50%。
据我所知,这应该是不可能的;5600 系列在相同时钟速度下,单线程进程的速度据称比 5400 系列快 10-20%,并且对于单线程 CPU 密集型工作负载,虚拟化开销应该同样低。性能应该在至少收支平衡,不是吗?但是,性能不但没有相同或更好,反而下降了 1/3。
更新:已解决。在(固定)虚拟服务器上执行相同的任务需要 14 分钟:速度提高了 15%。
这是 RAM 配置问题。性能下降 50% 是因为 ESX 主机系统内存安装错误,仅提供大约一半的带宽。对于 CPU 和内存受限的进程,带宽损失意味着性能比预期低 50%。
应用程序性能现在正好处于我们最初预期的 10-20% 的提升范围内。
有两个物理的 Windows Server 2003 R2 系统,它们运行一个应用程序,该应用程序由一个服务器(32 位)上运行的单线程计算组成,并与另一台服务器(64 位)上的 SQL Server 2005 数据库进行通信。
两个物理机箱都是单 CPU E5450,配备 4GB RAM @800Mhz。计算服务器使用的物理内存从不超过 1.5GB,SQL Server 使用的内存从不超过 2.5GB。计算服务器上的 CPU 利用率从不超过 ~15%(单核的 50% 左右)。DB 服务器上的 CPU 利用率从不超过 ~25%(充分利用的单核)。
物理 ESX 4.1 主机是双 CPU X5650,配备 64GB RAM @1333Mhz。每个虚拟机配备 4 个核心和 4GB RAM,以镜像物理环境。测试是在每台物理主机上运行单个 VM 以及在同一台主机上运行两个 VM 的情况下进行的。
有趣的是,我们在另一对使用 X5550 CPU 和 RAM @1066Mhz 的 ESX 服务器上获得了几乎相同的 25 分钟测试结果。
此外,无论虚拟机配备 1、2 或 4 个 CPU,还是 1、2、4 或 8GB RAM,虚拟系统中的测试结果都不会相差超过 10%。网络或磁盘活动很少,据我所知,该过程应该是 CPU 密集型的。
测试使用不同主机上的本地 15K SAS 磁盘以及同样配备 15K 磁盘的千兆 iSCSI SAN 进行。不同存储的结果差异可以忽略不计。
据我所知,对于单线程工作负载,Xeon 5600 系列应该比 5400 系列快 20-50%。即使考虑到 X5650 是 2.67GHz 部件,而 E5450 是 3GHhz 部件,如果在相同的时钟速度下每核性能相同,您仍然会期望看到至少 90% 的性能,而不是 67%。这甚至没有考虑到内存时钟速度几乎是 5400 系列的两倍。
应该说,我过去已经做过几个虚拟化项目,即使使用相同的物理 CPU 内核,也从未见过接近 50% 的性能下降,更不用说具有更快内存的两代新内核了。
对于可能的原因或我应该检查的任何配置设置有什么想法吗?
答案1
根据虚拟化类型,5% 的开销几乎是最佳情况。使用完全半虚拟化,您可以很容易地在 IO 轻量级工作负载上实现这样的开销。使用硬件辅助虚拟化(VMWare 使用的技术),可以在虚拟机管理程序上以很少的 VM 在 IO 轻量级工作负载上实现如此低的开销。使用完全虚拟化(无 CPU 扩展),5% 的开销几乎是梦想。
请记住,这可能取决于很多因素。虚拟化往往会在磁盘和客户操作系统之间增加大量延迟。这将增加 IO 等待时间,从而增加平均负载,同时保持 CPU 使用率相当低。如果您的存储处于 IOPS 范围的较低端,这将产生非常大的影响。如果您使用网络存储,这几乎总是会增加延迟,因为必须为每个 IO 访问网络,而不仅仅是访问内部总线。
如果您使用特殊的网络配置模块(例如虚拟交换机),虚拟化还会增加额外的网络延迟,但这通常并不十分重要。
虚拟化往往会增加许多额外的中断,这些中断是从一个虚拟机切换到另一个虚拟机所必需的。根据虚拟机管理程序的调度程序,这可能会很严重。你对此无能为力,因为这只是虚拟化的性质所致。但需要记住的是,这是降低性能的合理原因。
由于应用程序的单线程特性,拥有更多核心不会带来显著的性能提升。两款 CPU 的频率相似,但您会注意到,没有“Turbo Boost”的 X5650 频率较慢。您可能需要检查该功能是否与您的设置兼容/启用。
我发现,IO 密集型工作负载的 33% 开销并不算太糟糕。尝试将存储分离到两个虚拟机,看看是否有帮助。