From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C3ECFA059F; Fri, 10 Apr 2020 16:40:26 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 937601D546; Fri, 10 Apr 2020 16:40:26 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 6F6AB1D539 for ; Fri, 10 Apr 2020 16:40:25 +0200 (CEST) IronPort-SDR: 5r886VFBVrWGoJUJDGjgXTzrkgeRwjnFCgQaGf7OSw84Bz9PZ7TbcSaIjWTsV8fpdrHGpHrKso Qg8Mg2YD0FEA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Apr 2020 07:40:24 -0700 IronPort-SDR: 0TKzWOm7dzfWq6CyOyfErxg4ceFhI9Xzw17TW45n/DRuRoSmT3uJff+2NnHU7zY84c+8x7fe39 f4BDFNiPlXyQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,367,1580803200"; d="scan'208";a="242938898" Received: from silpixa00399912.ir.intel.com (HELO silpixa00399912.ger.corp.intel.com) ([10.237.223.64]) by fmsmga007.fm.intel.com with ESMTP; 10 Apr 2020 07:40:22 -0700 From: David Coyle To: dev@dpdk.org Cc: declan.doherty@intel.com, fiona.trahe@intel.com, pablo.de.lara.guarch@intel.com, brendan.ryan@intel.com, shreyansh.jain@nxp.com, hemant.agrawal@nxp.com, akhil.goyal@nxp.com, ferruh.yigit@intel.com, David Coyle Date: Fri, 10 Apr 2020 15:27:53 +0100 Message-Id: <20200410142757.31508-1-david.coyle@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [PATCH v3 0/4] add AESNI-MB rawdev for multi-function processing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Introduction ============ This patchset adds a new AESNI-MB Multi-Function raw device PMD for utilizing multi-function capabilities of the Intel IPSec Multi Buffer library. The aim of this rawdev PMD is to provide a way of combining one or more common packet-processing functions into a single operation, focused on DOCSIS and GPON MAC workloads. This allows these functions to be performed in parallel by the Intel IPSec Multi Buffer library. These functions include cryptography and CRC/BIP calculations. Performing these functions in parallel as a single operation can enable a significant performance improvement. Background ========== There are a number of byte-wise operations which are used across many access network data-plane pipelines, such as Cipher, CRC and Bit-Interleaved-Parity (BIP). Some prototyping has been done at Intel as part of the 01.org access-network-dataplanes project to prove that a significant performance improvement is possible when such byte-wise operations are combined into a single pass of packet data processing. This performance boost has been prototyped for both DOCSIS MAC data-plane and GPON MAC data-plane pipelines based on DPDK. The original prototypes on 01.org used some protocol-specific modifications to the DPDK cryptodev library. In order to make this performance optimization consumable for network access equipment vendors, a better solution was required as CRC and BIP cannot be regarded as cryptographic algorithms. Hence, the introduction of an AESNI-MB Multi-Function rawdev PMD. This PMD uses a new multi-function interface which allows different types of operations be combined together. Initially, only symmetric crypto and error detection (i.e. CRC and BIP) operations can be combined. NOTE: In a future DPDK release, a QAT Multi-Function raw device will also be added. As multiple raw devices will share the same interface, the approach taken was to create a common interface (i.e. multi-function) which can be used by these devices. This both cuts down on code duplication across the devices and allows a DOCSIS or GPON MAC application to access multiple devices using the same interface. Use Cases ========= The primary use cases for the AESNI-MB Multi-Function interface have already been mentioned. These are: - DOCSIS MAC: Crypto-CRC - Order: - Downstream: CRC, Encrypt - Upstream: Decrypt, CRC - Specifications: - Crypto: 128-bit AES-CFB encryption variant for DOCSIS as described in section 11.1 of DOCSIS 3.1 Security Specification (https://apps.cablelabs.com/specification/CM-SP-SECv3.1) - CRC: Ethernet 32-bit CRC as defined in Ethernet/[ISO/IEC 8802-3] - GPON MAC: Crypto-CRC-BIP - Order: - Downstream: CRC, Encrypt, BIP - Upstream: BIP, Decrypt, CRC - Specifications: - Crypto: AES-128 [NIST FIPS-197] cipher, used in counter mode (AES-CTR), as described in [NIST SP800-38A]. - CRC: Ethernet 32-bit CRC as defined in Ethernet/[ISO/IEC 8802-3] - BIP: 4-byte bit-interleaved even parity (BIP) field computed over the entire FS frame, refer to ITU-T G.989.3, sections 8.1.1.5 and 8.1.2.3 (https://www.itu.int/rec/dologin_pub.asp?lang=e&id= T-REC-G.989.3-201510-I!!PDF-E) Note that support for both these chained operations is already available in the Intel IPSec Multi-Buffer library. Architecture ============ The following diagram shows where the AESNI-MB Multi-Function rawdev PMD fits in an overall application architecture. +------------------------------------------------+ | | | Application | | (e.g. vCMTS (DOCSIS), vOLT (GPON), etc.) | | | +------------------------------------------------+ | +-----------------------|------------------------+ | | DPDK | | | | | +---------------------+ | | | | | | | rte_rawdev | | | | | | NOTE: | +---------------------+ ____|______ 'MULTI-FUNCTION | / \ / | INTERFACE' | / \ / | is opaque to | / \ / | rte_rawdev | +--------------------------------+ | | | MULTI-FUNCTION INTERFACE | | | +--------------------------------+ | | +------------+ +------------+ | | | AESNI-MB | | QAT | | | | MULTI-FN | | MULTI-FN | | | | RAWDEV | | RAWDEV | | | | PMD | | PMD | | | +------------+ +------------+ | NOTE: | | | \________|______ 'QAT MULTI-FN | | | | RAWDEV PMD' +--------------|------------------|--------------+ will be added in | | later release +------------+ +------------+ | AESNI-MB | | QAT HW | | SW LIB | | | +------------+ +------------+ v2: * moved unit tests under from test app to under aesni_mb rawdev. * Added support to crypto-perf tool for multi-function processing. * fixed checkpatch errors. * general tidy-up and improvements. v3: * removed support from crypto-perf tool for multi-function processing. * renamed driver to rawdev_mfn_aesni_mb. * renamed files/directories/functions/etc. of new driver to have aesni_mb_mfn_ prefix. * resolved review comments. * updated documentation. David Coyle (4): raw/common: add multi-function interface raw/aesni_mb_mfn: add aesni_mb_mfn raw device PMD test/rawdev: add aesni_mb_mfn raw device tests doc: update docs for aesni_mb_mfn raw device PMD MAINTAINERS | 7 + app/test/test_rawdev.c | 18 + config/common_base | 11 + doc/api/doxy-api-index.md | 3 +- doc/api/doxy-api.conf.in | 1 + doc/guides/rawdevs/aesni_mb_mfn.rst | 219 +++ doc/guides/rawdevs/index.rst | 1 + doc/guides/rel_notes/release_20_05.rst | 6 + drivers/meson.build | 5 + drivers/raw/Makefile | 3 + drivers/raw/aesni_mb_mfn/Makefile | 50 + .../raw/aesni_mb_mfn/aesni_mb_mfn_rawdev.c | 1508 +++++++++++++++++ .../raw/aesni_mb_mfn/aesni_mb_mfn_rawdev.h | 118 ++ .../aesni_mb_mfn/aesni_mb_mfn_rawdev_test.c | 1123 ++++++++++++ .../aesni_mb_mfn_rawdev_test_vectors.h | 1184 +++++++++++++ drivers/raw/aesni_mb_mfn/meson.build | 26 + .../rte_rawdev_aesni_mb_mfn_version.map | 3 + drivers/raw/common/Makefile | 8 + drivers/raw/common/meson.build | 7 + drivers/raw/common/multi_fn/Makefile | 27 + drivers/raw/common/multi_fn/meson.build | 9 + .../multi_fn/rte_common_multi_fn_version.map | 12 + drivers/raw/common/multi_fn/rte_multi_fn.c | 148 ++ drivers/raw/common/multi_fn/rte_multi_fn.h | 438 +++++ .../raw/common/multi_fn/rte_multi_fn_driver.h | 97 ++ drivers/raw/meson.build | 3 +- meson.build | 4 + mk/rte.app.mk | 3 + 28 files changed, 5040 insertions(+), 2 deletions(-) create mode 100644 doc/guides/rawdevs/aesni_mb_mfn.rst create mode 100644 drivers/raw/aesni_mb_mfn/Makefile create mode 100644 drivers/raw/aesni_mb_mfn/aesni_mb_mfn_rawdev.c create mode 100644 drivers/raw/aesni_mb_mfn/aesni_mb_mfn_rawdev.h create mode 100644 drivers/raw/aesni_mb_mfn/aesni_mb_mfn_rawdev_test.c create mode 100644 drivers/raw/aesni_mb_mfn/aesni_mb_mfn_rawdev_test_vectors.h create mode 100644 drivers/raw/aesni_mb_mfn/meson.build create mode 100644 drivers/raw/aesni_mb_mfn/rte_rawdev_aesni_mb_mfn_version.map create mode 100644 drivers/raw/common/Makefile create mode 100644 drivers/raw/common/meson.build create mode 100644 drivers/raw/common/multi_fn/Makefile create mode 100644 drivers/raw/common/multi_fn/meson.build create mode 100644 drivers/raw/common/multi_fn/rte_common_multi_fn_version.map create mode 100644 drivers/raw/common/multi_fn/rte_multi_fn.c create mode 100644 drivers/raw/common/multi_fn/rte_multi_fn.h create mode 100644 drivers/raw/common/multi_fn/rte_multi_fn_driver.h -- 2.17.1