Jumbo frame antara KVM guest and host?

11

Saya mencoba menerapkan MTU 9000 byte untuk komunikasi penyimpanan antara tamu KVM dan sistem host. Tuan rumah memiliki jembatan ( br1) dengan MTU 9000 byte:

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

Para tamu memiliki antarmuka yang terhubung ke jembatan ini yang juga memiliki MTU 9000 byte:

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

Saya bisa ping dari host ke tamu:

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

Tetapi jika saya meningkatkan ukuran paket ping melampaui 1490 byte, saya tidak lagi memiliki konektivitas:

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

Paket jejak menunjukkan bahwa paket-paket ini tidak pernah mencapai tamu. Semua yang saya baca menunjukkan bahwa antarmuka Linux bridge dan virtiodrive jaringan semua mendukung frame jumbo, tapi ini jelas terlihat seperti masalah MTU bagi saya.

Apakah saya melewatkan sesuatu yang sangat jelas?

Memperbarui

Menampilkan sisi host dari antarmuka tamu:

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
larsks
sumber
Apa MTU pada antarmuka tun untuk VM di host?
mgorven
Itu juga 9000 byte; Saya telah memperbarui pertanyaan dengan output dari brctldan ip addr showuntuk antarmuka itu.
larsks
Apa sebenarnya sistem host?
Michael Hampton
Arch Linux, dengan Linux 3.6.10 (x86_64), qemu-kvm 1.2.0, libvirt 1.0.1.
larsks

Jawaban:

7

Meskipun ini adalah masalah MTU, ternyata itu tidak ada hubungannya dengan pengaturan MTU di salah satu perangkat komponen. Seperti yang saya tunjukkan dalam pertanyaan awal, host bridge, host tun interface, dan guest interface semuanya memiliki pengaturan MTU yang sama (9000 bytes).

Masalah sebenarnya adalah masalah konfigurasi libvirt / kvm. Secara default, libvirt tidak menggunakan virtioperangkat. Tidak ada konfigurasi eksplisit Anda berakhir dengan RealTek RTL-8139 NIC. NIC virtual ini tidak mendukung bingkai jumbo .

Untuk menggunakan virtioperangkat, Anda perlu menentukan model eksplisit. Saat menggunakan virt-install:

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

Atau setelah fakta dengan menambahkan <model>tag ke <interface>elemen yang sesuai di domain XML:

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

Dengan perubahan ini pada tempatnya, semuanya berfungsi sebagaimana mestinya.

larsks
sumber
0

agar MTU yang lebih besar berfungsi, seluruh tumpukan harus memiliki MTU yang lebih tinggi, yang mencakup tamu, tapdev, dan NIC fisik yang terhubung dengan jembatan (jika Anda memiliki ikatan dan vlan dalam perjalanan - juga)

dyasny
sumber
Apakah Anda tahu jika contoh spesifik, seperti GigaEthernet dan lainnya, di mana ini akan menjadi hasil negosiasi otomatis? Posting ini mungkin duplikat: google.com/...
ArrowInTree
tidak, harus dilakukan secara manual, semua tumpukan diatur ke MTU tertinggi dari setiap komponen yang diberikan
dyasny
Ya, saya menyadari itu; yang didokumentasikan dengan baik di semua tempat. Seperti yang Anda lihat dari pertanyaan, para tamu, para tapdev, dan jembatan semua memiliki MTU yang lebih tinggi. Apakah Anda melihat sesuatu yang salah konfigurasi dalam contoh yang saya berikan?
larsks
untuk menggunakan pengaturan MTU non-standar, semuanya harus mematuhi MTU non-standar. Itu, dari atas ke bawah, harus menjadi NIC tamu, keran, jembatan, eth (+ vlan + bond) di bawah jembatan, dan tentu saja port switch. Saya telah mengujinya hanya beberapa menit yang lalu dan berfungsi dengan baik di RHEL dengan kvm
dyasny
Benar, dan saya pikir saya telah menunjukkan dengan jelas nilai pertanyaan di semua bagian tumpukan. Apakah Anda melihat ada informasi yang hilang atau sesuatu yang tidak dikonfigurasi dengan benar?
larsks