Jumbo кадры между гостем KVM и хостом?

11

Я пытаюсь реализовать 9000-байтовый MTU для обмена данными между гостями KVM и хост-системой. Хост имеет мост ( br1) с MTU 9000 байт:

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

Гости подключили интерфейс к этому мосту, который также имеет MTU 9000 байт:

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

Я могу пинг с хоста на гостя:

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сетевые диски поддерживают jumbo-фреймы, но для меня это, похоже, проблема 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
larsks
источник
Что такое MTU на интерфейсе tun для виртуальной машины на хосте?
Mgorven
Это также 9000 байт; Я обновил вопрос с выводом brctlи ip addr showдля этого интерфейса.
Жаворонки 26.12.12
Что такое хост-система?
Майкл Хэмптон
Arch Linux, с Linux 3.6.10 (x86_64), qemu-kvm 1.2.0, libvirt 1.0.1.
Жаворонки 26.12.12

Ответы:

7

Хотя это и было проблемой MTU, оказалось, что она не имеет ничего общего с настройками MTU на любом из компонентных устройств. Как я показал в первоначальном вопросе, мост хоста, интерфейс хоста tun и интерфейс гостя имели одинаковую настройку MTU (9000 байт).

Фактической проблемой была проблема конфигурации libvirt / kvm. По умолчанию libvirt не использует virtioустройства. При отсутствии явной конфигурации вы получаете сетевой адаптер RealTek RTL-8139. Этот виртуальный сетевой адаптер не поддерживает большие кадры .

Чтобы использовать virtioустройства, вам нужно указать явную модель. При использовании virt-install:

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

Или по факту, добавив <model>тег к соответствующему <interface>элементу в домене XML:

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

С этим изменением все работает как задумано.

larsks
источник
0

чтобы больший MTU работал, весь стек должен иметь более высокий MTU, который включает гостей, tapdevs и физические сетевые адаптеры, к которым подключен мост (если у вас есть связи и vlans на пути - их тоже)

dyasny
источник
Знаете ли вы, если конкретные примеры, такие как GigaEthernet и другие, где это будет результатом автосогласования? Этот пост может быть повторен: google.com/…
ArrowInTree
нет, должно быть сделано вручную, весь стек установлен на самое высокое значение MTU любого заданного компонента
десятое
Да, я понимаю это; это хорошо задокументировано повсеместно. Как видно из вопроса, у гостей, кранов и моста все выше MTU. Видите ли вы что-нибудь неправильно настроенное в приведенных мной примерах?
Жаворонки 26.12.12
чтобы использовать нестандартные настройки MTU, все должно соответствовать нестандартному MTU. Это, сверху вниз, должен быть гостевой сетевой адаптер, кран, мост, eth (+ vlan + bond) под мостом и, конечно, порт коммутатора. Я протестировал его всего несколько минут назад, и он отлично работает на RHEL с kvm
dyasny 26.12.12
Правильно, и я думаю, что я ясно показал в вопросе значение во всех частях стека. Вы видите недостающую информацию или что-то не правильно настроенное?
Жаворонки