KVMゲストとホスト間のジャンボフレーム?


11

KVMゲストとホストシステム間のストレージ通信用に9000バイトのMTUを実装しようとしています。ホストには、br19000バイトの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

ホスト上のVMのtunインターフェースのMTUは何ですか?
mgorven

これも9000バイトです。そのインターフェイスの出力brctlip addr showそのインターフェイスに関する質問を更新しました。
ラースク

ホストシステムとは何ですか?
マイケルハンプトン

Arch Linux、Linux 3.6.10(x86_64)、qemu-kvm 1.2.0、libvirt 1.0.1
ラースク

回答:


7

これはMTUの問題でしたが、コンポーネントデバイスのMTU設定とは何の関係もないことがわかりました。最初の質問で示したように、ホストブリッジ、ホストトンネルインターフェイス、およびゲストインターフェイスはすべて同じMTU設定(9000バイト)でした。

実際の問題は、libvirt / kvm構成の問題でした。デフォルトでは、libvirtはデバイスを使用しませ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>

この変更により、すべてが意図したとおりに機能します。


0

より大きなMTUを機能させるには、スタック全体に、ゲスト、tapdev、およびブリッジが接続されている物理NICを含む、より高いMTUが必要です(途中でボンドとVLANがある場合-それらも)


GigaEthernetなどの特定の例で、オートネゴシエーションの結果がどこにあるかを知っていますか?この投稿は多分重複:google.com/...
ArrowInTree

いいえ、任意の成分の最高MTUに、手動ですべてのスタックセットを行わなければならない
dyasny

はい、私はそれを理解しています。それは至る所で文書化されています。質問からわかるように、ゲスト、tapdevs、およびブリッジはすべて、より高いMTUを持っています。私が与えた例に何か間違った設定がありますか?
ラースク

デフォルト以外のMTU設定を使用するには、すべてがデフォルト以外のMTUに従う必要があります。それは、上から下に、ゲストNIC、タップ、ブリッジ、ブリッジの下のeth(+ vlan + bond)、そしてもちろんスイッチポートでなければなりません。私はほんの数分前にそれをテストしているし、それは、KVMとRHEL上で完璧に動作します
dyasny

確かに、質問の中でスタックのすべての部分の価値を明確に示したと思います。不足している情報や、正しく構成されていない情報が表示されていますか?
ラースク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.