Show a cover letter.

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

{
    "id": 128694,
    "url": "http://patchwork.dpdk.org/api/covers/128694/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/cover/20230614155902.1530963-1-zhirun.yan@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20230614155902.1530963-1-zhirun.yan@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230614155902.1530963-1-zhirun.yan@intel.com",
    "date": "2023-06-14T15:58:46",
    "name": "[v15,00/16] graph enhancement for multi-core dispatch",
    "submitter": {
        "id": 1154,
        "url": "http://patchwork.dpdk.org/api/people/1154/?format=api",
        "name": "Yan, Zhirun",
        "email": "zhirun.yan@intel.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/cover/20230614155902.1530963-1-zhirun.yan@intel.com/mbox/",
    "series": [
        {
            "id": 28514,
            "url": "http://patchwork.dpdk.org/api/series/28514/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=28514",
            "date": "2023-06-14T15:58:46",
            "name": "graph enhancement for multi-core dispatch",
            "version": 15,
            "mbox": "http://patchwork.dpdk.org/series/28514/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/covers/128694/comments/",
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 1461E42CB8;\n\tWed, 14 Jun 2023 18:13:32 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DC02440FAE;\n\tWed, 14 Jun 2023 18:13:31 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by mails.dpdk.org (Postfix) with ESMTP id 6E3CE40E0F\n for <dev@dpdk.org>; Wed, 14 Jun 2023 18:13:29 +0200 (CEST)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 14 Jun 2023 09:08:09 -0700",
            "from dpdk-zhirun-lmm.sh.intel.com ([10.67.119.94])\n by orsmga003.jf.intel.com with ESMTP; 14 Jun 2023 09:08:05 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1686759209; x=1718295209;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=rc+H437MKomLEeE8LI9tRL8zT+oVM4UoUzaTEryoicE=;\n b=b+S05TPoNn1tf/0t+RKvg7PpjblXvRl72Pj1h59Gr55YxKN9ED1apo7+\n /A7v4zbL5B5iGO7TxzzgEWCMKS0N2ky09sn0O3avQKFfMPj04Wgg8hCuX\n /7Kbwe1P67FUAtlpSNFpcIrSPrOcuf+tWPnbxPuJWx59NoH1w/AQyfdX8\n uVDrAjxYpgkrZUVy1YwyuAz2vJnuN3TPybAu3u70cUdMP7vm4LQePlFyt\n qDXLi3f3WQJ0pWooOJ9w+piFdBaQoGCkYdrTPRyIgcSbBweM0WNbzF3Gx\n ii8HqVuMarC94Oy0U6ByUtgas7CusorCu80gBliv/9tXDaP+rrExgN0JE w==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6600,9927,10741\"; a=\"358657737\"",
            "E=Sophos;i=\"6.00,243,1681196400\"; d=\"scan'208\";a=\"358657737\"",
            "E=McAfee;i=\"6600,9927,10741\"; a=\"662449113\"",
            "E=Sophos;i=\"6.00,243,1681196400\"; d=\"scan'208\";a=\"662449113\""
        ],
        "X-ExtLoop1": "1",
        "From": "Zhirun Yan <zhirun.yan@intel.com>",
        "To": "dev@dpdk.org, jerinj@marvell.com, kirankumark@marvell.com,\n ndabilpuram@marvell.com, stephen@networkplumber.org,\n pbhagavatula@marvell.com, jerinjacobk@gmail.com, david.marchand@redhat.com",
        "Cc": "cunming.liang@intel.com, haiyue.wang@intel.com,\n mattias.ronnblom@ericsson.com, Zhirun Yan <zhirun.yan@intel.com>",
        "Subject": "[PATCH v15 00/16] graph enhancement for multi-core dispatch",
        "Date": "Wed, 14 Jun 2023 23:58:46 +0800",
        "Message-Id": "<20230614155902.1530963-1-zhirun.yan@intel.com>",
        "X-Mailer": "git-send-email 2.37.2",
        "In-Reply-To": "<20230613140445.2155542-1-zhirun.yan@intel.com>",
        "References": "<20230613140445.2155542-1-zhirun.yan@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "V15:\nFix build issues. (add unused macro in patch 10 then remove in patch 11,\nfix log message format in patch 01, rm wrong assert in dispatch_walk in patch 12)\n\nV14:\nRebase to main and fix build issues.(align header name in patch 01,02)\n\nV13:\nAdd sub header into meson indirect_headers list to export.(change meson.build in patch02, 05)\n\nV12:\nFix compilation broken at patch 1.(keep renamed header align with patch 1,2)\n\nV11:\nUpdate comments and fix to add experimental flags for rte_graph_model_is_valid() in patch 04.\nUpdate added symbols in alphabetical order in version.map with patch 04,05,06,08,10.\nUpdate commit message in patch 16.\n\nV10:\nAdd rte_graph_worker_model_no_check_get() for fast path, extract rte_graph_model_is_valid()\nin patch 04.\nChange RTE_ASSERT to return in patch 06.\nChange to treat not defined RTE_GRAPH_MODEL_SELECT as runtime pick in patch 13.\nMove stats into dispatch union in patch 14.\nChange example to align with RTE_GRAPH_MODEL_SELECT scheme in patch 16.\nSquash patch 17(doc) into patch 13(prog_guide), 16(example guide).\n\n\nV9:\nFix CI build issues for doc building(move TAILQ next pointer out of union) in patch 09,10.\nFix graph model check in rte_graph_worker_model_set() in patch 04.\nFix typo in doc.\n\nV8:\nNo performance dorp for original l3fwd-graph and graph_perf_autotest.\n\nUpdate graph model set/get functions and add graph_model_is_valid() in patch 04.\nUpdate doc for new scheme usage(choose model in runtime or compile time).\nUpdate dispatch schedule struct into union.\nChange enum rte_graph_worker_model to macro define in rte_graph_worker_common.h.\nAdd model clone in graph_clone() in patch 08.\nRemove unnecessary inline for slow path func graph_src_node_avail() in patch 06.\n\n\nV7:\nRevert rte_rdtsc_precise() in fastpath to fix performance issues in patch 03.\nIntroduce new scheme for model choosing. Use RTE_GRAPH_MODEL_SELECT to choose in\n  compile-time in patch 13, 15.(must have rte_graph_worker_model_set() to help\n  other config func to do model specific things like alloc wq, collect stats)\nExtract the common func clone_name() into graph_private.h for graph/node clone in\n  patch 07.(new patch)\nUse rte_graph->model in rte_graph_worker_model_set() instead of RTE_PER_LCORE_*.\nAdd test case for all new APIs in patch 16(new patch).\nRemove *_END line in enum rte_graph_worker_model in patch 04.\nAdd model check for graph lcore binding.\nRename workqueue as graph_mcore_dispatch_wq_node in patch 09.\nChange all new model files/APIs with prefix _mcore_dispatch_.\nChange description of new API, comments of func/structure to explicitly mention for\n  mcore dispatch model only. Add Doxygen comments.\nUpdate l3fwd-graph with new scheme, Update doc.\nUpdate MAINTAINERS.\nFix typo and format issues.\n\nV6:\nChange rte_rdtsc() to rte_rdtsc_precise().\nAdd union in rte_graph_param to configure models.\nRemove memset in fastpath, add RTE_ASSERT for cloned graph.\nUpdate copyright in patch 02.\nUpdate l3fwd-graph node affinity, start from rx core successively.\n\nV5:\nFix CI build issues about dynamically update doc.\n\nV4:\nFix CI build issues about undefined reference of sched apis.\nRemove inline for model setting.\n\nV3:\nFix CI build issues about TLS and typo.\n\nV2:\nUse git mv to keep git history.\nUse TLS for per-thread local storage.\nChange model name to mcore dispatch.\nChange API with specific mode name.\nSplit big patch.\nFix CI issues.\nRebase l3fwd-graph example.\nUpdate doc and maintainers files.\n\n\nCurrently, rte_graph supports RTC (Run-To-Completion) model within each\nof a single core.\nRTC is one of the typical model of packet processing. Others like\nPipeline or Hybrid are lack of support.\n\nThe patch set introduces a 'multicore dispatch' model selection which\nis a self-reacting scheme according to the core affinity.\nThe new model enables a cross-core dispatching mechanism which employs a\nscheduling work-queue to dispatch streams to other worker cores which\nbeing associated with the destination node. When core flavor of the\ndestination node is a default 'current', the stream can be continue\nexecuted as normal.\n\nExample:\n3-node graph targets 3-core budget\n\nRTC:\nGraph: node-0 -> node-1 -> node-2 @Core0.\n\n+ - - - - - - - - - - - - - - - - - - - - - +\n'                Core #0/1/2                '\n'                                           '\n' +--------+     +---------+     +--------+ '\n' | Node-0 | --> | Node-1  | --> | Node-2 | '\n' +--------+     +---------+     +--------+ '\n'                                           '\n+ - - - - - - - - - - - - - - - - - - - - - +\n\nDispatch:\n\nGraph topo: node-0 -> Core1; node-1 -> node-2; node-2 -> node-3.\nConfig graph: node-0 @Core0; node-1/3 @Core1; node-2 @Core2.\n\n.. code-block:: diff\n\n    + - - - - - -+     +- - - - - - - - - - - - - +     + - - - - - -+\n    '  Core #0   '     '          Core #1         '     '  Core #2   '\n    '            '     '                          '     '            '\n    ' +--------+ '     ' +--------+    +--------+ '     ' +--------+ '\n    ' | Node-0 | - - - ->| Node-1 |    | Node-3 |<- - - - | Node-2 | '\n    ' +--------+ '     ' +--------+    +--------+ '     ' +--------+ '\n    '            '     '     |                    '     '      ^     '\n    + - - - - - -+     +- - -|- - - - - - - - - - +     + - - -|- - -+\n                             |                                 |\n                             + - - - - - - - - - - - - - - - - +\n\n\nThe patch set has been break down as below:\n\n1. Split graph worker into common and default model part.\n2. Inline graph node processing to make it reusable.\n3. Add set/get APIs to choose worker model.\n4. Introduce core affinity API to set the node run on specific worker core.\n  (only use in new model)\n5. Introduce graph affinity API to bind one graph with specific worker\n  core.\n6. Introduce graph clone API.\n7. Introduce stream moving with scheduler work-queue in patch 8~12.\n8. Add stats for new models.\n9. Abstract default graph config process and integrate new model into\n  example/l3fwd-graph. Add new parameters for model choosing.\n\nWe could run with new worker model by this:\n./dpdk-l3fwd-graph -l 8,9,10,11 -n 4 -- -p 0x1 --config=\"(0,0,9)\" -P\n--model=\"dispatch\"\n\nReferences:\nhttps://static.sched.com/hosted_files/dpdkuserspace22/a6/graph%20introduce%20remote%20dispatch%20for%20mult-core%20scaling.pdf\n\n\nZhirun Yan (16):\n  graph: rename rte graph worker header as common\n  graph: split graph worker into common and default model\n  graph: move node process into inline function\n  graph: add get/set graph worker model APIs\n  graph: introduce graph node core affinity API\n  graph: introduce graph bind unbind API\n  graph: move node clone name func into private as common\n  graph: introduce graph clone API for other worker core\n  graph: add structure for stream moving between cores\n  graph: introduce stream moving cross cores\n  graph: enable create and destroy graph scheduling workqueue\n  graph: introduce graph walk by cross-core dispatch\n  graph: enable graph multicore dispatch scheduler model\n  graph: add stats for mcore dispatch model\n  test/graph: add functional tests for mcore dispatch model\n  examples/l3fwd-graph: introduce mcore dispatch worker model\n\n MAINTAINERS                                   |   3 +-\n app/test/test_graph.c                         | 130 ++++\n doc/guides/prog_guide/graph_lib.rst           |  71 ++-\n doc/guides/sample_app_ug/l3_forward_graph.rst |  16 +\n examples/l3fwd-graph/main.c                   | 230 +++++--\n lib/graph/graph.c                             | 161 +++++\n lib/graph/graph_debug.c                       |   6 +\n lib/graph/graph_populate.c                    |   1 +\n lib/graph/graph_private.h                     |  90 +++\n lib/graph/graph_stats.c                       |  76 ++-\n lib/graph/meson.build                         |   9 +-\n lib/graph/node.c                              |  27 +-\n lib/graph/rte_graph.h                         |  65 ++\n lib/graph/rte_graph_model_mcore_dispatch.c    | 191 ++++++\n lib/graph/rte_graph_model_mcore_dispatch.h    | 133 ++++\n lib/graph/rte_graph_model_rtc.h               |  46 ++\n lib/graph/rte_graph_worker.c                  |  39 ++\n lib/graph/rte_graph_worker.h                  | 503 +--------------\n lib/graph/rte_graph_worker_common.h           | 598 ++++++++++++++++++\n lib/graph/version.map                         |  11 +\n 20 files changed, 1838 insertions(+), 568 deletions(-)\n create mode 100644 lib/graph/rte_graph_model_mcore_dispatch.c\n create mode 100644 lib/graph/rte_graph_model_mcore_dispatch.h\n create mode 100644 lib/graph/rte_graph_model_rtc.h\n create mode 100644 lib/graph/rte_graph_worker.c\n create mode 100644 lib/graph/rte_graph_worker_common.h"
}