[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1453342588.1223.352.camel@edumazet-glaptop2.roam.corp.google.com>
Date: Wed, 20 Jan 2016 18:16:28 -0800
From: Eric Dumazet <eric.dumazet@...il.com>
To: Jesse Gross <jesse@...nel.org>
Cc: David Miller <davem@...emloft.net>,
Linux Kernel Network Developers <netdev@...r.kernel.org>,
Thomas Graf <tgraf@...g.ch>, John <john.phillips5@....com>
Subject: Re: [PATCH net] gro: Make GRO aware of lightweight tunnels.
On Wed, 2016-01-20 at 17:47 -0800, Jesse Gross wrote:
> Just to merge the two threads together, all of protocols that would be
> affected by this also have "normal" GRO handlers that will run when
> the packet is first received. There's no argument that that is
> preferable if it is available. However, GRO cells do provide a
> performance benefit in other situations so it would be nice to avoid
> disabling it if possible.
Note that having a second stage GRO can introduce packet reorders,
because GRO packets given to the second layer simply bypass GRO engine.
Say sender sends P1,P2,P3
Receiver gets P1 alone, put P1 in the GRO cell (2nd layer)
Then we get P2 and P3, aggregated by first layer.
We decap tunnel header, then give P2-P3 to 2nd GRO engine, P2-P3 is
directly given to upper stack. [1]
Then P1 will follow later.
-> packets received out of order. Slow paths on both senders and
receiver, extra sack, ...
[1]
static enum gro_result dev_gro_receive(struct napi_struct *napi, struct
sk_buff *skb)
{
...
if (!(skb->dev->features & NETIF_F_GRO))
goto normal;
if (skb_is_gso(skb) || skb_has_frag_list(skb) || skb->csum_bad)
goto normal;
Powered by blists - more mailing lists