The Intel QuickAssist “QAT” driver for the mainline Linux 7.1 kernel is adding support for Zstd offloading across QuickAssist Gen 4 / Gen 5 / Gen 6 accelerators for Zstandard compression as well as Zstandard decompression (limited there to the latest Gen 6 hardware).
Queued up via the Linux cryptography subsystem’s “cryptodev” branch ahead of the upcoming Linux 7.1 merge window is finally the patch to support Zstd using the kernel’s asynchronous compression “acomp” API.
This Intel QAT Zstd support provides basic compression offload for existing Gen4/Gen5 QAT accelerators. With the newest Gen6 IP to be found with next-gen Xeon processors there is a cleaner native path for Zstd compression as well as decompression offload. Last year is when Intel introduced initial QAT Gen 6 support to their Linux kernel driver.
The patch summarizes the QAT Zstd acceleration as:
“Add support for the ZSTD algorithm for QAT GEN4, GEN5 and GEN6 via the acomp API.
For GEN4 and GEN5, compression is performed in hardware using LZ4s, a QAT-specific variant of LZ4. The compressed output is post-processed to generate ZSTD sequences, and the ZSTD library is then used to produce the final ZSTD stream via zstd_compress_sequences_and_literals(). Only inputs between 8 KB and 512 KB are offloaded to the device. The minimum size restriction will be relaxed once polling support is added. The maximum size is limited by the use of pre-allocated per-CPU scratch buffers. On these generations, only compression is offloaded to hardware; decompression always falls back to software.
For GEN6, both compression and decompression are offloaded to the accelerator, which natively supports the ZSTD algorithm. There is no limit on the input buffer size supported. However, since GEN6 is limited to a history size of 64 KB, decompression of frames compressed with a larger history falls back to software.”
Great seeing this Zstandard compression support finally come to the Intel QAT driver and that with Gen 6 is going to be much more capable hardware-accelerated Zstd compression/decompression.
