我们在 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 基本上是未记录的魔法,您将需要对设置进行大量调整)。