【问题标题】:KVM and Libvirt: Bad CPU/Network performance of guestKVM 和 Libvirt:来宾 CPU/网络性能不佳
【发布时间】:2016-12-17 10:18:59
【问题描述】:

我有一个运行虚拟路由器的 Arch Linux 主机。

当使用 LXC 访客作为路由器时,一切都很好。我得到 100MBits Up/Down 并且几乎没有 CPU 使用率。

但是,当我使用 libvirt gest (pfSense FreeBSD) 作为路由器时,每当有大量网络流量通过来宾时,CPU 使用率就会高得不合理(高达 100%),但最糟糕的是网络吞吐量减半了!我得到最大 45-49Mbits。

主机不支持 PCI 直通,所以这是我对 libvirtd 虚拟机的配置:

Nic1 (wan)
Network source: Direct ‘eth0’
Source mode: passthrough
Device model: virtio

Nic2 (lan)
Bridge name: br0
Device model: virtio

我尝试了 e1000,但它完全没有改变。

Host CPU: AMD A4-5000 Kabini
Guest CPU: default or Opteron_G3

自从我开始使用 KVM 一年多以来一直如此。如果我不解决这个问题,我将不得不转储 libvirt,因为这样的性能是不可接受的。

【问题讨论】:

  • pfSense 可能会使用轮询来获得更好的性能,但在虚拟化环境中可能无法按预期工作。彻底阅读ifconfig <interface> 可能会有所帮助。
  • 硬件轮询已禁用。 ifconfig 显示:storage5.static.itmages.com/i/16/1217/…
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?
  • 我明白了。谢谢指点。
  • 它看起来更像是一个 libvirt 问题而不是 pfSense 问题,因为我有另一个运行 hostapd AP 的带有 Arch linux 的 VM,它也出现了同样的问题。

标签: linux networking virtualization kvm libvirt


【解决方案1】:

使用如此有限的信息很难诊断出这类问题。绝对不要使用 e1000 或任何其他 NIC 型号 - virtio-net 将提供任何虚拟化 NIC 的最佳性能。确保主机有 /dev/vhost-net 可用,因为这会加速主机内核空间中的访客 NIC 流量。

如果您想将访客用作高性能网络路由设备,通常有很多方法可以对其进行调优。将客户机 vCPU 固定到特定的主机物理 CPU,并让其他客户机远离这些 CPU,确保客户机不会因为被其他进程抢占而破坏其缓存。接下来,为客户 RAM 使用大页面来大幅提高客户内存访问的 TLB 缓存命中率。如果主机有多个 NUMA 节点,请确保来宾 CPU 和来宾 RAM(大页面)固定为来自同一个主机 NUMA 节点。同样,确保客户机使用的主机 NIC 的 IRQ 处理具有关联设置以匹配客户机使用的 pCPU。

【讨论】:

  • 感谢您的想法。主机可以看到/dev/vhost-net,它的所有权是root:kvm,所以我认为它是正确的。来宾 CPU 是 Opteron_G3。我在某处读到这对于 AMD Kabini 主机来说是最佳选择。恐怕你写的其余部分有点超出我的想象。但从你写的我收集的信息来看,这些都是次要的潜在罪犯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
相关资源
最近更新 更多