Currently SIMD accelerated AES-GCM performance is limited by two factors: a. The need to disable preemption and interrupts and save the FPU state before using it and to do the reverse when done. Due to the way the code is organized (see (b) below) we have to pay this price twice for each 16 byte GCM block processed. b. Most processing is done in C, operating on single GCM blocks. The use of SIMD instructions is limited to the AES encryption of the counter block (AES-NI) and the Galois multiplication (PCLMULQDQ). This leads to the FPU not being fully utilized for crypto operations. To solve (a) we do crypto processing in larger chunks while owning the FPU. An `icp_gcm_avx_chunk_size` module parameter was introduced to make this chunk size tweakable. It defaults to 32 KiB. This step alone roughly doubles performance. (b) is tackled by porting and using the highly optimized openssl AES-GCM assembler routines, which do all the processing (CTR, AES, GMULT) in a single routine. Both steps together result in up to 32x reduction of the time spend in the en/decryption routines, leading up to approximately 12x throughput increase for large (128 KiB) blocks. Lastly, this commit changes the default encryption algorithm from AES-CCM to AES-GCM when setting the `encryption=on` property. Reviewed-By: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-By: Jason King <jason.king@joyent.com> Reviewed-By: Tom Caputi <tcaputi@datto.com> Reviewed-By: Richard Laager <rlaager@wiktel.com> Signed-off-by: Attila Fülöp <attila@fueloep.org> Closes #9749
32 lines
1.6 KiB
Plaintext
32 lines
1.6 KiB
Plaintext
Refer to the git commit log for authoritative copyright attribution.
|
|
|
|
The original ZFS source code was obtained from Open Solaris which was
|
|
released under the terms of the CDDL open source license. Additional
|
|
changes have been included from OpenZFS and the Illumos project which
|
|
are similarly licensed. These projects can be found on Github at:
|
|
|
|
* https://github.com/illumos/illumos-gate
|
|
* https://github.com/openzfs/openzfs
|
|
|
|
Unless otherwise noted, all files in this distribution are released
|
|
under the Common Development and Distribution License (CDDL).
|
|
|
|
Exceptions are noted within the associated source files headers and
|
|
by including a THIRDPARTYLICENSE file with the license terms. A few
|
|
notable exceptions and their respective licenses include:
|
|
|
|
* Skein Checksum Implementation: module/icp/algs/skein/THIRDPARTYLICENSE
|
|
* AES Implementation: module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.gladman
|
|
* AES Implementation: module/icp/asm-x86_64/aes/THIRDPARTYLICENSE.openssl
|
|
* PBKDF2 Implementation: lib/libzfs/THIRDPARTYLICENSE.openssl
|
|
* SPL Implementation: module/os/linux/spl/THIRDPARTYLICENSE.gplv2
|
|
* GCM Implementaion: module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.cryptogams
|
|
* GCM Implementaion: module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.openssl
|
|
* GHASH Implementaion: module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.cryptogams
|
|
* GHASH Implementaion: module/icp/asm-x86_64/modes/THIRDPARTYLICENSE.openssl
|
|
|
|
This product includes software developed by the OpenSSL Project for use
|
|
in the OpenSSL Toolkit (http://www.openssl.org/)
|
|
|
|
See the LICENSE and NOTICE for more information.
|