KVM / Qemu,Ubuntu:为什么更多的来宾CPU可以快速增强Disk-I / O?


9

我们有一个由两个节点组成的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正在运行虚拟机“监控”

当我们将文件从VM“ bla”同步到VM“ monitoring”时,我们仅达到12 MB / s。当我们在虚拟机“监控”中执行简单的dd if = / dev / null of // tmp / blubb时,我们达到了约30 MB / s的速度。

然后,我们向虚拟机“监视”中又添加了4个vCPU,然后重新启动。VM“监视”现在具有8个vCPU。我们重新运行测试,结果如下:当我们将文件从VM“ bla”同步到VM“ monitoring”时,我们现在达到了36 MB / s。当我们在虚拟机“监视”中执行简单的dd if = / dev / null of // tmp / blubb时,现在达到约61 MB / s。

对我来说,这种效果令人惊讶。显然为该虚拟客户机添加更多虚拟CPU会自动意味着VM内部磁盘性能提高了吗?

我对此没有任何解释,非常感谢您的投入。我想了解是什么原因导致此性能提高,因为我可以100%重现此行为。


2
使用专用的基准测试工具(例如iozonebonnie ++)来帮助消除其他变量。
ewwhite

有趣的是,实际的CPU负载看起来是...在一个隐藏的地方引入了cpu绑定(rsync加ssh可能在某种程度上是肯定的,因此以这种方式引入了网络驱动程序,dd也可能会执行意外的cpu绑定事情...),或者是它实际上事情未达最佳的等着对方由于较少的执行线程可用?
rackandboneman

3
运行kvm_trace以查看IO_Exits更改CPU编号时的更改数量。我猜这是因为您使用的是IDE,它是与来宾CPU一起调度的。使用virtio时,性能应保持一致,并且当数据平面位于qemu中时,它将获得极大的提升。另一个猜测可能是您使用的是已知的错误虚拟化堆栈发行版。
dyasny 2012年

// @ ewwhite:是的,运行专业测试将是一个不错的选择。但是,我想首先了解为什么会发生这种I / O行为。@ rachandboneman:当我最后看时,这4个CPU的等待值非常高(大约70-80%)。@dyasny:谢谢,我会尝试的。如何检查数据平面已激活/当前使用?
Valentin

数据平面目前仍处于试验阶段,我可以肯定,第一个使用它的发行版将是Fedora。pl.digipedia.org/usenet/thread/11769/28329
dyasny 2012年

Answers:


9

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

在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时,它将获得更多的处理能力,但同时也会获得更多的I / O 处理时间

这与rsync单线程程序无关。

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

如果"monitoring"在测试过程中使用了cpu监视程序(例如top),则不会显示任何一个,但所有cpu的使用率都会上升,并且%wa也将上升。%wa是花费在I / O上的等待时间。

仅当主机I / O不在最大值时,这种性能提升才会发生。出来。

我在KVM站点中找不到cpu调度,但是有一个博客提到KVM正在使用CFS和cgroups,以下是引用

在KVM中,每个vcpu都映射到Linux进程,而Linux进程又利用硬件协助来创建必要的虚拟化“镜像”。这样,vcpu只是CFS的另一个过程,而且对于cgroups来说也很重要,作为资源管理器,cgroups允许Linux管理资源分配-通常按比例分配以设置约束分配。cgroup也适用于内存,网络和I / O。可以将进程组作为调度组的一部分,以将资源分配要求应用于进程的分层组。

简而言之,在给定的时间段内,更多的cpu =更多的cpu时间=更多的I / O时隙。


感谢您编写此答案。我寻找的解释是“更多的vCPU意味着更多的I / O处理时间”。值得赏金!
瓦伦丁
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.