Show a cover letter.

GET /api/covers/67796/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 67796,
    "url": "https://patches.dpdk.org/api/covers/67796/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/cover/20200403163656.60545-1-david.coyle@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200403163656.60545-1-david.coyle@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200403163656.60545-1-david.coyle@intel.com",
    "date": "2020-04-03T16:36:52",
    "name": "[v2,0/4] introduce multi-function processing support",
    "submitter": {
        "id": 961,
        "url": "https://patches.dpdk.org/api/people/961/?format=api",
        "name": "Coyle, David",
        "email": "david.coyle@intel.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/cover/20200403163656.60545-1-david.coyle@intel.com/mbox/",
    "series": [
        {
            "id": 9194,
            "url": "https://patches.dpdk.org/api/series/9194/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=9194",
            "date": "2020-04-03T16:36:52",
            "name": "introduce multi-function processing support",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/9194/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/covers/67796/comments/",
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 6F8FAA0562;\n\tFri,  3 Apr 2020 18:48:35 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E292F1C1C1;\n\tFri,  3 Apr 2020 18:48:34 +0200 (CEST)",
            "from mga17.intel.com (mga17.intel.com [192.55.52.151])\n by dpdk.org (Postfix) with ESMTP id 5FE5D1C0BD\n for <dev@dpdk.org>; Fri,  3 Apr 2020 18:48:33 +0200 (CEST)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 03 Apr 2020 09:48:32 -0700",
            "from silpixa00399912.ir.intel.com (HELO\n silpixa00399912.ger.corp.intel.com) ([10.237.223.64])\n by fmsmga004.fm.intel.com with ESMTP; 03 Apr 2020 09:48:30 -0700"
        ],
        "IronPort-SDR": [
            "\n oFnSJuw1LCks4nURvsbdm6/BpAY8CqXIxF2MCCwJMLeNcGp2FctKHRI9CTaaB3ONxKcUoZT1OU\n X2T1TPM/rOrA==",
            "\n l9HXRkhPJjqzO4p9dHJmKkE1Mn9p8B8gZK1UxO5v7ek3LnF0GwgDgHdnUnGGcCHW1GCNilAm5C\n 2zFwgFgicosg=="
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.72,340,1580803200\"; d=\"scan'208\";a=\"274016862\"",
        "From": "David Coyle <david.coyle@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "declan.doherty@intel.com, fiona.trahe@intel.com,\n pablo.de.lara.guarch@intel.com, brendan.ryan@intel.com,\n shreyansh.jain@nxp.com, hemant.agrawal@nxp.com,\n David Coyle <david.coyle@intel.com>",
        "Date": "Fri,  3 Apr 2020 17:36:52 +0100",
        "Message-Id": "<20200403163656.60545-1-david.coyle@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "Subject": "[dpdk-dev] [PATCH v2 0/4] introduce multi-function processing\n\tsupport",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "PLEASE NOTE: This patchset supercedes the following v1 patches which were\nmistakenly added as stand-alone patches (apologies for any confusion this\nmay cause)\n\nhttps://patchwork.dpdk.org/patch/66733/\nhttps://patchwork.dpdk.org/patch/66735/\nhttps://patchwork.dpdk.org/patch/66736/\n\nPLEASE NOTE ALSO: Support for QAT, which the following patch addressed,\nhas been dropped from this patchset and is now targetted at the next\nrelease (v20.08)\n\nhttps://patchwork.dpdk.org/patch/66819/\n\n\nIntroduction\n============\n\nThis patchset adds a new multi-function interface and a aesni_mb raw device\nPMD which uses this interface.\n\nThis patchset has already been discussed as part of the following RFC:\n\nhttp://mails.dpdk.org/archives/dev/2020-February/157045.html\nhttp://mails.dpdk.org/archives/dev/2020-March/159189.html\n\nThe main aim of this interface and raw PMDs is to provide a flexible and\nextensible way of combining one or more packet-processing functions into a\nsingle operation, thereby allowing these to be performed in parallel in\noptimized software libraries or in a hardware accelerator. These functions\ncan include cryptography, compression and CRC/checksum calculation, while\nothers can potentially be added in the future. Performing these functions\nin parallel as a single operation can enable a significant performance\nimprovement.\n\n\nBackground\n==========\n\nThere are a number of byte-wise operations which are present and common\nacross many access network data-plane pipelines, such as Cipher,\nAuthentication, CRC, Bit-Interleaved-Parity (BIP), other checksums etc.\nSome prototyping has been done at Intel in relation to the 01.org\naccess-network-dataplanes project to prove that a significant performance\nimprovement is possible when such byte-wise operations are combined into a\nsingle pass of packet data processing. This performance boost has been\nprototyped for both XGS-PON MAC data-plane and DOCSIS MAC data-plane\npipelines.\n\nThe prototypes used some protocol-specific modifications to the DPDK\ncryptodev library. In order to make this performance improvement consumable\nby network access equipment vendors, a more extensible and correct solution\nwas required.\n\nHence, the introduction of a multi-function interface, initially for use by\nraw devices. In this patchset, a new aesni_mb raw device has been created\nwhich uses this interface.\n\nNOTE: In a future DPDK release (currently targetting DPDK v20.08), a qat\nraw device will also be added. As multiple raw devices will share the same\ninterface, the approach taken was to create a common interface\n(i.e. multi-function) which can be used by these devices. This both cuts\ndown on code duplication across the devices and allows an application\naccess multiple devices using the same interface.\n\n\nUse Cases\n=========\n\nThe primary use cases for the multi-function interface and raw PMDs have\nalready been mentioned. These are:\n\n- DOCSIS MAC: Crypto-CRC\n\t- Order:\n\t\t- Downstream: CRC, Encrypt\n\t\t- Upstream: Decrypt, CRC\n\t- Specifications:\n\t\t- Crypto: 128-bit AES-CFB encryption variant for DOCSIS as\n\t\t  described in section 11.1 of DOCSIS 3.1 Security\n\t\t  Specification\n\t\t  (https://apps.cablelabs.com/specification/CM-SP-SECv3.1)\n\t\t- CRC: Ethernet 32-bit CRC as defined in\n\t\t  Ethernet/[ISO/IEC 8802-3]\n\n- XGS-PON MAC: Crypto-CRC-BIP\n\t- Order:\n\t\t- Downstream: CRC, Encrypt, BIP\n\t\t- Upstream: BIP, Decrypt, CRC\n\t- Specifications:\n\t\t- Crypto: AES-128 [NIST FIPS-197] cipher, used in counter\n\t\t  mode (AES-CTR), as described in [NIST SP800-38A].\n\t\t- CRC: Ethernet 32-bit CRC as defined in\n\t\t  Ethernet/[ISO/IEC 8802-3]\n\t\t- BIP: 4-byte bit-interleaved even parity (BIP) field\n\t\t  computed over the entire FS frame, refer to\n\t\t  ITU-T G.989.3, sections 8.1.1.5 and 8.1.2.3\n\t\t  (https://www.itu.int/rec/dologin_pub.asp?lang=e&id=\n\t\t   T-REC-G.989.3-201510-I!!PDF-E)\n\nNote that support for both these chained operations is already available in\nthe Intel IPSec Multi-Buffer library.\n\nHowever, it is not limited to these. The following are some of the other\npossible use-cases, which multi-function will allow for:\n\n- Storage:\n\t- Compression followed by Encryption\n- IPSec over UDP:\n\t- UDP Checksum calculation followed by Encryption\n\nWhile DPDK's rte_cryptodev and rte_compressdev allow many cryptographic and\ncompression algorithms to be chained together in one operation, there is no\nway to chain these with any error detection or checksum algorithms. And\nthere is no way to chain crypto and compression algorithms together. The\nmulti-function  interface will allow these chains to be created, and also\nallow any future type of operation to be easily added.\n\n\nArchitecture\n============\n\nThe following diagram shows where the multi-function interface and raw\ndevices fit in an overall application architecture.\n\n  +------------------------------------------------+\n  |                                                |\n  |                  Application                   |\n  |   (e.g. vCMTS (DOCSIS), vOLT (XGS-PON), etc.)  |\n  |                                                |\n  +------------------------------------------------+\n                          |\n  +-----------------------|------------------------+\n  |                       |                  DPDK  |\n  |                       |                        |\n  |             +---------------------+            |\n  |             |                     |            |\n  |             |     rte_rawdev      |            |\n  |             |                     |            |            NOTE:\n  |             +---------------------+        ____|______ 'MULTI-FUNCTION\n  |                    /      \\              /     |          INTERFACE'\n  |                   /        \\            /      |         is opaque to\n  |                  /          \\          /       |          rte_rawdev\n  |       +--------------------------------+       |\n  |       |    MULTI-FUNCTION INTERFACE    |       |\n  |       +--------------------------------+       |\n  |       +------------+      +------------+       |\n  |       |   RAWDEV   |      |   RAWDEV   |       |\n  |       |  AESNI-MB  |      |    QAT     |       |\n  |       |    PMD     |      |    PMD     |       |\n  |       +------------+      +------------+       |              NOTE:\n  |              |                  |     \\________|_____  'RAWDEV QAT PMD'\n  +--------------|------------------|--------------+       will be added in\n                 |                  |                         next release\n          +------------+      +------------+\n          |  AESNI-MB  |      |   QAT HW   |\n          |   SW LIB   |      |            |\n          +------------+      +------------+\n\nDavid Coyle (4):\n  raw/common: add multi-function interface\n  raw/aesni_mb: add aesni_mb raw device\n  test/rawdev: add aesni_mb raw device tests\n  app/crypto-perf: add support for multi-function processing\n\n app/test-crypto-perf/Makefile                 |    5 +\n app/test-crypto-perf/cperf_ops.c              |  265 +++\n app/test-crypto-perf/cperf_options.h          |   37 +-\n app/test-crypto-perf/cperf_options_parsing.c  |  396 ++++-\n app/test-crypto-perf/cperf_test_common.c      |   88 +-\n app/test-crypto-perf/cperf_test_latency.c     |  176 +-\n .../cperf_test_pmd_cyclecount.c               |   96 +-\n app/test-crypto-perf/cperf_test_throughput.c  |  164 +-\n .../cperf_test_vector_parsing.c               |   35 +-\n app/test-crypto-perf/cperf_test_vectors.c     |   53 +\n app/test-crypto-perf/cperf_test_vectors.h     |    9 +\n app/test-crypto-perf/cperf_test_verify.c      |  205 ++-\n app/test-crypto-perf/main.c                   |  255 ++-\n app/test-crypto-perf/meson.build              |    6 +\n app/test/test_rawdev.c                        |   16 +\n config/common_base                            |   11 +\n drivers/meson.build                           |    5 +\n drivers/raw/Makefile                          |    3 +\n drivers/raw/aesni_mb/Makefile                 |   47 +\n drivers/raw/aesni_mb/aesni_mb_rawdev.c        | 1536 +++++++++++++++++\n drivers/raw/aesni_mb/aesni_mb_rawdev.h        |  112 ++\n drivers/raw/aesni_mb/aesni_mb_rawdev_test.c   | 1102 ++++++++++++\n .../aesni_mb/aesni_mb_rawdev_test_vectors.h   | 1183 +++++++++++++\n drivers/raw/aesni_mb/meson.build              |   26 +\n .../aesni_mb/rte_rawdev_aesni_mb_version.map  |    3 +\n drivers/raw/common/Makefile                   |    8 +\n drivers/raw/common/meson.build                |    7 +\n drivers/raw/common/multi_fn/Makefile          |   27 +\n drivers/raw/common/multi_fn/meson.build       |    9 +\n .../multi_fn/rte_common_multi_fn_version.map  |   11 +\n drivers/raw/common/multi_fn/rte_multi_fn.c    |  166 ++\n drivers/raw/common/multi_fn/rte_multi_fn.h    |  350 ++++\n .../raw/common/multi_fn/rte_multi_fn_driver.h |   55 +\n drivers/raw/meson.build                       |    3 +-\n meson.build                                   |    4 +\n mk/rte.app.mk                                 |    3 +\n 36 files changed, 6270 insertions(+), 207 deletions(-)\n create mode 100644 drivers/raw/aesni_mb/Makefile\n create mode 100644 drivers/raw/aesni_mb/aesni_mb_rawdev.c\n create mode 100644 drivers/raw/aesni_mb/aesni_mb_rawdev.h\n create mode 100644 drivers/raw/aesni_mb/aesni_mb_rawdev_test.c\n create mode 100644 drivers/raw/aesni_mb/aesni_mb_rawdev_test_vectors.h\n create mode 100644 drivers/raw/aesni_mb/meson.build\n create mode 100644 drivers/raw/aesni_mb/rte_rawdev_aesni_mb_version.map\n create mode 100644 drivers/raw/common/Makefile\n create mode 100644 drivers/raw/common/meson.build\n create mode 100644 drivers/raw/common/multi_fn/Makefile\n create mode 100644 drivers/raw/common/multi_fn/meson.build\n create mode 100644 drivers/raw/common/multi_fn/rte_common_multi_fn_version.map\n create mode 100644 drivers/raw/common/multi_fn/rte_multi_fn.c\n create mode 100644 drivers/raw/common/multi_fn/rte_multi_fn.h\n create mode 100644 drivers/raw/common/multi_fn/rte_multi_fn_driver.h"
}