Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-30 Thread Edward Cree
On 24/07/2019 22:49, Edward Cree wrote: > One thing that's causing me some uncertainty: busy_poll_stop() does a >  napi->poll(), which can potentially gro_normal_one() something.  But >  when I tried to put a gro_normal_list() just after that, I ran into >  list corruption because it could race aga

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-24 Thread Edward Cree
On 12/07/2019 17:48, Eric Dumazet wrote: >> but the rest is the stuff we're polling for for low latency. >> I'm putting a gro_normal_list() call after the trace_napi_poll() in >>  napi_busy_loop() and testing that, let's see how it goes... One thing that's causing me some uncertainty: busy_poll_sto

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-12 Thread David Miller
From: Eric Dumazet Date: Fri, 12 Jul 2019 18:48:29 +0200 > I should have mentioned that we have a patch that I forgot to > upstream adding the PSH flag to all TSO packets, meaning the > receiver can automatically learn the boundary of a GRO packet and > not have to wait for the napi->poll() end (

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-12 Thread Eric Dumazet
On 7/12/19 5:59 PM, Edward Cree wrote: > On 10/07/2019 18:39, Eric Dumazet wrote: >> Holding a small packet in the list up to the point we call busy_poll_stop() >> will basically make busypoll non working anymore. >> >> napi_complete_done() has special behavior when busy polling is active. > Yep

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-12 Thread Edward Cree
On 10/07/2019 18:39, Eric Dumazet wrote: > Holding a small packet in the list up to the point we call busy_poll_stop() > will basically make busypoll non working anymore. > > napi_complete_done() has special behavior when busy polling is active. Yep, I get it now, sorry for being dumb :) Essentiall

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-10 Thread Eric Dumazet
On 7/10/19 6:47 PM, Edward Cree wrote: > On 10/07/2019 16:41, Eric Dumazet wrote: >> On 7/10/19 4:52 PM, Edward Cree wrote: >>> Hmm, I was caught out by the call to napi_poll() actually being a local >>>  function pointer, not the static function of the same name.  How did a >>>  shadow like tha

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-10 Thread Edward Cree
On 10/07/2019 16:41, Eric Dumazet wrote: > On 7/10/19 4:52 PM, Edward Cree wrote: >> Hmm, I was caught out by the call to napi_poll() actually being a local >>  function pointer, not the static function of the same name.  How did a >>  shadow like that ever get allowed? >> But in that case I _reall

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-10 Thread Eric Dumazet
On 7/10/19 4:52 PM, Edward Cree wrote: > Hmm, I was caught out by the call to napi_poll() actually being a local >  function pointer, not the static function of the same name.  How did a >  shadow like that ever get allowed? > But in that case I _really_ don't understand napi_busy_loop(); nothi

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-10 Thread Edward Cree
On 10/07/2019 08:27, Paolo Abeni wrote: > I'm toying with a patch similar to your 3/3 (most relevant difference > being the lack of a limit to the batch size), on top of ixgbe (which > sends all the pkts to the GRO engine), and I'm observing more > controversial results (UDP only): > > * when a sin

Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-10 Thread Paolo Abeni
Hi, On Tue, 2019-07-09 at 20:27 +0100, Edward Cree wrote: > Where not specified (as batch=), net.core.gro_normal_batch was set to 8. > The net-next baseline used for these tests was commit 7d30a7f6424e. > TCP 4 streams, GRO on: all results line rate (9.415Gbps) > net-next: 210.3% cpu > after #1: 1

[RFC PATCH net-next 0/3] net: batched receive in GRO path

2019-07-09 Thread Edward Cree
This series listifies part of GRO processing, in a manner which allows those packets which are not GROed (i.e. for which dev_gro_receive returns GRO_NORMAL) to be passed on to the listified regular receive path. dev_gro_receive() itself is not listified, nor the per-protocol GRO callback, since