Estou tentando implementar uma MTU de 9000 bytes para comunicação de armazenamento entre convidados KVM e o sistema host. O host possui uma ponte ( br1
) com uma MTU de 9000 bytes:
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
Os convidados têm uma interface conectada a esta ponte que também possui uma MTU de 9000 bytes:
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
Posso fazer ping do host para o convidado:
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
Mas se eu aumentar o tamanho do pacote de ping além de 1490 bytes, não tenho mais conectividade:
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
Um rastreamento de pacote mostra que esses pacotes nunca chegam ao convidado. Tudo o que li indica que a interface de ponte do Linux e a virtio
rede suportam todos os jumbo-frames, mas isso certamente me parece um problema de MTU.
Estou perdendo algo realmente óbvio?
Atualizar
Mostrando o lado do host da interface do convidado:
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
linux
networking
kvm-virtualization
bridge
mtu
larsks
fonte
fonte
brctl
eip addr show
para essa interface.Respostas:
Embora esse fosse um problema da MTU, verifica-se que não tinha nada a ver com as configurações da MTU em nenhum dos dispositivos componentes. Como mostrei na pergunta original, a ponte do host, a interface de ajuste do host e a interface do convidado tinham a mesma configuração de MTU (9000 bytes).
O problema real era um problema de configuração da libvirt / kvm. Por padrão, libvirt não usa
virtio
dispositivos. Na ausência de uma configuração explícita, você acaba com uma placa de rede RealTek RTL-8139. Esta NIC virtual não suporta frames jumbo .Para usar
virtio
dispositivos, você precisa especificar um modelo explícito. Ao usarvirt-install
:Ou após o fato, adicionando uma
<model>
tag ao<interface>
elemento apropriado no XML do domínio:Com essa mudança, tudo funciona como pretendido.
fonte
para que o MTU maior funcione, toda a pilha precisa ter o MTU mais alto, que inclui os convidados, os tapdevs e as NICs físicas às quais a ponte está conectada (se você tiver títulos e vlans a caminho - eles também)
fonte