KVMゲストとホストシステムの間のストレージ通信に9000バイトのMTUを実装しようとしています。ホストにはブリッジ(br1
)9000バイトのMTUを使用:
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
パケットトレースは、これらのパケットがゲストに到達しないことを示しています。私が読んだすべては、Linuxブリッジインターフェイスとvirtio
ネットワークの両方がすべてジャンボフレームをサポートしていることを示していますが、これは確かに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の問題でしたが、コンポーネントデバイスのMTU設定とは何の関係もないことがわかりました。元の質問で示したように、ホストブリッジ、ホストチューニングインターフェース、ゲストインターフェースはすべて同じMTU設定(9000バイト)でした。
実際の問題は、libvirt/kvm構成の問題でした。デフォルトでは、libvirtはnotでvirtio
デバイスを使用します。 RealTek RTL-8139 NICになる明示的な構成がない場合。この仮想NICは、ジャンボフレームをサポートしていません。
virtio
デバイスを使用するには、明示的なモデルを指定する必要があります。 virt-install
を使用する場合:
virt-install ... -w bridge=br1,model=virtio
または事後、ドメインXMLの適切な<model>
要素に<interface>
タグを追加します。
<interface type="bridge">
<model type="virtio"/>
<source bridge="br1"/>
<target dev="vnet2"/>
</interface>
この変更により、すべてが意図したとおりに機能します。
より大きなMTUが機能するためには、ゲスト、tapdev、およびブリッジが接続されている物理NICを含むスタック全体がより高いMTUである必要があります(途中に結合とVLANがある場合-それらも)