While performing stress testing on a KVM instance with IPv6, we noticed very
poor performance on IPv6 TCP connections, which basically came down to the bug
fixed by upstream commit 8e1e8a4779cb23c1d9f51e9223795e07ec54d77a. Both, the
host and the guest were running 2.6.32-5-amd64 2.6.32-31 and the host featured
Intel NICs, using e1000e and igb. SSH sessions to the guest from outside would
effectively stall when large output was generated (e.g. ls -lR /) and
the problem would disappear when disabling virtio_net's gso (modprobe
virtio_net gso=0) or disabling the host's TSO using ethtool.
Furthermore, while trying to reproduce the behaviour on another system, we
triggered the bug fixed by commit 0aa68271510ae2b221d4b60892103837be63afe4,
i.e. a routed (not bridged) KVM instance using virtio-net would not get its GSO
IPv6 packets forwarded to the network, with the same poor performance as above.
After backporting and applying both patches to squeeze's version, IPv6
performance was restored to the same levels as IPv4 in both cases. You
can find the backported versions of the patches attached.
From d70ca6cd8f33d4cb2fba194fc520232278f0d6a1 Mon Sep 17 00:00:00 2001
From: Sridhar Samudrala <email@example.com>
Date: Thu, 16 Jun 2011 15:52:35 +0300
Subject: [PATCH 1/2] net: Fix IPv6 GSO type checks in Intel ethernet drivers
Found this problem when testing IPv6 from a KVM guest to a remote
host via e1000e device on the host.
The following patch fixes the check for IPv6 GSO packet in Intel
ethernet drivers to use skb_is_gso_v6(). SKB_GSO_DODGY is also set
when packets are forwarded from a guest.
Signed-off-by: Sridhar Samudrala <firstname.lastname@example.org>
Signed-off-by: Jeff Kirsher <email@example.com>
Signed-off-by: David S. Miller <firstname.lastname@example.org>