Pyt*_*ner 9 performance central-processing-unit libvirt qemu kvm-virtualization
我们有一个由两个节点组成的 Heartbeat/DRBD/Pacemaker/KVM/Qemu/libvirt 集群。每个节点都运行带有以下包/版本的 Ubuntu 12.04 64 位:
虚拟来宾运行 Ubuntu 10.04 64 位和 Ubuntu 12.04 64 位。我们使用 libvirt 功能将主机 CPU 的功能传递给虚拟来宾,以实现最佳 CPU 性能。
现在这里是这个集群上的一个常见设置:
我们最近运行了一些简单的测试。我知道他们不专业,没有达到高标准,但他们已经表现出一个强大的趋势:
节点 A 正在运行 VM“bla” 节点 B 正在运行 VM“监控”
当我们将文件从虚拟机“bla”同步到虚拟机“监控”时,我们仅达到 12 MB/s。当我们在虚拟机“监控”中执行一个简单的 dd if=/dev/null of=/tmp/blubb 时,我们达到了大约 30 MB/s。
然后我们向虚拟机“监控”添加了 4 个 vCPU 并重新启动它。VM“监控”现在有 8 个 vCPU。我们重新运行测试,结果如下:当我们将文件从 VM“bla”同步到 VM“监控”时,我们现在达到了 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 能力,或更准确地说,增加的处理时间。
如果"monitoring"在测试过程中使用了cpu监控程序(例如top),它不会显示一个,而是所有cpu使用率上升,还有%wa。%wa 是花费在 I/O 上的等待时间。
这种性能提升只会在您的主机 I/O 不是最大时发生。出去。
我在 KVM 站点上找不到 cpu 调度,但是有这个博客提到 KVM 正在使用 CFS 和 cgroups,以下是引用
在 KVM 中,每个 vcpu 都映射到一个 Linux 进程,该进程又利用硬件辅助来创建虚拟化所需的“烟雾和镜像”。因此,vcpu 只是 CFS 的另一个进程,对于 cgroups 也很重要,cgroups 作为资源管理器,允许 Linux 管理资源分配 - 通常按比例设置约束分配。cgroups 也适用于内存、网络和 I/O。进程组可以成为调度组的一部分,以将资源分配要求应用于进程的分层组。
简而言之,在给定的时间段内,更多的 cpu = 更多的 cpu 时间 = 更多的 I/O 时隙。