netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* TCP stalls with 802.3ad + bridge + kvm guest
@ 2012-07-27 18:38 Peter Samuelson
  2012-07-27 20:00 ` Jay Vosburgh
  0 siblings, 1 reply; 10+ messages in thread
From: Peter Samuelson @ 2012-07-27 18:38 UTC (permalink / raw)
  To: netdev; +Cc: jgoerzen


So, we have the following network stack:

    ixgbe [10 Gbit port] -- bonding [802.3ad] -- bridge -- KVM guest

(There's also a VLAN layer, but I can reproduce this problem without
it.)  It all works, except that with some flows in the KVM guest - I
can reproduce using smbclient - transfers keep stalling, such that I'm
averaging well under 1 MB/s.  Should be more like 100 MB/s.

Oddly, this only occurs when both the 802.3ad and KVM are used:

    Server        Agg        Client         TCP stalls
    --------------------------------------------------
    external      none       KVM guest      no
    external      802.3ad    KVM host       no
    KVM host      802.3ad    KVM guest      no
    external      802.3ad    KVM guest      yes

I don't understand the stalls.  'ping -f' does not show any dropped
packets.  tcpdump seems to show a lot of retransmits (server to
client), out-of-order TCP segments (server to client), and duplicate
ACKs (client to server).

Further notes:

- OS for KVM host (and guest) is Debian stable, with kernels from
  Debian backports.  I've tried several kernels including 3.4,
  currently using 3.2.20.

- Arista 10 Gbit switch, no congestion to speak of, all the test
  traffic is local to the switch.

- I can reproduce with either 1 or 2 active ports in the LACP group.

- The host IP is bound to the bridge, not directly to bond0.

- First noticed problem with a Windows VM and SMB.  I can reproduce
  100% using smbclient, but wget (http) goes full speed.

Does any of this sound familiar?  Is it a known issue?  Can anyone
offer any hints?  I can run tcpdump on the client, the server or any
point in the KVM host network stack, in case anyone is better at
interpreting them than I am.

Thanks,
Peter

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-07-27 18:38 TCP stalls with 802.3ad + bridge + kvm guest Peter Samuelson
@ 2012-07-27 20:00 ` Jay Vosburgh
  2012-07-31 14:07   ` Peter Samuelson
  2012-08-01 14:41   ` Peter Samuelson
  0 siblings, 2 replies; 10+ messages in thread
From: Jay Vosburgh @ 2012-07-27 20:00 UTC (permalink / raw)
  To: Peter Samuelson; +Cc: netdev, jgoerzen

Peter Samuelson <psamuelson@efolder.net> wrote:
>So, we have the following network stack:
>
>    ixgbe [10 Gbit port] -- bonding [802.3ad] -- bridge -- KVM guest
>
>(There's also a VLAN layer, but I can reproduce this problem without
>it.)  It all works, except that with some flows in the KVM guest - I
>can reproduce using smbclient - transfers keep stalling, such that I'm
>averaging well under 1 MB/s.  Should be more like 100 MB/s.
>
>Oddly, this only occurs when both the 802.3ad and KVM are used:
>
>    Server        Agg        Client         TCP stalls
>    --------------------------------------------------
>    external      none       KVM guest      no
>    external      802.3ad    KVM host       no
>    KVM host      802.3ad    KVM guest      no
>    external      802.3ad    KVM guest      yes

	Does the "none" for Agg (the first line) mean no bonding at all?

	Does the problem happen if the bond is a different mode
(balance-xor, for example)?

>I don't understand the stalls.  'ping -f' does not show any dropped
>packets.  tcpdump seems to show a lot of retransmits (server to
>client), out-of-order TCP segments (server to client), and duplicate
>ACKs (client to server).

	Do the various stats on the host and guest show any drops?
E.g., from "netstat -i" and "tc -s qdisc"

>Further notes:
>
>- OS for KVM host (and guest) is Debian stable, with kernels from
>  Debian backports.  I've tried several kernels including 3.4,
>  currently using 3.2.20.
>
>- Arista 10 Gbit switch, no congestion to speak of, all the test
>  traffic is local to the switch.
>
>- I can reproduce with either 1 or 2 active ports in the LACP group.
>
>- The host IP is bound to the bridge, not directly to bond0.
>
>- First noticed problem with a Windows VM and SMB.  I can reproduce
>  100% using smbclient, but wget (http) goes full speed.
>
>Does any of this sound familiar?  Is it a known issue?  Can anyone
>offer any hints?  I can run tcpdump on the client, the server or any
>point in the KVM host network stack, in case anyone is better at
>interpreting them than I am.

	Maybe; I've seen a similar-sounding problem with CIFS wherein
the loss of the last or near-last packet that's part of the CIFS request
will cause TCP to run a full RTO.  This occurs because CIFS has no more
packets to send, as it's waiting for a response, so there is no
subsequent traffic that will trigger duplicate ACKs from the peer and
thus initiate a fast retransmission.  I may be mangling the CIFS
details, but that's the packet exchange that occurs, and it resulted in
very poor performance for CIFS.

	The case I saw this in was not using KVM, but was instead
dropping some packets at a network bottleneck.  In that case, CIFS
experienced the poor performance, but NFS did not; the NFS packet
captures also showed the lost packets, but NFS would continue to send
and issue fast retransmissions in response to the duplicate ACKs it
received.  Perhaps this mirrors your experience with CIFS vs. wget, and
your bottleneck is somewhere on the host itself in the virtual
networking.

	-J

---
	-Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-07-27 20:00 ` Jay Vosburgh
@ 2012-07-31 14:07   ` Peter Samuelson
  2012-08-01 14:41   ` Peter Samuelson
  1 sibling, 0 replies; 10+ messages in thread
From: Peter Samuelson @ 2012-07-31 14:07 UTC (permalink / raw)
  To: Jay Vosburgh, netdev; +Cc: jgoerzen


> >    ixgbe [10 Gbit port] -- bonding [802.3ad] -- bridge -- KVM guest
> >
> >(There's also a VLAN layer, but I can reproduce this problem without
> >it.)  It all works, except that with some flows in the KVM guest - I
> >can reproduce using smbclient - transfers keep stalling, such that I'm
> >averaging well under 1 MB/s.  Should be more like 100 MB/s.
> >
> >Oddly, this only occurs when both the 802.3ad and KVM are used:
> >
> >    Server        Agg        Client         TCP stalls
> >    --------------------------------------------------
> >    external      none       KVM guest      no
> >    external      802.3ad    KVM host       no
> >    KVM host      802.3ad    KVM guest      no
> >    external      802.3ad    KVM guest      yes

[Jay Vosburgh]
> 	Does the "none" for Agg (the first line) mean no bonding at all?

Correct.  'None' is without the bonding driver, putting the eth
interface directly on the bridge.  (With or without a VLAN layer.)

> 	Does the problem happen if the bond is a different mode
> (balance-xor, for example)?

This is taking me longer to test, as I have to also update the switch
port config, which required coordination with coworkers.  I'll get that
info as soon as I can.

> 	Do the various stats on the host and guest show any drops?
> E.g., from "netstat -i" and "tc -s qdisc"

Yes, 'netstat -i' on the KVM host shows a few dropped RX packets on
bond0 - looks like it increments by 2 each time I do a test download of
my 20MB file.  'tc -s qdisc' on the KVM host shows nothing, and I see
no drops on the KVM guest side.

I'll get the switch reconfigured not to do LACP so I can test other
bonding modes, as you suggest.  Thanks for the quick response!  Sorry
my own followup was delayed....

Peter

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-07-27 20:00 ` Jay Vosburgh
  2012-07-31 14:07   ` Peter Samuelson
@ 2012-08-01 14:41   ` Peter Samuelson
  2012-08-04  5:04     ` Jesse Brandeburg
  1 sibling, 1 reply; 10+ messages in thread
From: Peter Samuelson @ 2012-08-01 14:41 UTC (permalink / raw)
  To: Jay Vosburgh, netdev; +Cc: jgoerzen


  [Peter Samuelson]
> >    ixgbe [10 Gbit port] -- bonding [802.3ad] -- bridge -- KVM guest
> >
> >It all works, except that with some flows in the KVM guest - I
> >can reproduce using smbclient - transfers keep stalling, such that I'm
> >averaging well under 1 MB/s.  Should be more like 100 MB/s.
> >
> >Oddly, this only occurs when both the 802.3ad and KVM are used:
> >
> >    Server        Agg        Client         TCP stalls
> >    --------------------------------------------------
> >    external      none       KVM guest      no
> >    external      802.3ad    KVM host       no
> >    KVM host      802.3ad    KVM guest      no
> >    external      802.3ad    KVM guest      yes

[Jay Vosburgh]
>       Does the problem happen if the bond is a different mode
> (balance-xor, for example)?

No, the balance-xor mode seems to work normally.  I am testing it with
only a single slave interface, same way I'm testing LACP mode.

>       Do the various stats on the host and guest show any drops?
> E.g., from "netstat -i" and "tc -s qdisc"

I am not sure what to make of 'netstat -i'.  Some test boots, I get
26000 or so RX packets dropped on bond0 and eth2 (the slave interface),
but not during the actual file transfer tests.  The current test boot,
with LACP enabled, 'netstat -i' shows only 19 dropped RX packets from
bond0 (compared to 740k total RX packets), after several test runs.

Thanks,
Peter

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-08-01 14:41   ` Peter Samuelson
@ 2012-08-04  5:04     ` Jesse Brandeburg
  2012-08-04 16:22       ` Peter Samuelson
  0 siblings, 1 reply; 10+ messages in thread
From: Jesse Brandeburg @ 2012-08-04  5:04 UTC (permalink / raw)
  To: Peter Samuelson; +Cc: Jay Vosburgh, netdev, jgoerzen

On Wed, Aug 1, 2012 at 7:41 AM, Peter Samuelson <psamuelson@efolder.net> wrote:
>
>   [Peter Samuelson]
>> >    ixgbe [10 Gbit port] -- bonding [802.3ad] -- bridge -- KVM guest
>> >
>> >It all works, except that with some flows in the KVM guest - I
>> >can reproduce using smbclient - transfers keep stalling, such that I'm
>> >averaging well under 1 MB/s.  Should be more like 100 MB/s.
>> >
>> >Oddly, this only occurs when both the 802.3ad and KVM are used:

is it because offloads are enabled?  I had to disable several of them
to get my virtual machines to work on both igb and ixgbe interfaces, I
haven't gone any further to isolate why.

try
# ethtool -K ethx tso off gso off lro off

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-08-04  5:04     ` Jesse Brandeburg
@ 2012-08-04 16:22       ` Peter Samuelson
  2012-08-04 18:07         ` Sławek Janecki
  2012-08-04 22:45         ` Peter Samuelson
  0 siblings, 2 replies; 10+ messages in thread
From: Peter Samuelson @ 2012-08-04 16:22 UTC (permalink / raw)
  To: Jesse Brandeburg; +Cc: Jay Vosburgh, netdev, jgoerzen


[Jesse Brandeburg]
> try
> # ethtool -K ethx tso off gso off lro off

Wow - that worked!  Thanks so much!  Now I'll see if I can narrow it
down a bit from there.

Then it's on to the mystery of why I have to explicitly set eth2+eth3
'promisc' - the bond0 device is supposed to propagate that setting but
apparently it doesn't.  (Lower priority, though, since there's an easy
workaround.)

Peter

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-08-04 16:22       ` Peter Samuelson
@ 2012-08-04 18:07         ` Sławek Janecki
  2012-08-04 19:21           ` Sławek Janecki
  2012-08-04 22:45         ` Peter Samuelson
  1 sibling, 1 reply; 10+ messages in thread
From: Sławek Janecki @ 2012-08-04 18:07 UTC (permalink / raw)
  To: Peter Samuelson; +Cc: Jesse Brandeburg, Jay Vosburgh, netdev, jgoerzen

I have no such info in dmsg.
I think I will file a issue to Node.js Dev Team.
Thanks for reply.

On Sat, Aug 4, 2012 at 6:22 PM, Peter Samuelson <psamuelson@efolder.net> wrote:
>
> [Jesse Brandeburg]
>> try
>> # ethtool -K ethx tso off gso off lro off
>
> Wow - that worked!  Thanks so much!  Now I'll see if I can narrow it
> down a bit from there.
>
> Then it's on to the mystery of why I have to explicitly set eth2+eth3
> 'promisc' - the bond0 device is supposed to propagate that setting but
> apparently it doesn't.  (Lower priority, though, since there's an easy
> workaround.)
>
> Peter
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 

pozdrawiam
Sławomir Janecki

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-08-04 18:07         ` Sławek Janecki
@ 2012-08-04 19:21           ` Sławek Janecki
  0 siblings, 0 replies; 10+ messages in thread
From: Sławek Janecki @ 2012-08-04 19:21 UTC (permalink / raw)
  To: Peter Samuelson; +Cc: Jesse Brandeburg, Jay Vosburgh, netdev, jgoerzen

wrong mail sorry

On Sat, Aug 4, 2012 at 8:07 PM, Sławek Janecki <janecki@gmail.com> wrote:
> I have no such info in dmsg.
> I think I will file a issue to Node.js Dev Team.
> Thanks for reply.
>
> On Sat, Aug 4, 2012 at 6:22 PM, Peter Samuelson <psamuelson@efolder.net> wrote:
>>
>> [Jesse Brandeburg]
>>> try
>>> # ethtool -K ethx tso off gso off lro off
>>
>> Wow - that worked!  Thanks so much!  Now I'll see if I can narrow it
>> down a bit from there.
>>
>> Then it's on to the mystery of why I have to explicitly set eth2+eth3
>> 'promisc' - the bond0 device is supposed to propagate that setting but
>> apparently it doesn't.  (Lower priority, though, since there's an easy
>> workaround.)
>>
>> Peter
>> --
>> To unsubscribe from this list: send the line "unsubscribe netdev" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>
>
> --
>
> pozdrawiam
> Sławomir Janecki



-- 

pozdrawiam
Sławomir Janecki

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-08-04 16:22       ` Peter Samuelson
  2012-08-04 18:07         ` Sławek Janecki
@ 2012-08-04 22:45         ` Peter Samuelson
  2012-08-11 18:28           ` Stephen Hemminger
  1 sibling, 1 reply; 10+ messages in thread
From: Peter Samuelson @ 2012-08-04 22:45 UTC (permalink / raw)
  To: Jesse Brandeburg; +Cc: Jay Vosburgh, netdev, jgoerzen


> [Jesse Brandeburg]
> > try
> > # ethtool -K ethx tso off gso off lro off

Specifically, 'lro off' is the trick.  The others don't have a
noticeable effect.  Now I can get 70 MB/s or better most of the time,
in either direction.

Thanks again,
Peter

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: TCP stalls with 802.3ad + bridge + kvm guest
  2012-08-04 22:45         ` Peter Samuelson
@ 2012-08-11 18:28           ` Stephen Hemminger
  0 siblings, 0 replies; 10+ messages in thread
From: Stephen Hemminger @ 2012-08-11 18:28 UTC (permalink / raw)
  To: Peter Samuelson; +Cc: Jesse Brandeburg, Jay Vosburgh, netdev, jgoerzen

On Sat, 4 Aug 2012 17:45:11 -0500
Peter Samuelson <psamuelson@efolder.net> wrote:

> 
> > [Jesse Brandeburg]
> > > try
> > > # ethtool -K ethx tso off gso off lro off
> 
> Specifically, 'lro off' is the trick.  The others don't have a
> noticeable effect.  Now I can get 70 MB/s or better most of the time,
> in either direction.
> 
> Thanks again,
> Peter

When device is added to bridge, the bridge code does ask the device
to turn LRO off (automatically). Unfortunately some device drivers are
broken.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-08-11 18:28 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-27 18:38 TCP stalls with 802.3ad + bridge + kvm guest Peter Samuelson
2012-07-27 20:00 ` Jay Vosburgh
2012-07-31 14:07   ` Peter Samuelson
2012-08-01 14:41   ` Peter Samuelson
2012-08-04  5:04     ` Jesse Brandeburg
2012-08-04 16:22       ` Peter Samuelson
2012-08-04 18:07         ` Sławek Janecki
2012-08-04 19:21           ` Sławek Janecki
2012-08-04 22:45         ` Peter Samuelson
2012-08-11 18:28           ` Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).