• Dmitry Safonov's avatar
    net/tcp: Prepare tcp_md5sig_pool for TCP-AO · 8c73b263
    Dmitry Safonov authored
    TCP-AO, similarly to TCP-MD5, needs to allocate tfms on a slow-path,
    which is setsockopt() and use crypto ahash requests on fast paths,
    which are RX/TX softirqs. Also, it needs a temporary/scratch buffer
    for preparing the hash.
    
    Rework tcp_md5sig_pool in order to support other hashing algorithms
    than MD5. It will make it possible to share pre-allocated crypto_ahash
    descriptors and scratch area between all TCP hash users.
    
    Internally tcp_sigpool calls crypto_clone_ahash() API over pre-allocated
    crypto ahash tfm. Kudos to Herbert, who provided this new crypto API.
    
    I was a little concerned over GFP_ATOMIC allocations of ahash and
    crypto_request in RX/TX (see tcp_sigpool_start()), so I benchmarked both
    "backends" with different algorithms, using patched version of iperf3[2].
    On my laptop with i7-7600U @ 2.80GHz:
    
                             clone-tfm                per-CPU-requests
    TCP-MD5                  2.25 Gbits/sec           2.30 Gbits/sec
    TCP-AO(hmac(sha1))       2.53 Gbits/sec           2.54 Gbits/sec
    TCP-AO(hmac(sha512))     1.67 Gbits/sec           1.64 Gbits/sec
    TCP-AO(hmac(sha384))     1.77 Gbits/sec           1.80 Gbits/sec
    TCP-AO(hmac(sha224))     1.29 Gbits/sec           1.30 Gbits/sec
    TCP-AO(hmac(sha3-512))    481 Mbits/sec            480 Mbits/sec
    TCP-AO(hmac(md5))        2.07 Gbits/sec           2.12 Gbits/sec
    TCP-AO(hmac(rmd160))     1.01 Gbits/sec            995 Mbits/sec
    TCP-AO(cmac(aes128))     [not supporetd yet]      2.11 Gbits/sec
    
    So, it seems that my concerns don't have strong grounds and per-CPU
    crypto_request allocation can be dropped/removed from tcp_sigpool once
    ciphers get crypto_clone_ahash() support.
    
    [1]: https://lore.kernel.org/all/ZDefxOq6Ax0JeTRH@gondor.apana.org.au/T/#u
    [2]: https://github.com/0x7f454c46/iperf/tree/tcp-md5-aoSigned-off-by: default avatarDmitry Safonov <dima@arista.com>
    Reviewed-by: default avatarSteen Hegelund <Steen.Hegelund@microchip.com>
    Acked-by: default avatarDavid Ahern <dsahern@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8c73b263
tcp_ipv6.c 58.4 KB