有什么方法可以增加 libvirt 客户网络响应时间?

有什么方法可以增加 libvirt 客户网络响应时间?

我们在 Ubuntu Servers 12.04.4 / Libvirt 0.9.8-2ubuntu17.17 上运行了许多 Debian Wheezy VM

主机通过中继连接到网络。然后,它拆分 VLAN,并为每个 VLAN 创建网桥,配置如下:

auto eth4.2 kvmbrtrunk.2
iface eth4.2 inet manual
    up ifconfig eth4.2 up
    down ifconfig eth4.2 down

iface kvmbrtrunk.2 inet manual
    bridge-ports eth4.2
    bridge-stp no
    bridge-fd 0
    bridge-maxwait 0

VM 配置如下:

 <interface type='bridge'>
   <mac address='54:52:00:02:10:70'/>
   <source bridge='kvmbrtrunk.2'/>
   <model type='virtio'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
 </interface>

他们使用 VirtIO

00:09.0 Ethernet controller: Red Hat, Inc Virtio network device

主角(均位于同一 VLAN 上):

A: 1st Ubuntu 12.04 desktop
B: 2nd Ubuntu 12.04 desktop
C: 1st VM, 1st host
D: 2nd VM, 1st host
E: 3rd VM, 2nd host

当我们执行一系列 60 次 ping“rtt min/avg/max/mdev”时:

A -> B = 0.093/0.132/0.158/0.015 ms
A -> C = 0.272/0.434/1.074/0.113 ms
A -> D = 0.294/0.460/0.832/0.091 ms
A -> E = 0.324/0.505/0.831/0.069 ms
C -> D = 0.348/0.607/0.863/0.124 ms
C -> E = 0.541/0.792/0.972/0.101 ms

因此这些结果似乎表明 libvirt 的虚拟交换机/过滤正如预期的那样,这不仅增加了一些延迟,而且使延迟增加了三倍(0.132 vs 0.460)

问题

 Is there anything that can be done to attenuate this extra latency?

提前感谢任何提示。

答案1

为了减少延迟,您愿意牺牲哪些功能?

首先,尝试禁用桥接接口上的 iptables/ebtables。您可以将其更改/proc/sys/net/bridge/bridge-nf-call-iptables为 0 来实现这一点。缺点是您无法再对来宾流量进行任何类型的过滤。

此处的“更好”选项是切换到使用 SR-IOV 的虚拟化网卡。这要求您的主板和网络控制器支持它。每个网卡还限制为 7 个客户机(对于千兆以太网,我相信 10gig 更高)。这通过让每个客户机直接访问网络硬件来实现。主机操作系统不参与数据包流,VM 只是直接与 NIC 对话。

SR-IOV 将为您提供最佳性能(在我们的测试中,对于高水平的网络流量,CPU 使用率降低了约 10%)和最低延迟(因为与数据包交互的软件层要少得多)。我相信您可以使用它来配置 vlan 标记,但设置可能有点困难(SR-IOV 基本上是未记录的魔法,您将需要对设置进行大量调整)。

相关内容