MTU not honored in virtio vnet
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Won't Fix
|
Undecided
|
Unassigned | ||
Salt |
New
|
Undecided
|
Unassigned | ||
qemu-kvm (Ubuntu) |
Confirmed
|
High
|
Unassigned |
Bug Description
I am observing a potential regression/
My hardware is: Cisco UCS blade B200-M3 and the network adapter card: Cisco UCS VIC 1240.
lsb_release -rd
Description: Ubuntu Trusty Tahr (development branch)
Release: 14.04
uname -a
Linux konan2 3.13.0-19-generic #40-Ubuntu SMP Mon Mar 24 02:36:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
The problem:
After starting a kvm with virtio interfaces I am passing HTTP traffic via an external network traffic simulator.
The tool is sending a TCP packet of 3481B, because the tool MTU is set to 1400B, it splits the packets into 3 TCP segments.
When the 3 segments are received at the host eth1 interface, the host (ubuntu 14.04) reassembles the TCP packets into a larger packet (GRO), then passes the packet up on vnet1. At this point, because vnet1 MTU is 1500B, it is supposed to re-segment the packet and pass the 3 segments up to the VM. But it passes the big 3481B packet instead.
This behavior did not happen when I tried the same scenario in release 13.04
I can disable this behavior by disabling TSO (TCP segment offloading in the vnet), but I did not have to do this in rel. 13.04 and I feel the MTU is not honored as it should be with rel. 14.04.
ip link show | grep eth1
3: eth1: <BROADCAST,
ip link show | grep vnet1
16: vnet1: <BROADCAST,
I am attaching two tcpdump/pcap traces that show a TCP transaction passing on vnet1 when TSO is on and when TSO is off.
Please see:
- vnet1_tso_on.pcap
- vnet1_tso_off.pcap
in attachment.
I noticed there was a driver upgrade in rel. 14.04:
in 14.04:
ethtool -i eth1
driver: enic
version: 2.1.1.50
firmware-version: 2.1(3a)
bus-info: 0000:07:00.0
supports-
supports-test: no
supports-
supports-
supports-
ethtool -i vnet1
driver: tun
version: 1.6
firmware-version:
bus-info: tap
supports-
supports-test: no
supports-
supports-
supports-
ethtool -k vnet1
Features for vnet1:
rx-checksumming: off [fixed]
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-
tx-checksum-ipv6: off [fixed]
tx-checksum-
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-
tcp-segmentatio
tx-tcp-
tx-tcp-
tx-tcp6-
udp-fragmentati
generic-
generic-
large-receive-
rx-vlan-offload: off [fixed]
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-
tx-gre-
tx-ipip-
tx-sit-
tx-udp_
tx-mpls-
fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-
rx-vlan-
rx-vlan-
l2-fwd-offload: off [fixed]
in 13.04 :
ethtool -i eth1
driver: enic
version: 2.1.1.39
firmware-version: 2.1(3a)
bus-info: 0000:07:00.0
supports-
supports-test: no
supports-
supports-
supports-
ethtool -i vnet1
driver: tun
version: 1.6
firmware-version:
bus-info: tap
supports-
supports-test: no
supports-
supports-
supports-
ethtool -k vnet1
Features for vnet1:
rx-checksumming: off [fixed]
tx-checksumming: on
tx-checksum-ipv4: off [fixed]
tx-checksum-
tx-checksum-ipv6: off [fixed]
tx-checksum-
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-
tcp-segmentatio
tx-tcp-
tx-tcp-
tx-tcp6-
udp-fragmentati
generic-
generic-
large-receive-
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-
fcoe-mtu: off [fixed]
Changed in qemu-kvm (Ubuntu): | |
status: | Incomplete → New |
Changed in qemu-kvm (Ubuntu): | |
importance: | Medium → High |
Thanks for reporting this bug. I wonder if this may have been fixed since 1.7 - Are you able to reproduce this with the qemu version in ppa:ubuntu- virt/candidate? (That is the version which we hope will end up in 14.04 before release)