KVM/Qemu,Ubuntu:为什么更多的客户 CPU 会迅速增强磁盘 I/O?

KVM/Qemu,Ubuntu:为什么更多的客户 CPU 会迅速增强磁盘 I/O?

我们有一个由两个节点组成的 Heartbeat/DRBD/Pacemaker/KVM/Qemu/libvirt 集群。每个节点运行 Ubuntu 12.04 64 位,并带有以下软件包/版本:

  • 内核 3.2.0-32-通用#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 正在运行虚拟机“monitoring”

当我们将文件从虚拟机“bla”rsync 到虚拟机“monitoring”时,我们仅实现了 12 MB/s。当我们在虚拟机“monitoring”内执行简单的 dd if=/dev/null of=/tmp/blubb 时,我们实现了大约 30 MB/s。

然后,我们为“监控”虚拟机添加了 4 个 vCPU,并重新启动它。“监控”虚拟机现在有 8 个 vCPU。我们重新运行测试,结果如下:当我们将文件从“bla”虚拟机 rsync 到“监控”虚拟机时,我们现在可以达到 36 MB/s。当我们在“监控”虚拟机内执行简单的 dd if=/dev/null of=/tmp/blubb 时,我们现在可以达到大约 61 MB/s。

对我来说,这种效果相当令人惊讶。为什么为这个虚拟客户机添加更多虚拟 CPU 会自动意味着虚拟机内部的磁盘性能更高?

我对此没有解释,非常感谢您的意见。我想了解导致性能提升的原因,因为我可以 100% 重现此行为。

答案1

我会给出非常粗略的想法/解释。

在 OP 情况下,除了在 VM 内进行测量外,还应查看主机。

在这种情况下,我们可以假设以下内容是正确的

  1. 在所有测试中,主机 I/O(磁盘)带宽均未达到最大值。随着 VM( "monitoring") I/O 的增加,分配给它的 CPU 也越来越多。如果主机 I/O 已经达到最大值,则 I/O 性能应该不会提高。
  2. "bla"不是限制因素由于"monitoring"I/O 性能得到改善,但"bla"
  3. CPU 是性能提升的主要工厂(在 OP 案例中)由于 I/O 不是瓶颈,并且 OP 未提及任何内存大小变化。但为什么?或者如何?

附加因素

  1. 写入比读取花费更多时间这对于 VM 和主机都是一样的。用非常简单的术语来说:VM 等待主机完成读写。

当分配更多的 CPU 时会发生什么"monitoring"

"monitoring"分配更多 CPU 时,它会获得更多的处理能力,但它也会获得更多的处理能力时间用于输入/输出。

rsync这与它是单线程程序无关。

它是利用增加的 CPU 能力的 I/O 层,或者更准确地说,是增加的处理时间。

如果在测试期间使用 CPU 监控程序(例如 top)"monitoring",它将显示不仅一个,而是所有 CPU 使用率上升,还有 %wa。%wa 是等待 I/O 的时间。

仅当您的主机 I/O 没有达到最大值时,性能才会提升。

我在 KVM 站点上找不到 CPU 调度,但是有这个博客提到 KVM 正在使用 CFS 和 cgroups,以下是引述

在 KVM 中,每个 vcpu 都映射到一个 Linux 进程,而 Linux 进程又利用硬件辅助来创建虚拟化所需的“烟雾弹”。因此,vcpu 只是 CFS 的另一个进程,也是 cgroups 的另一个进程,cgroups 作为资源管理器,允许 Linux 管理资源分配 - 通常按比例分配资源,以设置约束分配。cgroups 还适用于内存、网络和 I/O。可以将进程组作为调度组的一部分,以将资源分配要求应用于分层进程组。

简而言之,更多 CPU = 更多 CPU 时间 = 给定时间段内更多 I/O 时间段。

相关内容