From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: [PATCH v3 0/8] Add crypto PMD optimized for ARMv8 Date: Wed, 4 Jan 2017 18:33:19 +0100 Message-ID: <1483551207-18236-1-git-send-email-zbigniew.bodek@caviumnetworks.com> References: <1481077985-4224-2-git-send-email-zbigniew.bodek@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain Cc: , , , Zbigniew Bodek To: Return-path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0065.outbound.protection.outlook.com [104.47.38.65]) by dpdk.org (Postfix) with ESMTP id 61ECE2C71 for ; Wed, 4 Jan 2017 18:33:45 +0100 (CET) In-Reply-To: <1481077985-4224-2-git-send-email-zbigniew.bodek@caviumnetworks.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Zbigniew Bodek Introduce crypto poll mode driver using ARMv8 cryptographic extensions. This PMD is optimized to provide performance boost for chained crypto operations processing, such as: * encryption + HMAC generation * decryption + HMAC validation. In particular, cipher only or hash only operations are not provided. Performance gain can be observed in tests against OpenSSL PMD which also uses ARM crypto extensions for packets processing. Exemplary crypto performance tests comparison: cipher_hash. cipher algo: AES_CBC auth algo: SHA1_HMAC cipher key size=16. burst_size: 64 ops ARMv8 PMD improvement over OpenSSL PMD (Optimized for ARMv8 cipher only and hash only cases): Buffer Size(B) OPS(M) Throughput(Gbps) 64 729 % 742 % 128 577 % 592 % 256 483 % 476 % 512 336 % 351 % 768 300 % 286 % 1024 263 % 250 % 1280 225 % 229 % 1536 214 % 213 % 1792 186 % 203 % 2048 200 % 193 % The driver currently supports AES-128-CBC in combination with: SHA256 HMAC and SHA1 HMAC. The core crypto functionality of this driver is provided by the external armv8_crypto library that can be downloaded from the Cavium repository: https://github.com/caviumnetworks/armv8_crypto CPU compatibility with this virtual device is detected in run-time and virtual crypto device will not be created if CPU doesn't provide AES, SHA1, SHA2 and NEON. The functionality and performance of this code can be tested using generic test application with the following commands: * cryptodev_sw_armv8_autotest * cryptodev_sw_armv8_perftest New test vectors and cases have been added to the general pool. In particular SHA1 and SHA256 HMAC for short cases were introduced. This is because low-level ARM assembly code is using different code paths for long and short data sets, so in order to test the mentioned driver correctly, two different data sets need to be provided. --- v3: * Addressed review remarks * Moved low-level assembly code to the external library * Removed SHA256 MAC cases * Various fixes: interface to the library, digest destination and source address interpreting, missing mbuf manipulations. v2: * Fixed checkpatch warnings * Divide patches into smaller logical parts Zbigniew Bodek (8): mk: fix build of assembly files for ARM64 lib: add cryptodev type for the upcoming ARMv8 PMD crypto/armv8: add PMD optimized for ARMv8 processors mk/crypto/armv8: add PMD to the build system doc/armv8: update documentation about crypto PMD crypto/armv8: enable ARMv8 PMD in the configuration crypto/armv8: update MAINTAINERS entry for ARMv8 crypto app/test: add ARMv8 crypto tests and test vectors MAINTAINERS | 6 + app/test/test_cryptodev.c | 63 ++ app/test/test_cryptodev_aes_test_vectors.h | 144 +++- app/test/test_cryptodev_blockcipher.c | 4 + app/test/test_cryptodev_blockcipher.h | 1 + app/test/test_cryptodev_perf.c | 480 +++++++++++++ config/common_base | 6 + doc/guides/cryptodevs/armv8.rst | 96 +++ doc/guides/cryptodevs/index.rst | 1 + doc/guides/rel_notes/release_17_02.rst | 5 + drivers/crypto/Makefile | 1 + drivers/crypto/armv8/Makefile | 73 ++ drivers/crypto/armv8/rte_armv8_pmd.c | 926 +++++++++++++++++++++++++ drivers/crypto/armv8/rte_armv8_pmd_ops.c | 369 ++++++++++ drivers/crypto/armv8/rte_armv8_pmd_private.h | 211 ++++++ drivers/crypto/armv8/rte_armv8_pmd_version.map | 3 + lib/librte_cryptodev/rte_cryptodev.h | 3 + mk/arch/arm64/rte.vars.mk | 1 - mk/rte.app.mk | 2 + mk/toolchain/gcc/rte.vars.mk | 6 +- 20 files changed, 2390 insertions(+), 11 deletions(-) create mode 100644 doc/guides/cryptodevs/armv8.rst create mode 100644 drivers/crypto/armv8/Makefile create mode 100644 drivers/crypto/armv8/rte_armv8_pmd.c create mode 100644 drivers/crypto/armv8/rte_armv8_pmd_ops.c create mode 100644 drivers/crypto/armv8/rte_armv8_pmd_private.h create mode 100644 drivers/crypto/armv8/rte_armv8_pmd_version.map -- 1.9.1