我想对 Linux 虚拟化解决方案(即 Xen、KVM 和 OpenVZ)运行一些基准测试,目前正在考虑如何设置测试环境。我目前的方法如下:
- 设置裸服务器系统
- 在同一系统上安装所有 3 个解决方案(内核)并进行设置(+ VM)
- 启动特定内核(禁用其他解决方案的最终服务)并运行基准测试
这种方法可以吗?还是我应该将这 3 个系统完全分开(有 3 个完全独立的安装,每个安装只安装一个解决方案)?
附加问题:有什么提示我应该运行哪种基准测试吗?我考虑了一些编译(例如 Linux 内核)、ab(Apache 基准测试)和 OSDB(开源数据库基准测试)。比较应主要关注整体性能、I/O 性能和各个 VM 的响应时间。
提前致谢,Mathias
答案1
测试应尽可能接近您在生产中运行的方式。因此,请单独安装每个系统并进行测试。这可能需要多次压平您的测试盒,但它将提供最清晰的结果。然后专注于创建您的测试用例。一些我脑海中浮现的:
- 多虚拟机测试在同一台主机上运行多台虚拟机。
- 繁忙的虚拟机资源争用让一台虚拟机运行一些对 CPU 要求很高的程序,然后在其他虚拟机上运行其他测试,看看它们如何受到影响。
- 执行相同操作,但使用高磁盘 I/O VM,并查看其他 VM 受到怎样的影响。
- 多处理器效率如果您有硬件,请运行具有多个虚拟 CPU 的 VM 并判断它的有效使用情况(例如,使用多个作业进行内核编译)。
本质上,集思广益,找出极端情况,并围绕这些情况构建测试。当虚拟机占用大量资源时会发生什么?虚拟机管理程序如何处理资源的过度订阅?一台虚拟机严重锁定会如何影响系统上的其他虚拟机?
答案2
我读过有关 Anandtech.com 对虚拟化进行的基准测试:
并了解为什么 VMware 不允许在其 EULA 中进行基准测试。他们给出了一些糟糕的基准测试的很好例子:
答案3
强烈建议在每次测试迭代中,在测试环境中仅设置一个虚拟机管理程序来执行测试。以这种方式隔离虚拟机管理程序将降低发生不必要交互的可能性;尤其是对于半虚拟化虚拟机。
考虑设计一套额外的测试,来找出每个有限资源的虚拟机管理程序的断点:
- 中央处理器
- 记忆
- 输入/输出带宽
您想要找到的是在病理点之前和之后经历了哪些行为特质;以及某些主机虚拟机是否存在某种形式的恢复。
例如,当虚拟机管理程序超载时,您是否仍然能够关闭虚拟机?