All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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.