From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hemant Agrawal Subject: Re: [PATCH v3 0/8] Add crypto PMD optimized for ARMv8 Date: Fri, 13 Jan 2017 13:37:49 +0530 Message-ID: References: <1481077985-4224-2-git-send-email-zbigniew.bodek@caviumnetworks.com> <1483551207-18236-1-git-send-email-zbigniew.bodek@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Cc: , , To: , Return-path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0050.outbound.protection.outlook.com [104.47.33.50]) by dpdk.org (Postfix) with ESMTP id 9B2732BF3 for ; Fri, 13 Jan 2017 09:07:59 +0100 (CET) In-Reply-To: <1483551207-18236-1-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" On 1/4/2017 11:03 PM, zbigniew.bodek@caviumnetworks.com wrote: > 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. Do you have a plan to add the crypto only, auth/hash only support into this driver? Also, do you plan to add additional cases w.r.t supported by other crypto driver? > 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 >