Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/83920/?format=api
http://patches.dpdk.org/api/patches/83920/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20201110195621.67576-1-cristian.dumitrescu@intel.com/", "project": { "id": 1, "url": "http://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": "<20201110195621.67576-1-cristian.dumitrescu@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20201110195621.67576-1-cristian.dumitrescu@intel.com", "date": "2020-11-10T19:56:21", "name": "doc: add the SWX pipeline type to the prog_guide", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "016330413d54a3c01fb277d255d1f4ed99a22464", "submitter": { "id": 19, "url": "http://patches.dpdk.org/api/people/19/?format=api", "name": "Cristian Dumitrescu", "email": "cristian.dumitrescu@intel.com" }, "delegate": { "id": 24651, "url": "http://patches.dpdk.org/api/users/24651/?format=api", "username": "dmarchand", "first_name": "David", "last_name": "Marchand", "email": "david.marchand@redhat.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20201110195621.67576-1-cristian.dumitrescu@intel.com/mbox/", "series": [ { "id": 13786, "url": "http://patches.dpdk.org/api/series/13786/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13786", "date": "2020-11-10T19:56:21", "name": "doc: add the SWX pipeline type to the prog_guide", "version": 1, "mbox": "http://patches.dpdk.org/series/13786/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/83920/comments/", "check": "warning", "checks": "http://patches.dpdk.org/api/patches/83920/checks/", "tags": {}, "related": [], "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 BB282A052A;\n\tTue, 10 Nov 2020 20:56:29 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 97CBE2B93;\n\tTue, 10 Nov 2020 20:56:27 +0100 (CET)", "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by dpdk.org (Postfix) with ESMTP id 40D6CDED\n for <dev@dpdk.org>; Tue, 10 Nov 2020 20:56:26 +0100 (CET)", "from fmsmga001.fm.intel.com ([10.253.24.23])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 10 Nov 2020 11:56:22 -0800", "from silpixa00400573.ir.intel.com (HELO\n silpixa00400573.ger.corp.intel.com) ([10.237.223.107])\n by fmsmga001.fm.intel.com with ESMTP; 10 Nov 2020 11:56:21 -0800" ], "IronPort-SDR": [ "\n epmCRB8C/8AGz6EmTK6TbbuFs0TNA+ILOpk/VniqYsxpw6n2tHwuP39nboQIxHn4vtI6sHzapZ\n oF+8nHiVXmOA==", "\n rQ27VuMQpa3mo9JyvTxvk2mV6A14NFOb2NvtpgqLMqFDibyxNiovrAH2TJXLZ9w2PRwwH7B4Hq\n uSTp8eyyGA4w==" ], "X-IronPort-AV": [ "E=McAfee;i=\"6000,8403,9801\"; a=\"169256728\"", "E=Sophos;i=\"5.77,467,1596524400\"; d=\"scan'208\";a=\"169256728\"", "E=Sophos;i=\"5.77,467,1596524400\"; d=\"scan'208\";a=\"428505653\"" ], "X-Amp-Result": "SKIPPED(no attachment in message)", "X-Amp-File-Uploaded": "False", "X-ExtLoop1": "1", "From": "Cristian Dumitrescu <cristian.dumitrescu@intel.com>", "To": "dev@dpdk.org", "Cc": "david.marchand@redhat.com", "Date": "Tue, 10 Nov 2020 19:56:21 +0000", "Message-Id": "<20201110195621.67576-1-cristian.dumitrescu@intel.com>", "X-Mailer": "git-send-email 2.17.1", "Subject": "[dpdk-dev] [PATCH] doc: add the SWX pipeline type to the prog_guide", "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": "Add the new SWX pipeline type to the Programmer's Guide.\n\nSigned-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>\n---\n doc/guides/prog_guide/packet_framework.rst | 77 ++++++++++++++++++++++\n 1 file changed, 77 insertions(+)", "diff": "diff --git a/doc/guides/prog_guide/packet_framework.rst b/doc/guides/prog_guide/packet_framework.rst\nindex 48d257501..5bd071713 100644\n--- a/doc/guides/prog_guide/packet_framework.rst\n+++ b/doc/guides/prog_guide/packet_framework.rst\n@@ -1148,3 +1148,80 @@ Usually, to support a specific functional block, specific implementation of Pack\n with all the implementations sharing the same API: pure SW implementation (no acceleration), implementation using accelerator A, implementation using accelerator B, etc.\n The selection between these implementations could be done at build time or at run-time (recommended), based on which accelerators are present in the system,\n with no application changes required.\n+\n+The Software Switch (SWX) Pipeline\n+----------------------------------\n+\n+The Software Switch (SWX) pipeline is designed to combine the DPDK performance with the flexibility of the P4-16 language [1]. It can be used either by itself\n+to code a complete software switch or data plane application, or in combination with the open-source P4 compiler P4C [2], acting as a P4C back-end that allows\n+the P4 programs to be translated to the DPDK SWX API and run on multi-core CPUs.\n+\n+The main features of the SWX pipeline are:\n+\n+* Nothing is hard-wired, everything is dynamically defined: The packet headers (i.e. the network protocols), the packet meta-data, the actions, the tables\n+ and the pipeline itself are dynamically defined instead of selected from a predefined set.\n+\n+* Instructions: The actions and the life of the packet through the pipeline are defined with instructions that manipulate the pipeline objects mentioned\n+ above. The pipeline is the main function of the packet program, with actions as subroutines triggered by the tables.\n+\n+* Call external plugins: Extern objects and functions can be defined to call functionality that cannot be efficiently implemented with the existing\n+ pipeline-oriented instruction set, such as: error detecting/correcting codes, cryptographic operations, meters, statistics counter arrays, heuristics, etc.\n+\n+* Better control plane interaction: Transaction-oriented table update mechanism that supports multi-table atomic updates. Multiple tables can be updated in a\n+ single step with only the before-update and the after-update table entries visible to the packets. Alignment with the P4Runtime [3] protocol.\n+\n+* Performance: Multiple packets are in-flight within the pipeline at any moment. Each packet is owned by a different time-sharing thread in\n+ run-to-completion, with the thread pausing before memory access operations such as packet I/O and table lookup to allow the memory prefetch to complete.\n+ The instructions are verified and translated at initialization time with no run-time impact. The instructions are also optimized to detect and \"fuse\"\n+ frequently used patterns into vector-like instructions transparently to the user.\n+\n+The main SWX pipeline components are:\n+\n+* Input and output ports: Each port instantiates a port type that defines the port operations, e.g. Ethernet device port, PCAP port, etc. The RX interface\n+ of the input ports and the TX interface of the output ports are single packet based, with packet batching typically implemented internally by each port for\n+ performance reasons.\n+\n+* Structure types: Each structure type is used to define the logical layout of a memory block, such as: packet headers, packet meta-data, action data stored\n+ in a table entry, mailboxes of extern objects and functions. Similar to C language structs, each structure type is a well defined sequence of fields, with\n+ each field having a unique name and a constant size.\n+\n+* Packet headers: Each packet typically has one or multiple headers. The headers are extracted from the input packet as part of the packet parsing operation,\n+ which is likely executed immediatelly after the packet reception. As result of the extract operation, each header is logically removed from the packet, so\n+ once the packet parsing operation is completed, the input packet is reduced to opaque payload. Just before transmission, one or several headers are pushed\n+ in front of each output packet through the emit operation; these headers can be part of the set of headers that were previously extracted from the input\n+ packet (and potentially modified afterwards) or some new headers whose contents is generated by the pipeline (e.g. by reading them from tables). The format\n+ of each packet header is defined by instantiating a structure type.\n+\n+* Packet meta-data: The packet meta-data is filled in by the pipeline (e.g. by reading it from tables) or computed by the pipeline. It is not sent out unless\n+ some of the meta-data fields are explicitly written into the headers emitted into the output packet. The format of the packet meta-data is defined by\n+ instantiating a structure type.\n+\n+* Extern objects and functions: Used to plug into the pipeline any functionality that cannot be efficiently implemented with the existing pipeline instruction\n+ set. Each extern object and extern function has its own mailbox, which is used to pass the input arguments to and retrieve the output arguments from the\n+ extern object member functions or the extern function. The mailbox format is defined by instantiating a structure type.\n+\n+* Instructions: The pipeline and its actions are defined with instructions from a predefined instruction set. The instructions are used to receive and\n+ transmit the current packet, extract and emit headers from/into the packet, read/write the packet headers, packet meta-data and mailboxes, start table\n+ lookup operations, read the action arguments from the table entry, call extern object member functions or extern functions. See the rte_swx_pipeline.h file\n+ for the complete list of instructions.\n+\n+* Actions: The pipeline actions are dynamically defined through instructions as opposed to predefined. Essentially, the actions are subroutines of the\n+ pipeline program and their execution is triggered by the table lookup. The input arguments of each action are read from the table entry (in case of table\n+ lookup hit) or the default table action (in case of table lookup miss) and are read-only; their format is defined by instantiating a structure type. The\n+ actions have read-write access to the the packet headers and meta-data.\n+\n+* Table: Each pipeline typically has one or more lookup tables. The match fields of each table are flexibly selected from the packet headers and meta-data\n+ defined for the current pipeline. The set of table actions is flexibly selected for each table from the set of actions defined for the current pipeline. The\n+ tables can be looked at as special pipeline operators that result in one of the table actions being called, depending on the result of the table lookup\n+ operation.\n+\n+* Pipeline: The pipeline represents the main program that defines the life of the packet, with subroutines (actions) executed on table lookup. As packets\n+ go through the pipeline, the packet headers and meta-data are transformed along the way.\n+\n+References:\n+\n+[1] P4-16 specification: https://p4.org/specs/\n+\n+[2] P4-16 compiler: https://github.com/p4lang/p4c\n+\n+[3] P4Runtime specification: https://p4.org/specs/\n", "prefixes": [] }{ "id": 83920, "url": "