From: Sowmini Varadhan <sowmini.varadhan@oracle.com>
To: netdev@vger.kernel.org, linux-crypto@vger.kernel.org
Cc: sowmini.varadhan@oracle.com
Subject: ipsec impact on performance
Date: Tue, 1 Dec 2015 12:59:53 -0500 [thread overview]
Message-ID: <20151201175953.GC21252@oracle.com> (raw)
I instrumented iperf with and without ipsec, just using esp-null,
and 1 thread, to keep things simple. I'm seeing some pretty dismal
performance numbers with ipsec, and trying to think of ways to
improve this. Here are my findings, please share feedback.
I suspect that a big part of the problem is the implicit loss of GSO,
and this is made worse by some inefficiencies in the xfrm code:
for single stream iperf (to avoid effects of rx-hash), I see the
following on a 10G p2p ethernet link.
8.5-9.5 Gbps clear traffic, TSO disabled, so GSO, GRO is in effect
3-4 Gbps clear traffic, with both TSO/GSO disabled
1.8-2 Gbps for esp-null.
So the above numbers suggest that losing TSO/GSO results in one
big drop in performance, and then there's another cliff for the
clear -> esp-null transition. And those cliffs apply even if you are
merely doing TCP-MD5 or AO for basic protection of the TCP connection.
I tried moving things about a bit to defer the ipsec after GSO - I'll
share my experimental patch as an RFC in a separate thread. (Disclaimer:
the patch is just an experiment at this point).
In that patch, I'm only focussing on esp-null and transp-mode ipsec
for now, just to get some basic performance numbers to see if this is
at all interesting. Essentially my hack mainly involves the following
- don't disable TSO in sk_setup_caps() if a dst->header_len is found
- in xfrm4_output, if GSO is applicable, bail out without esp header
addition - that will get done after skb_segment()
- at the end of tcp_gso_segment() (when tcp segment is available),
set things up for xfrm_output_one and trigger the esp_output..
I have to be very careful about setting up skb pointers here, since
it looks like esp_output overloads the mac_header pointer e.g., for
setting up the ip protocol field
If I do all these things, the ipsec+iperf improves slightly- for
esp-null, I move from approx 1.8 Gbps to about 3 Gbps, but clearly,
this is still quite far from the 8 - 9 Gbps that I can get with just
GSO+GRO for non-ipsec traffic.
There are some inefficiencies that I can see in the xfrm code,
that I am inheriting in my patch, e.g.,:
memory management in the xfrm code has room for improvement. Every
pass through xfrm_transport_output ends up doing a (avoidable?) memmove,
and each pass through esp_output ends up doing a kmalloc/free of the
"tmp" buffer.
But these are all still relatively small things - tweaking them
doesnt get me significantly past the 3 Gbps limit. Any suggestions
on how to make this budge (or design criticism of the patch) would
be welcome.
--Sowmini
next reply other threads:[~2015-12-01 17:59 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-01 17:59 Sowmini Varadhan [this message]
2015-12-01 18:17 ` ipsec impact on performance Rick Jones
2015-12-01 18:45 ` Sowmini Varadhan
2015-12-01 18:50 ` Rick Jones
2015-12-01 19:01 ` Sowmini Varadhan
2015-12-02 0:56 ` David Ahern
2015-12-02 1:09 ` Sowmini Varadhan
2015-12-02 1:25 ` David Ahern
2015-12-01 18:18 ` Tom Herbert
2015-12-01 18:37 ` Sowmini Varadhan
2015-12-02 11:56 ` David Laight
2015-12-02 12:11 ` Sowmini Varadhan
2015-12-02 12:41 ` David Laight
2015-12-02 13:25 ` Sowmini Varadhan
2015-12-02 20:50 ` Sowmini Varadhan
2015-12-02 21:07 ` Tom Herbert
2015-12-02 21:12 ` Sowmini Varadhan
2015-12-02 21:44 ` Tom Herbert
2015-12-02 21:47 ` Sowmini Varadhan
2015-12-02 22:01 ` Tom Herbert
2015-12-02 22:08 ` Sowmini Varadhan
2015-12-02 22:25 ` Eric Dumazet
2015-12-03 1:31 ` Rick Jones
2015-12-02 6:53 ` Steffen Klassert
2015-12-02 12:05 ` Sowmini Varadhan
2015-12-03 8:45 ` Steffen Klassert
2015-12-03 11:38 ` Sowmini Varadhan
2015-12-03 11:47 ` Steffen Klassert
2015-12-07 8:40 ` Steffen Klassert
2015-12-07 11:27 ` Sowmini Varadhan
2015-12-08 11:32 ` Steffen Klassert
2015-12-08 11:51 ` Sowmini Varadhan
2015-12-03 19:33 ` David Miller
2015-12-03 20:08 ` Eric Dumazet
2015-12-03 20:32 ` Sowmini Varadhan
2015-12-04 5:18 ` Sandy Harris
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=20151201175953.GC21252@oracle.com \
--to=sowmini.varadhan@oracle.com \
--cc=linux-crypto@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/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.