• Boris Pismenny's avatar
    tls: Add opt-in zerocopy mode of sendfile() · c1318b39
    Boris Pismenny authored
    TLS device offload copies sendfile data to a bounce buffer before
    transmitting. It allows to maintain the valid MAC on TLS records when
    the file contents change and a part of TLS record has to be
    retransmitted on TCP level.
    
    In many common use cases (like serving static files over HTTPS) the file
    contents are not changed on the fly. In many use cases breaking the
    connection is totally acceptable if the file is changed during
    transmission, because it would be received corrupted in any case.
    
    This commit allows to optimize performance for such use cases to
    providing a new optional mode of TLS sendfile(), in which the extra copy
    is skipped. Removing this copy improves performance significantly, as
    TLS and TCP sendfile perform the same operations, and the only overhead
    is TLS header/trailer insertion.
    
    The new mode can only be enabled with the new socket option named
    TLS_TX_ZEROCOPY_SENDFILE on per-socket basis. It preserves backwards
    compatibility with existing applications that rely on the copying
    behavior.
    
    The new mode is safe, meaning that unsolicited modifications of the file
    being sent can't break integrity of the kernel. The worst thing that can
    happen is sending a corrupted TLS record, which is in any case not
    forbidden when using regular TCP sockets.
    
    Sockets other than TLS device offload are not affected by the new socket
    option. The actual status of zerocopy sendfile can be queried with
    sock_diag.
    
    Performance numbers in a single-core test with 24 HTTPS streams on
    nginx, under 100% CPU load:
    
    * non-zerocopy: 33.6 Gbit/s
    * zerocopy: 79.92 Gbit/s
    
    CPU: Intel(R) Xeon(R) Platinum 8380 CPU @ 2.30GHz
    Signed-off-by: default avatarBoris Pismenny <borisp@nvidia.com>
    Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
    Signed-off-by: default avatarMaxim Mikityanskiy <maximmi@nvidia.com>
    Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
    Link: https://lore.kernel.org/r/20220518092731.1243494-1-maximmi@nvidia.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    c1318b39
tls.h 21 KB