我们有一个由两个节点组成的 Heartbeat/DRBD/Pacemaker/KVM/Qemu/libvirt 集群。每个节点都运行具有以下软件包/版本的 Ubuntu 12.04 64 位:
- 内核 3.2.0-32-generic #51-Ubuntu SMP
- DRBD 8.3.11
- qemu-kvm 1.0+noroms-0ubuntu14.3
- libvirt 0.9.13
- 心脏起搏器1.1.7
- 心跳3.0.5
虚拟来宾正在运行 Ubuntu 10.04 64 位和 Ubuntu 12.04 64 位。我们使用 libvirt 功能将主机 CPU 的功能传递给虚拟来宾,以实现最佳 CPU 性能。
现在这是该集群上的常见设置:
- VM“监控”有 4 个 vCPU
- VM“监控”使用ide作为磁盘接口(由于显而易见的原因,我们目前正在切换到VirtIO)
我们最近进行了一些简单的测试。我知道他们不专业,达不到高标准,但他们已经表现出很强的趋势:
节点 A 正在运行虚拟机“bla” 节点 B 正在运行虚拟机“监控”
当我们将文件从 VM“bla”同步到 VM“monitoring”时,我们只能达到 12 MB/s。当我们在虚拟机“监控”中执行一个简单的 dd if=/dev/null of=/tmp/blubb 时,我们达到了大约 30 MB/s。
然后我们向虚拟机“监控”添加了 4 个 vCPU 并重新启动它。VM“监控”现在有 8 个 vCPU。我们重新运行测试,结果如下:当我们将文件从 VM“bla”rsync 到 VM“monitoring”时,我们现在达到了 36 MB/s。当我们在虚拟机“监控”中执行一个简单的 dd if=/dev/null of=/tmp/blubb 时,我们现在达到了大约 61 MB/s。
对我来说,这种效果是相当令人惊讶的。为什么显然为这个虚拟来宾自动添加更多虚拟 CPU 意味着 VM 内的磁盘性能更高?
我对此没有任何解释,非常感谢您的意见。我想了解导致这种性能提升的原因,因为我可以 100% 重现这种行为。
我会给出非常粗略的想法/解释。
在 OP 情况下,除了在 VM 内进行测量外,还应查看主机。
在这种情况下,我们可以假设以下是正确的
"monitoring"
) I/O 随着分配给它的更多 CPU 的增加而增加。如果主机 I/O 已经达到最大值,那么 I/O 性能应该不会提高。"bla"
不是限制因素因为"monitoring"
I/O 性能在不改变"bla"
附加因素
当更多的 cpu 分配给时会发生什么
"monitoring"
?当
"monitoring"
分配更多的 CPU 时,它获得更多的处理能力,但它也获得更多的 I/O 处理时间。这与它无关,
rsync
因为它是一个单线程程序。它是 I/O 层利用增加的 CPU 能力,或者更准确地说,增加的处理时间。
如果在测试期间使用 cpu 监控程序(例如 top)
"monitoring"
,它不会显示一个,但所有 cpu 使用率都会上升,还有 %wa。%wa 是花在 I/O 上的等待时间。这种性能提升只会在您的主机 I/O 不是最大时发生。出去。
我在 KVM 站点找不到 cpu 调度,但是这个博客提到 KVM 正在使用 CFS 和 cgroups,以下是引用
简而言之,更多 cpu = 更多 cpu 时间 = 在给定时间段内更多的 I/O 时隙。