Show a cover letter.

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

{
    "id": 85325,
    "url": "http://patchwork.dpdk.org/api/covers/85325/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/cover/cover.1608213657.git.anatoly.burakov@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": "<cover.1608213657.git.anatoly.burakov@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/cover.1608213657.git.anatoly.burakov@intel.com",
    "date": "2020-12-17T14:05:30",
    "name": "[v12,00/11] Add PMD power management",
    "submitter": {
        "id": 4,
        "url": "http://patchwork.dpdk.org/api/people/4/?format=api",
        "name": "Anatoly Burakov",
        "email": "anatoly.burakov@intel.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/cover/cover.1608213657.git.anatoly.burakov@intel.com/mbox/",
    "series": [
        {
            "id": 14349,
            "url": "http://patchwork.dpdk.org/api/series/14349/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=14349",
            "date": "2020-12-17T14:05:30",
            "name": "Add PMD power management",
            "version": 12,
            "mbox": "http://patchwork.dpdk.org/series/14349/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/covers/85325/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 9D41BA09F6;\n\tThu, 17 Dec 2020 15:06:19 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 5C178CA16;\n\tThu, 17 Dec 2020 15:06:17 +0100 (CET)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n by dpdk.org (Postfix) with ESMTP id 07860CA08\n for <dev@dpdk.org>; Thu, 17 Dec 2020 15:06:14 +0100 (CET)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 17 Dec 2020 06:05:40 -0800",
            "from silpixa00399498.ir.intel.com (HELO\n silpixa00399498.ger.corp.intel.com) ([10.237.222.52])\n by fmsmga006.fm.intel.com with ESMTP; 17 Dec 2020 06:05:38 -0800"
        ],
        "IronPort-SDR": [
            "\n J5fizdNiIhJLzObxcQkTWrIynBMqKh+8zZEnsJqgwhlH+lHSZpWSOF5j/Xthp+6xLgmwdRAHGK\n DPqd1k5XTu/g==",
            "\n 8HaY3ze2f9Etlp8z9vizdIaD3zvDrdwCzvUPln365rXLNMb/qNRqKqLhIkv+jQ2t0tywmMECB/\n QNK4WZ6eFQsg=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6000,8403,9837\"; a=\"175398758\"",
            "E=Sophos;i=\"5.78,428,1599548400\"; d=\"scan'208\";a=\"175398758\"",
            "E=Sophos;i=\"5.78,428,1599548400\"; d=\"scan'208\";a=\"557886631\""
        ],
        "X-ExtLoop1": "1",
        "From": "Anatoly Burakov <anatoly.burakov@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, konstantin.ananyev@intel.com, gage.eads@intel.com,\n timothy.mcdaniel@intel.com, david.hunt@intel.com,\n bruce.richardson@intel.com, chris.macnamara@intel.com",
        "Date": "Thu, 17 Dec 2020 14:05:30 +0000",
        "Message-Id": "<cover.1608213657.git.anatoly.burakov@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<1604315406-27669-1-git-send-email-liang.j.ma@intel.com>",
        "References": "<1604315406-27669-1-git-send-email-liang.j.ma@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v12 00/11] Add PMD power management",
        "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": "This patchset proposes a simple API for Ethernet drivers to cause the  \nCPU to enter a power-optimized state while waiting for packets to  \narrive. This is achieved through cooperation with the NIC driver that \nwill allow us to know address of wake up event, and wait for writes on \nit.\n\nOn IA, this is achieved through using UMONITOR/UMWAIT instructions. They \nare used in their raw opcode form because there is no widespread \ncompiler support for them yet. Still, the API is made generic enough to\nhopefully support other architectures, if they happen to implement \nsimilar instructions.\n\nTo achieve power savings, there is a very simple mechanism used: we're \ncounting empty polls, and if a certain threshold is reached, we get the \naddress of next RX ring descriptor from the NIC driver, arm the \nmonitoring hardware, and enter a power-optimized state. We will then \nwake up when either a timeout happens, or a write happens (or generally \nwhenever CPU feels like waking up - this is platform-specific), and  \nproceed as normal. The empty poll counter is reset whenever we actually \nget packets, so we only go to sleep when we know nothing is going on. \nThe mechanism is generic which can be used for any write back \ndescriptor.\n\nThis patchset also introduces a few changes into existing power \nmanagement-related intrinsics, namely to provide a native way of waking \nup a sleeping core without application being responsible for it, as well \nas general robustness improvements. There's quite a bit of locking going \non, but these locks are per-thread and very little (if any) contention \nis expected, so the performance impact shouldn't be that bad (and in any \ncase the locking happens when we're about to sleep anyway, not on a \nhotpath).\n\nWhy are we putting it into ethdev as opposed to leaving this up to the \napplication? Our customers specifically requested a way to do it wit \nminimal changes to the application code. The current approach allows to \njust flip a switch and automatically have power savings.\n\n- Only 1:1 core to queue mapping is supported, meaning that each lcore \n  must at most handle RX on a single queue\n- Support 3 type policies. Monitor/Pause/Frequency Scaling\n- Power management is enabled per-queue\n- The API doesn't extend to other device types\n\nAnatoly Burakov (5):\n  eal: uninline power intrinsics\n  eal: avoid invalid API usage in power intrinsics\n  eal: change API of power intrinsics\n  eal: remove sync version of power monitor\n  eal: add monitor wakeup function\n\nLiang Ma (6):\n  ethdev: add simple power management API\n  power: add PMD power management API and callback\n  net/ixgbe: implement power management API\n  net/i40e: implement power management API\n  net/ice: implement power management API\n  examples/l3fwd-power: enable PMD power mgmt\n\n doc/guides/prog_guide/power_man.rst           |  44 +++\n doc/guides/rel_notes/release_21_02.rst        |  14 +\n .../sample_app_ug/l3_forward_power_man.rst    |  35 ++\n drivers/event/dlb/dlb.c                       |  10 +-\n drivers/event/dlb2/dlb2.c                     |  10 +-\n drivers/net/i40e/i40e_ethdev.c                |   1 +\n drivers/net/i40e/i40e_rxtx.c                  |  25 ++\n drivers/net/i40e/i40e_rxtx.h                  |   1 +\n drivers/net/ice/ice_ethdev.c                  |   1 +\n drivers/net/ice/ice_rxtx.c                    |  26 ++\n drivers/net/ice/ice_rxtx.h                    |   1 +\n drivers/net/ixgbe/ixgbe_ethdev.c              |   1 +\n drivers/net/ixgbe/ixgbe_rxtx.c                |  25 ++\n drivers/net/ixgbe/ixgbe_rxtx.h                |   1 +\n examples/l3fwd-power/main.c                   |  89 ++++-\n .../arm/include/rte_power_intrinsics.h        |  39 +-\n .../include/generic/rte_power_intrinsics.h    |  78 ++--\n .../ppc/include/rte_power_intrinsics.h        |  39 +-\n lib/librte_eal/version.map                    |   5 +\n .../x86/include/rte_power_intrinsics.h        | 115 ------\n lib/librte_eal/x86/meson.build                |   1 +\n lib/librte_eal/x86/rte_power_intrinsics.c     | 169 +++++++++\n lib/librte_ethdev/rte_ethdev.c                |  28 ++\n lib/librte_ethdev/rte_ethdev.h                |  25 ++\n lib/librte_ethdev/rte_ethdev_driver.h         |  22 ++\n lib/librte_ethdev/version.map                 |   3 +\n lib/librte_power/meson.build                  |   5 +-\n lib/librte_power/rte_power_pmd_mgmt.c         | 349 ++++++++++++++++++\n lib/librte_power/rte_power_pmd_mgmt.h         |  90 +++++\n lib/librte_power/version.map                  |   5 +\n 30 files changed, 1028 insertions(+), 229 deletions(-)\n create mode 100644 lib/librte_eal/x86/rte_power_intrinsics.c\n create mode 100644 lib/librte_power/rte_power_pmd_mgmt.c\n create mode 100644 lib/librte_power/rte_power_pmd_mgmt.h"
}