From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Or Gerlitz <gerlitz.or@gmail.com>
Cc: Edward Cree <ecree@solarflare.com>,
Saeed Mahameed <saeedm@mellanox.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
brouer@redhat.com
Subject: Re: [net-next PATCH] net: ipv4: fix listify ip_rcv_finish in case of forwarding
Date: Fri, 13 Jul 2018 13:08:40 +0200 [thread overview]
Message-ID: <20180713130840.1b6b78ea@redhat.com> (raw)
In-Reply-To: <CAJ3xEMiUbjSM4-EZkm-_b+EtAS4NZOA+Whcv3V3=UT+CwmOvQA@mail.gmail.com>
On Thu, 12 Jul 2018 23:10:28 +0300 Or Gerlitz <gerlitz.or@gmail.com> wrote:
> On Wed, Jul 11, 2018 at 11:06 PM, Jesper Dangaard Brouer
> <brouer@redhat.com> wrote:
>
> > Well, I would prefer you to implement those. I just did a quick
> > implementation (its trivially easy) so I have something to benchmark
> > with. The performance boost is quite impressive!
>
> sounds good, but wait
>
>
> > One reason I didn't "just" send a patch, is that Edward so-fare only
> > implemented netif_receive_skb_list() and not napi_gro_receive_list().
>
> sfc does't support gro?! doesn't make sense.. Edward?
>
> > And your driver uses napi_gro_receive(). This sort-of disables GRO for
> > your driver, which is not a choice I can make. Interestingly I get
> > around the same netperf TCP_STREAM performance.
>
> Same TCP performance
I said around the same... I'll redo the benchmarks and verify...
(did it.. see later).
> with GRO and no rx-batching
>
> or
>
> without GRO and yes rx-batching
Yes, obviously without GRO and yes rx-batching.
> is by far not intuitive result to me unless both these techniques
> mostly serve to eliminate lots of instruction cache misses and the
> TCP stack is so much optimized that if the code is in the cache,
> going through it once with 64K byte GRO-ed packet is like going
> through it ~40 (64K/1500) times with non GRO-ed packets.
Actually the GRO code path is actually rather expensive, and uses a lot
of indirect-calls. If you have an UDP workload, then disable-GRO will
give you a 10-15% performance boost.
Edward's changes are basically a generalized version of GRO, up-to the
IP layer (ip_rcv). So, for me it makes perfect sense.
> What's the baseline (with GRO and no rx-batching) number on your setup?
Okay, redoing the benchmarks...
Implemented a code hack so I runtime can control if mlx5 driver uses
napi_gro_receive() or netif_receive_skb_list() (abusing a netdev ethtool
controlled feature flag no-in-use).
To get a quick test going with feedback every 3 sec I use:
$ netperf -t TCP_STREAM -H 198.18.1.1 -D3 -l 60000 -T 4,4
Default: using napi_gro_receive() with GRO enabled:
Interim result: 25995.28 10^6bits/s over 3.000 seconds
Disable GRO but still use napi_gro_receive():
Interim result: 21980.45 10^6bits/s over 3.001 seconds
Make driver use netif_receive_skb_list():
Interim result: 25490.67 10^6bits/s over 3.002 seconds
As you can see, using netif_receive_skb_list() have a huge performance
boost over disabled-GRO. And it comes very close to the performance
of enabled-GRO. Which is rather impressive! :-)
Notice, even more impressively; these tests are without CONFIG_RETPOLINE.
We primarily merged netif_receive_skb_list() due to the overhead of
RETPOLINEs, but we even see a benefit when not using RETPOLINEs.
> > I assume we can get even better perf if we "listify" napi_gro_receive.
>
> yeah, that would be very interesting to get there
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
next prev parent reply other threads:[~2018-07-13 11:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-11 15:01 [net-next PATCH] net: ipv4: fix listify ip_rcv_finish in case of forwarding Jesper Dangaard Brouer
2018-07-11 15:41 ` Edward Cree
2018-07-11 20:15 ` Jesper Dangaard Brouer
2018-07-11 19:05 ` Saeed Mahameed
2018-07-11 20:06 ` Jesper Dangaard Brouer
2018-07-12 20:10 ` Or Gerlitz
2018-07-13 11:08 ` Jesper Dangaard Brouer [this message]
2018-07-13 14:19 ` Edward Cree
2018-07-13 16:04 ` Jesper Dangaard Brouer
2018-07-13 18:14 ` Eric Dumazet
2018-07-30 14:38 ` Or Gerlitz
2018-07-12 23:41 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180713130840.1b6b78ea@redhat.com \
--to=brouer@redhat.com \
--cc=ecree@solarflare.com \
--cc=gerlitz.or@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=saeedm@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.