KVM konuk ve ev sahibi arasındaki Jumbo çerçeveleri?


11

KVM konukları ile ana bilgisayar sistemi arasındaki depolama iletişimi için 9000 baytlık MTU uygulamaya çalışıyorum. Ana bilgisayarda br19000 bayt MTU'lu bir köprü ( ) var:

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

Konukların bu köprüye bağlı 9000 bayt MTU'lu bir arayüzü var:

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

Ana bilgisayardan konuğa ping yapabilirim:

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

Ancak ping paketi boyutunu 1490 baytın üzerine çıkarırsam, artık bağlantım yok:

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

Bir paket izlemesi, bu paketlerin konuklara asla ulaşmadığını gösterir. Okuduğum her şey, hem Linux köprü arayüzünün hem de virtioağ sürücülerinin jumbo çerçeveleri desteklediğini gösteriyor, ancak bu kesinlikle bana bir MTU sorunu gibi görünüyor.

Gerçekten bariz bir şeyi mi kaçırıyorum?

Güncelleme

Konuk arayüzünün ana makine tarafı gösteriliyor:

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

Ana bilgisayardaki VM için tun arabirimindeki MTU nedir?
mgorven

Bu aynı zamanda 9000 bayttır; Ben çıkışı ile soru güncelledik brctlve ip addr showbu arabirim için.
larsks

Ana bilgisayar sistemi tam olarak nedir?
Michael Hampton

Arch Linux, Linux 3.6.10 (x86_64), qemu-kvm 1.2.0, libvirt 1.0.1 ile birlikte.
larsks

Yanıtlar:


7

Bu bir MTU sorunu olsa da, herhangi bir bileşen aygıtındaki MTU ayarlarıyla ilgisi olmadığı ortaya çıktı. Orijinal soruda gösterdiğim gibi, ana makine köprüsü, ana makine tun arayüzü ve konuk arayüzü aynı MTU ayarına (9000 bayt) sahipti.

Asıl sorun libvirt / kvm yapılandırma sorunuydu. Varsayılan olarak, libvirt yok değil kullanmak virtiocihazlar. RealTek RTL-8139 NIC ile sonuçlanan açık bir yapılandırma yok. Bu sanal NIC jumbo çerçeveleri desteklemez .

virtioCihazları kullanmak için açık bir model belirtmeniz gerekir. Kullanırken virt-install:

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

Veya alan XML'indeki <model>uygun <interface>öğeye bir etiket ekleyerek bundan sonra :

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

Bu değişiklik olduğunda, her şey amaçlandığı gibi çalışır.


0

daha büyük MTU'nun çalışması için tüm yığının, konukların, tapdevlerin ve köprünün bağlı olduğu fiziksel NIC'leri içeren daha yüksek MTU'ya sahip olması gerekir (yolda bağlar ve vlans varsa - onlar da)


GigaEthernet ve ötesi gibi belirli örneklerin bunun otomatik müzakere sonucu olacağını biliyor musunuz? Bu yazı belki bir kopya olabilir: google.com/…
ArrowInTree

Hayır, manuel olarak yapılmalıdır, tüm yığınlar herhangi bir bileşenin en yüksek
MTU'suna ayarlanır

Evet, farkındayım; her yerde iyi belgelenmiş. Sorudan da görebileceğiniz gibi, konuklar, tapdesler ve köprü daha yüksek MTU'ya sahiptir. Verdiğim örneklerde yanlış yapılandırılmış bir şey görüyor musunuz?
larsks

varsayılan olmayan MTU ayarlarını kullanmak için, her şeyin varsayılan olmayan MTU'ya uyması gerekir. Bu, yukarıdan aşağıya, misafir NIC, musluk, köprü, köprünün altındaki eth (+ vlan + bond) ve elbette anahtar bağlantı noktası olmalıdır. Sadece birkaç dakika önce test ettim ve kvm ile RHEL üzerinde mükemmel çalışıyor
dyasny

Doğru, sanırım soruda yığının tüm bölümlerindeki değeri açıkça gösterdim. Eksik bilgi veya doğru yapılandırılmamış bir şey görüyor musunuz?
larsks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.