KVM guest和host之间的巨型帧?

我正在尝试为KVM访客和主机系统之间的存储通信实现一个9000字节的MTU。 主机有一个9000字节的MTUbr1 ):

 host# ip link show br1 8: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP link/ether fe:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff inet 172.16.64.1/24 brd 172.16.64.255 scope global br1 inet6 fe80::21b:21ff:fe0e:ee39/64 scope link valid_lft forever preferred_lft forever 

客人有一个接口连接到这个桥,也有一个9000字节的MTU:

 guest# ip addr show eth2 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff inet 172.16.64.10/24 brd 172.16.64.255 scope global eth2 inet6 fe80::5054:ff:fe50:f355/64 scope link valid_lft forever preferred_lft forever 

我可以从主机ping到客人:

 host# ping -c4 172.16.64.10 PING 172.16.64.10 (172.16.64.10) 56(84) bytes of data. 64 bytes from 172.16.64.10: icmp_seq=1 ttl=64 time=1.15 ms 64 bytes from 172.16.64.10: icmp_seq=2 ttl=64 time=0.558 ms 64 bytes from 172.16.64.10: icmp_seq=3 ttl=64 time=0.566 ms 64 bytes from 172.16.64.10: icmp_seq=4 ttl=64 time=0.631 ms --- 172.16.64.10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3000ms rtt min/avg/max/mdev = 0.558/0.727/1.153/0.247 ms 

但是,如果我增加ping数据包的大小超过1490字节,我不再有连接:

 host# ping -c4 -s 1491 172.16.64.10 PING 172.16.64.10 (172.16.64.10) 1491(1519) bytes of data. --- 172.16.64.10 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 3000ms 

数据包跟踪显示这些数据包永远不会到达guest虚拟机。 我读过的所有内容都表明,Linux网桥接口和virtionetworking驱动器都支持巨型帧,但是这对我来说确实看起来像是一个MTU问题。

我错过了一些非常明显的东西吗

更新

显示访客界面的主机端:

 host# brctl show bridge name bridge id STP enabled interfaces br1 8000.fe540050f355 no vnet2 host# ip addr show vnet2 11: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast master br1 state UNKNOWN qlen 500 link/ether fe:54:00:50:f3:55 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc54:ff:fe50:f355/64 scope link valid_lft forever preferred_lft forever 

    虽然这是一个MTU问题,但事实certificate,这与任何组件设备上的MTU设置无关。 正如我在原始问题中所展示的那样,主机桥,主机tun接口和访客接口都具有相同的MTU设置(9000字节)。

    实际的问题是libvirt / kvmconfiguration问题。 默认情况下,libvirt不使用virtio设备。 如果没有明确的configuration,你最终会得到一个RealTek RTL-8139网卡。 此虚拟NIC 不支持巨型帧

    要使用virtio设备,您需要指定一个显式模型。 使用virt-install

     virt-install ... -w bridge=br1,model=virtio 

    或者通过将<model>标记添加到域XML中的相应<interface>元素之后:

     <interface type="bridge"> <model type="virtio"/> <source bridge="br1"/> <target dev="vnet2"/> </interface> 

    随着这个变化,一切都按预期工作。

    对于更大的MTU来说,整个堆栈必须具有更高的MTU,包括客户端,tapdevs和桥接器所在的物理NIC(如果你在路上有债券和vlan,他们也是如此)