Skip to content

RFC Add hardware assist for IPSEC crypto

David Dillow lkml netdev 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest22 patches 26 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/22xfrm: Add direction information to xfrm_statenet/ipv4/xfrm4_state.c net/ipv6/xfrm6_state.c net/xfrm/xfrm_state.c+24 -09 replies
2/22xfrm: Add xfrm offload management calls to struct netdevice+0 -01 reply
3/22xfrm: Add offload management routinesnet/xfrm/xfrm_export.c net/xfrm/xfrm_state.c+30 -03 replies
4/22xfrm: Try to offload inbound xfrm_states+0 -03 replies
5/22xfrm: Attempt to offload bundled xfrm_states for outbound xfrmsinclude/net/xfrm.h net/xfrm/xfrm_policy.c+34 -05 replies
6/22xfrm: add a parameter to xfrm_prune_bundles()+0 -01 reply
7/22xfrm: Allow device drivers to force recalculation of offloadsnet/xfrm/xfrm_export.c net/xfrm/xfrm_policy.c net/xfrm/xfrm_state.c+58 -03 replies
8/22skbuff: Add routines to manage applied offloads per skbinclude/net/xfrm.h net/core/skbuff.c+40 -00 replies
9/22AH: Split header initialization from zeroing of mutable fields+0 -00 replies
10/22AH, ESP: Add offloading of outbound packetsnet/ipv4/esp4.c+35 -210 replies
11/22AH, ESP: Add offloading of inbound packetsnet/ipv4/esp4.c+30 -160 replies
12/22ethtool: Add support for crypto offloadnet/core/ethtool.c+54 -00 replies
13/22typhoon: Make the ipsec descriptor match actual usage+0 -00 replies
14/22typhoon: add inbound offload result processing+0 -00 replies
15/22typhoon: add outbound offload processing+0 -00 replies
16/22typhoon: collect crypto offload capabilitiesdrivers/net/typhoon.h+14 -00 replies
17/22typhoon: split out setting of offloaded tasks+0 -00 replies
18/22typhoon: add validation of offloaded xfrm_states+0 -00 replies
19/22typhoon: add loading of xfrm_states to hardware+0 -00 replies
20/22typhoon: add management of outbound bundles+0 -00 replies
21/22typhoon: add callbacks to support crypto offload+0 -00 replies
22/22Add some documentation for the IPSEC crypto offloadDocumentation/networking/netdevices.txt+16 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [RFC 2.6.10 0/22] Add hardware assist for IPSEC crypto

The following patch set adds hardware offload of the crypto operations for IPv4 IPSEC processing. It gives a noticible speedup on my (admittedly older) hardware, but given the recent numbers posted, can be a speedup even for more recent hardware.

There are a few known issues with the current patchset, but I think it is ready for wider review.

* Only the 3Com 3CR990 family of NICs are supported. I don't have hardware or documentation for the Intel cards.
* Doesn't do IPv6. Need someone to implement map_direction(), and AH/ESP handling, as well as come up with a card that supports it.
* The use of GFP_ATOMIC in xfrm_offload_alloc() is probably not a good idea.
* linux/skbuff.h cannot include net/xfrm.h currently, so there are redundant defines (requires some header cleanup, which I'm not very inclined to tackle at the moment.)
* TCP Segmentation offload seems broken by firmware 03.001.008. It could be my changes to support the offload, but that seems unlikely. I will have to investigate this.
* Latency suffers somewhat on smaller packets, it may be advisable to have a minimum packet size to offload.
* No real feedback on which xfrm_states have been offloaded or not.

The patch set will be sent as follow-ups to this post, or is available via:

bk pull http://typhoon.bkbits.net/ipsec-2.6

It will update the following files:

 Documentation/networking/netdevices.txt |   16 
 drivers/net/typhoon.c                   |  687 +++++++++++++++++++++++++++++++-
 drivers/net/typhoon.h                   |   38 +
 include/linux/ethtool.h                 |    8 
 include/linux/netdevice.h               |   11 
 include/linux/skbuff.h                  |   55 ++
 include/net/dst.h                       |    1 
 include/net/xfrm.h                      |  108 +++++
 net/core/ethtool.c                      |   54 ++
 net/core/skbuff.c                       |   31 +
 net/ipv4/ah4.c                          |   99 ++--
 net/ipv4/esp4.c                         |  102 +++-
 net/ipv4/xfrm4_state.c                  |   10 
 net/ipv6/xfrm6_state.c                  |    9 
 net/xfrm/xfrm_export.c                  |    4 
 net/xfrm/xfrm_policy.c                  |   64 ++
 net/xfrm/xfrm_state.c                   |  101 ++++
 17 files changed, 1284 insertions(+), 114 deletions(-)

If you work from the mailed patches, you will want the netdev-2.6 updates to the typhoon driver, as the 3CR990B series needs the newest firmware to correctly offload IPSEC processing. That patch is available from

http://www.thedillows.org/typhoon-netdev-2.6.patch.bz2

The following results were generated using a dual processor PIII 1GHz/512MB with a 3CR990SVR97 (ori) and an Athlon 550 MHz/256MB with a 3CR990B (tank). Latency testing was performed with lmbench's lat_tcp, and bandwith testing was performed with Andrew Morton's zcc/zcs/cyclesoak. I ran the tests multiple times, and picked the median results to report. There was not much deviation in the results (+/- 1.5 us +/- 50KBytes/s +/- 1.5% CPU usage).

TCP Latency tests (1 byte msg)

Config Latency
No IPSEC 196 us
AH/SHA1 (sw) 256 us
AH/SHA1 (hw) 317 us
ESP/3DES,SHA1 (sw) 333 us
ESP/3DES,SHA1 (hw) 347 us
ESP-AH/3DES,SHA1-SHA1 (sw) 387 us
ESP-AH/3DES,SHA1-SHA1 (hw) 467 us

TCP Latency tests (1024 byte msg)

Config Latency
No IPSEC 625 us
AH/SHA1 (sw) 771 us
AH/SHA1 (hw) 858 us
ESP/3DES,SHA1 (sw) 1999 us
ESP/3DES,SHA1 (hw) 902 us
ESP-AH/3DES,SHA1-SHA1 (sw) 2140 us
ESP-AH/3DES,SHA1-SHA1 (hw) 1131 us

Bandwidth tests

Config (sender -> receiver) Bandwidth ori CPU tank CPU
No IPSEC (tank->ori) 11494 KB/s 11.9% 18.7%
No IPSEC (ori->tank) 11492 KB/s 9.5% 34.3%

AH/SHA1 (sw) (tank->ori) 11303 KB/s 29.2% 79.3%
AH/SHA1 (sw) (ori->tank) 11302 KB/s 28.6% 91.1%
ESP/3DES,SHA1 (sw) (tank->ori) 2130 KB/s 29.6% 100%
ESP/3DES,SHA1 (sw) (ori->tank) 2263 KB/s 29.3% 99.7%
ESP-AH/3DES,SHA1-SHA1 (sw) (tank->ori) 1906 KB/s 29.1% 100%
ESP-AH/3DES,SHA1-SHA1 (sw) (ori->tank) 2051 KB/s 29.3% 99.7%

AH/SHA1 (hw) (tank->ori) 11303 KB/s 14.0% 30.2%
AH/SHA1 (hw) (ori->tank) 11301 KB/s 14.1% 39.8%
ESP/3DES,SHA1 (hw) (tank->ori) 11221 KB/s 15.4% 44.9%
ESP/3DES,SHA1 (hw) (ori->tank) 11220 KB/s 21.5% 48.1%
ESP-AH/3DES,SHA1-SHA1 (hw) (tank->ori) 5920 KB/s 10.8% 35.9%
ESP-AH/3DES,SHA1-SHA1 (hw) (ori->tank) 7189 KB/s 14.3% 35.4%

The last line seems suspicious, and should probably be retested.