From patchwork Mon Oct 16 20:57:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sivaprasad Tummala X-Patchwork-Id: 132660 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id C638543182; Mon, 16 Oct 2023 22:58:20 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CBDD840E01; Mon, 16 Oct 2023 22:58:01 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2073.outbound.protection.outlook.com [40.107.244.73]) by mails.dpdk.org (Postfix) with ESMTP id A9CB940E7C for ; Mon, 16 Oct 2023 22:57:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZYRB/nEzVod2F7yIJYTEsTsdpYtD971ANTeg2RKlyL71EVFzZfK4WqlURVGRZjmQfqFTRExFmp34TWFKlLJoQF+fvF6tu7zm1dBdRGvNyEvMVo3F0zMr08qZnMBruSKkNxZvh1pjAmueBF8n3K3pHOCobFOTRK9uxKRoF41UUvUCAc1vCe1vVZO+QMEofprEEmDERw3aYRLA0DFWlDhxrlX1s43gvzTuGB+mpJ3rSxpnFSerpY4Y5gWafo3GmBjkL6bhOqflrFZVBlDt2BtAXIAUPY3xWlSElpEqWIsmaCP72upBuqUJixWJUyoAlgF++iqoJ3/pnyd24jfDcTt3mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nOLlAeqP/Dou05O+YGDrFSjcRAlkPbu+/30LaqYTQaw=; b=WwsYqa4pRU4oHdn0y2a12m9KZpke972r6YlxYNBQ6r1zO80Ajm/uJ/Gln8VHqEfxO94HTSco2fgx1dhKpob3Vk6FGWK9YoIGwYPsDAjkZTkFd5fqzHYdaT10EKBM9Bdm2qQlTnWMzKjRyqDolLAbkVihyVwanLiUXo2vyKe0EtvxjjW382AQBr9S+FM+7j2fy5WVrq2gRhgueSQnOZP5iUWbhfT/lCFvpQErS354KiD9VXl1bRQo5ANDtF1k9gaqkXyyFpzvtQx7Z9O9Y7tgzEfNWHfLHhwvmqL3wkrwWSRUy6q8koL3cMb9lR8gROsQPaqINvu557JE4ClGeSZyeg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=gmail.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nOLlAeqP/Dou05O+YGDrFSjcRAlkPbu+/30LaqYTQaw=; b=ygbQmRjiau04opnJ7HocojU6Rf3fpGk8Mk1ghMJqQDGe61nFgceDb1pJTkhUrwKsO3oYvaMb3JOql/Bp692ve8vMtmZRAyrCziH/mJ4P0+TxnkdnaJy7pcOY2CDSdD+pokeLn9r1hky2wvojJTJFfBmw/4yAtPtVNZWmgspnqhE= Received: from CY8PR12CA0064.namprd12.prod.outlook.com (2603:10b6:930:4c::10) by BL1PR12MB5287.namprd12.prod.outlook.com (2603:10b6:208:317::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.36; Mon, 16 Oct 2023 20:57:55 +0000 Received: from CY4PEPF0000E9D2.namprd03.prod.outlook.com (2603:10b6:930:4c:cafe::2) by CY8PR12CA0064.outlook.office365.com (2603:10b6:930:4c::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.36 via Frontend Transport; Mon, 16 Oct 2023 20:57:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by CY4PEPF0000E9D2.mail.protection.outlook.com (10.167.241.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6838.22 via Frontend Transport; Mon, 16 Oct 2023 20:57:54 +0000 Received: from telco-siena.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 16 Oct 2023 15:57:53 -0500 From: Sivaprasad Tummala To: , , CC: , , Subject: [PATCH v1 6/6] examples/eventdev_p: add eventdev power management Date: Mon, 16 Oct 2023 13:57:15 -0700 Message-ID: <20231016205715.970999-6-sivaprasad.tummala@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231016205715.970999-1-sivaprasad.tummala@amd.com> References: <20230419095427.563185-1-sivaprasad.tummala@amd.com> <20231016205715.970999-1-sivaprasad.tummala@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D2:EE_|BL1PR12MB5287:EE_ X-MS-Office365-Filtering-Correlation-Id: 7876535a-05d7-4d7b-8a6d-08dbce8a91da X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nFUrKCRV0uvYfiAoWEL3HU0w2zG0BLzL6Ad1Pxwl8JLGcyjPqjX2GCYshmZkoTxUhHj+IH2/egodkIh59TADTe2QBsQ05q07Rigppozj9IrkTYBrtVUYJBh/8y8db/TWFEkmJcN6l2nu7gbBktipw9Wq4MTDsdDUJSCP72GkXDdYaFw0vNQ/z6annPLvA6WZgFK3dpSo/HCTMFOuE7GUoxPUGoN+uyXQFtTCGtnBLhSFE3feAmCdg32UHps/JABguDnCiQY34taqldwdaJRwyQsBiHpqcnYyqNDUGhJKRYkNeaAQV7oxEytrCD6NHAgv0NVAO1r+Qd5jlmqFR1Li0d+pYNjry0eCft7dOZ0tt21jOObsEmNRq8MGh8fZQH8R3HczgF/NoAsXD8HAhuZb66yNg8UmkeGIexAcmGJwG0PPQMxFGNIeAANtlmfpyOUuxDArEHakgbvw9HQkzLOek4IsGAfbobXvYXXp+lhVqjYLlo4pGMMgilI9yhpFcQXdHTKXFT1d8oXm5b49EbcLjz/8WTA8niZ8FSMz1H9o/mk0Qe6w5UP6uTDrIFhN/qHNsXcxPey7glxFRRXtniwPxii7IHQVUpocN73xQl8A5ObVn1U4kfjP10MnRr0FJyHd8t/yAWptol7D2NwDLbTAWVOhPoAystSDKoaWe3WRxu0JMDvH8uJao0rAjFU/XhvnBabji3M0cvVU1QPs3o6Aad26OiiL+68acv6wUAbwcEDq5OlkeZAwtP9EN/S5c20FVv3J2kyBaX1ehnE9xD3WTg== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:SATLEXMB04.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230031)(4636009)(346002)(39860400002)(396003)(376002)(136003)(230922051799003)(451199024)(64100799003)(186009)(1800799009)(82310400011)(40470700004)(36840700001)(46966006)(40480700001)(40460700003)(36860700001)(82740400003)(356005)(47076005)(83380400001)(6666004)(16526019)(26005)(7696005)(81166007)(36756003)(110136005)(70586007)(70206006)(54906003)(478600001)(1076003)(426003)(336012)(2616005)(316002)(44832011)(86362001)(41300700001)(2906002)(5660300002)(8936002)(8676002)(4326008)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 20:57:54.9790 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7876535a-05d7-4d7b-8a6d-08dbce8a91da X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D2.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5287 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add power management feature support to eventdev_pipeline sample app. A new command option "--pmd-mgmt" was added to select power management mode on worker cores. Options currently supported are "pause/monitor". Default, no power management features are enabled on the worker ports. Signed-off-by: Sivaprasad Tummala --- .../sample_app_ug/eventdev_pipeline.rst | 3 +- examples/eventdev_pipeline/main.c | 64 ++++++++++++++++++- examples/eventdev_pipeline/pipeline_common.h | 1 + .../pipeline_worker_generic.c | 1 + 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/doc/guides/sample_app_ug/eventdev_pipeline.rst b/doc/guides/sample_app_ug/eventdev_pipeline.rst index 19ff53803e..1186d0af3d 100644 --- a/doc/guides/sample_app_ug/eventdev_pipeline.rst +++ b/doc/guides/sample_app_ug/eventdev_pipeline.rst @@ -44,11 +44,12 @@ these settings is shown below: * ``-c32``: worker dequeue depth of 32 * ``-W1000``: do 1000 cycles of work per packet in each stage * ``-D``: dump statistics on exit + * ``--pmd-mgmt=pause``: worker core power management using pause; .. code-block:: console .//examples/dpdk-eventdev_pipeline -l 0,2,8-15 --vdev event_sw0 \ - -- -r1 -t1 -e4 -w FF00 -s4 -n0 -c32 -W1000 -D + -- -r1 -t1 -e4 -w FF00 -s4 -n0 -c32 -W1000 -D --pmd-mgmt=pause The application has some sanity checking built-in, so if there is a function (e.g.; the RX core) which doesn't have a cpu core mask assigned, the application diff --git a/examples/eventdev_pipeline/main.c b/examples/eventdev_pipeline/main.c index 0c995d1a70..3bb55054ce 100644 --- a/examples/eventdev_pipeline/main.c +++ b/examples/eventdev_pipeline/main.c @@ -24,6 +24,9 @@ struct config_data cdata = { .worker_cq_depth = 16 }; +static enum rte_power_pmd_mgmt_type pmgmt_mode; +bool pmgmt_enabled; + static void dump_core_info(unsigned int lcore_id, struct worker_data *data, unsigned int worker_idx) @@ -122,6 +125,8 @@ parse_coremask(const char *coremask) return mask; } +#define CMD_LINE_OPT_PMD_MGMT "pmd-mgmt" + static struct option long_options[] = { {"workers", required_argument, 0, 'w'}, {"packets", required_argument, 0, 'n'}, @@ -139,6 +144,7 @@ static struct option long_options[] = { {"quiet", no_argument, 0, 'q'}, {"use-atq", no_argument, 0, 'a'}, {"dump", no_argument, 0, 'D'}, + {CMD_LINE_OPT_PMD_MGMT, 1, 0, 0}, {0, 0, 0, 0} }; @@ -163,12 +169,38 @@ usage(void) " -q, --quiet Minimize printed output\n" " -a, --use-atq Use all type queues\n" " -m, --mempool-size=N Dictate the mempool size\n" - " -D, --dump Print detailed statistics before exit" + " -D, --dump Print detailed statistics before exit\n" + " --pmd-mgmt MODE enable PMD power management mode." "\n"; fprintf(stderr, "%s", usage_str); exit(1); } +static int +parse_pmd_mgmt_config(const char *name) +{ +#define PMD_MGMT_MONITOR "monitor" +#define PMD_MGMT_PAUSE "pause" +#define PMD_MGMT_SCALE "scale" + + if (strncmp(PMD_MGMT_MONITOR, name, sizeof(PMD_MGMT_MONITOR)) == 0) { + pmgmt_mode = RTE_POWER_MGMT_TYPE_MONITOR; + return 0; + } + + if (strncmp(PMD_MGMT_PAUSE, name, sizeof(PMD_MGMT_PAUSE)) == 0) { + pmgmt_mode = RTE_POWER_MGMT_TYPE_PAUSE; + return 0; + } + + if (strncmp(PMD_MGMT_SCALE, name, sizeof(PMD_MGMT_SCALE)) == 0) { + pmgmt_mode = RTE_POWER_MGMT_TYPE_SCALE; + return 0; + } + /* unknown PMD power management mode */ + return -1; +} + static void parse_app_args(int argc, char **argv) { @@ -246,6 +278,21 @@ parse_app_args(int argc, char **argv) case 'm': cdata.num_mbuf = (uint64_t)atol(optarg); break; + /* long options */ + case 0: + if (!strncmp(long_options[option_index].name, + CMD_LINE_OPT_PMD_MGMT, + sizeof(CMD_LINE_OPT_PMD_MGMT))) { + if (parse_pmd_mgmt_config(optarg) < 0) { + printf(" Invalid power mgmt mode: %s\n", + optarg); + return; + } + pmgmt_enabled = true; + printf("PMD power mgmt mode is enabled\n"); + } + break; + default: usage(); } @@ -430,7 +477,20 @@ main(int argc, char **argv) continue; dump_core_info(lcore_id, worker_data, worker_idx); - + if (pmgmt_enabled) { + if (fdata->worker_core[lcore_id]) { + err = rte_power_eventdev_pmgmt_port_enable( + lcore_id, worker_data[worker_idx].dev_id, + worker_data[worker_idx].port_id, + pmgmt_mode); + if (err) { + RTE_LOG(ERR, POWER, + "Power Management enabled failed on core %u\n", + lcore_id); + continue; + } + } + } err = rte_eal_remote_launch(fdata->cap.worker, &worker_data[worker_idx], lcore_id); if (err) { diff --git a/examples/eventdev_pipeline/pipeline_common.h b/examples/eventdev_pipeline/pipeline_common.h index 28b6ab85ff..b33162adfb 100644 --- a/examples/eventdev_pipeline/pipeline_common.h +++ b/examples/eventdev_pipeline/pipeline_common.h @@ -19,6 +19,7 @@ #include #include #include +#include #define MAX_NUM_STAGES 8 #define BATCH_SIZE 16 diff --git a/examples/eventdev_pipeline/pipeline_worker_generic.c b/examples/eventdev_pipeline/pipeline_worker_generic.c index 783f68c91e..22d644bd51 100644 --- a/examples/eventdev_pipeline/pipeline_worker_generic.c +++ b/examples/eventdev_pipeline/pipeline_worker_generic.c @@ -6,6 +6,7 @@ #include +#include #include "pipeline_common.h" static __rte_always_inline int