• Ignat Korchagin's avatar
    dm crypt: add flags to optionally bypass kcryptd workqueues · 39d42fa9
    Ignat Korchagin authored
    This is a follow up to [1] that detailed latency problems associated
    with dm-crypt's use of workqueues when processing IO.
    
    Current dm-crypt implementation creates a significant IO performance
    overhead (at least on small IO block sizes) for both latency and
    throughput. We suspect offloading IO request processing into
    workqueues and async threads is more harmful these days with the
    modern fast storage. I also did some digging into the dm-crypt git
    history and much of this async processing is not needed anymore,
    because the reasons it was added are mostly gone from the kernel. More
    details can be found in [2] (see "Git archeology" section).
    
    This change adds DM_CRYPT_NO_READ_WORKQUEUE and
    DM_CRYPT_NO_WRITE_WORKQUEUE flags for read and write BIOs, which
    direct dm-crypt to not offload crypto operations into kcryptd
    workqueues.  In addition, writes are not buffered to be sorted in the
    dm-crypt red-black tree, but dispatched immediately. For cases, where
    crypto operations cannot happen (hard interrupt context, for example
    the read path of some NVME drivers), we offload the work to a tasklet
    rather than a workqueue.
    
    These flags only ensure no async BIO processing in the dm-crypt
    module. It is worth noting that some Crypto API implementations may
    offload encryption into their own workqueues, which are independent of
    the dm-crypt and its configuration. However upon enabling these new
    flags dm-crypt will instruct Crypto API not to backlog crypto
    requests.
    
    To give an idea of the performance gains for certain workloads,
    consider the script, and results when tested against various
    devices, detailed here:
    https://www.redhat.com/archives/dm-devel/2020-July/msg00138.html
    
    [1]: https://www.spinics.net/lists/dm-crypt/msg07516.html
    [2]: https://blog.cloudflare.com/speeding-up-linux-disk-encryption/Signed-off-by: default avatarIgnat Korchagin <ignat@cloudflare.com>
    Reviewed-by: default avatarDamien Le Moal <damien.lemoal@wdc.com>
    Reviewed-by: default avatarBob Liu <bob.liu@oracle.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    39d42fa9
dm-crypt.c 86.4 KB