我有一台服务器(单插槽 Nehalem,带 24GB RAM),主要用作 KVM 主机,包含一堆 Windows 服务器和一些(无滴答)Linux 实例。
我通常使用 BFS CPU 调度程序(通过 CK 补丁集)和 BFQ 磁盘调度程序编译可抢占的桌面内核,使用 1000 Hz 无滴答定时器。在服务器上,我使用 CFQ 以 100 Hz 非无滴答方式进行所有操作,并且不使用强制抢占。
但是,我没有时间或技能对此进行基准测试,因此我正在寻找有关 KVM 内核最佳设置的一些输入。虚拟机的吞吐量是否会从 1000 Hz 内核中受益?
而且,使用 BFS 调度程序是不是一个坏主意?我听说它也可能给单 CPU 服务器带来好处。我还在考虑将 BFQ 磁盘调度程序与low_latency 选项已禁用。
有人能给我指点迷津吗?在底层系统方面我还是个新手。:-)
答案1
首先,KVM 虚拟机管理程序调优的“权威”参考仍然是 IBM 的优秀KVM 的最佳实践我建议你逐一看一下。
在仔细测试了您的预期工作量之后,您肯定会想做一些事情:
使用Windows 客户机中的 virtio 驱动程序。您应该已经这样做了;如果没有,这将为您带来非常明显的加速。Linux 客户机应该从安装时自动使用 virtio,但如果您正在虚拟化非常旧的 Linux 系统,请仔细检查它们。
抛弃 BFS。专为低端硬件上的低延迟桌面加载而设计并且它的作者也承认它“无法扩展到大型硬件”。这让人缺乏信心。
抛弃 BFQ/CFQ。实际上,每个人都可以通过以下方式获得最高性能:最后期限I/O 调度程序,虽然您应该测试,但您可能不会例外。
确保内核同页合并正在运行,并进行适当调整。这可以显著减少虚拟机管理程序的内存需求,尤其是当多个客户机运行相同的操作系统时。
使用本地存储时,请使用原始块设备(例如 LVM 逻辑卷),而不是映像文件。这样可以消除磁盘 I/O 的抽象层。
我之前提到的 IBM 指南中涵盖了许多其他内容,但这些应该能为您带来最大的收益。
答案2
根据我的经验,像 RHEL 这样的发行版经过了充分的校准,可以提供良好的 KVM 机器性能,并且所有基准测试都是在这些发行版上进行的。如果您想获得额外的性能百分比,则需要在堆栈中寻找更高的层次 - virtio-scsi 和数据平面(用于磁盘性能)或 802.1Qbg/h 以获得额外的网络性能。