From patchwork Mon Oct 16 20:57:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sivaprasad Tummala X-Patchwork-Id: 132655 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 E44AD43182; Mon, 16 Oct 2023 22:57:39 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B576940299; Mon, 16 Oct 2023 22:57:39 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2060.outbound.protection.outlook.com [40.107.223.60]) by mails.dpdk.org (Postfix) with ESMTP id 08765400D6 for ; Mon, 16 Oct 2023 22:57:38 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CsgAwt2fxpnJeLZpMmOumdx8jPsIAXpzahG7/4ez3OP6JKLTpPUr6PE0KiaXsNJYWnODS+YRmQl5D9W5q7XkY2IV0VBidn+zVOg1DBOeoI/88aqI/Hai12dguTUbXEmPZBmsrJwg009K3jpHqVtJPeNeW0/Ue82n8FYGxN6gZTswxhS6lJ1jAXz8EthyrjvqWJ3zhVMEGSrsVUcLT6fEaJWu5V1p7PIP4B60raOS4bM11eIlKsQifKpH+EbAtqQ2mvVyPzpZ8TpyzosGUDKJ5FGTR/3FcIzEfUmP7ZS1QrQQNs/7FIkG9d0Vp+KLbXvVQHBj6LxMnaQwvx96VsCrvQ== 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=lb6ITJ+G92YiLM7no0kwlmXox3DU/4S9rIHYC288nqg=; b=mYx+5UQ1BZrm1bjKcxdG2XXFaZtwNCDVKucUIpOBFPskFXBR8PW8vThJA+bkE9J6MHXXSR2A4ZCdJXWrJ7wyWfCDnZL4+1jXvWkwMKNO09fpDqxF6lYYOHkDP4ALNOOiy/Nq2UHdCJpdVrXJuOV3azYgX6XiTFNYoob/xqTqfJnHkPpetZzj2NvI9u3cChMVC23RtAdJ7e1BdRZC5WQvkE42HcI/XGSpoobylekRFSDiJKLfL4rZKmklrt98qHTLbNHEvML3YcqJ/tPN48nWX19zSI4eBZBs//2wV66uPKaQNDVSE/Fn2+aJIfW913QwuHgf0Bj9eiwKrQwrP0+i2Q== 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=lb6ITJ+G92YiLM7no0kwlmXox3DU/4S9rIHYC288nqg=; b=IHIt7JPij9qlHkiFxleGBmZOu4x7J65QfJ7Csd33nDNiz5eYp88oEcCnmbVkab75Yd6Us8thVyf8xdi3jp+qhcmY3rfyMyXyVT7GfPM8vXx0Z5dXU4YKpa/pE4tdmti8wZQpHqLcWnMrwifkEBalokkPyKZbqRG9wsUGWSTTa0U= Received: from CYZPR14CA0033.namprd14.prod.outlook.com (2603:10b6:930:a0::20) by DM6PR12MB4434.namprd12.prod.outlook.com (2603:10b6:5:2ad::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.35; Mon, 16 Oct 2023 20:57:36 +0000 Received: from CY4PEPF0000E9D0.namprd03.prod.outlook.com (2603:10b6:930:a0:cafe::13) by CYZPR14CA0033.outlook.office365.com (2603:10b6:930:a0::20) 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:35 +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 CY4PEPF0000E9D0.mail.protection.outlook.com (10.167.241.143) 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:35 +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:34 -0500 From: Sivaprasad Tummala To: , , CC: , , Subject: [PATCH v1 1/6] eventdev: add power monitoring API on event port Date: Mon, 16 Oct 2023 13:57:10 -0700 Message-ID: <20231016205715.970999-1-sivaprasad.tummala@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230419095427.563185-1-sivaprasad.tummala@amd.com> References: <20230419095427.563185-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: CY4PEPF0000E9D0:EE_|DM6PR12MB4434:EE_ X-MS-Office365-Filtering-Correlation-Id: 976004c2-862e-41c0-6737-08dbce8a865c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KQKf77/Qm2TG+4Q35C07Hd33yAjYgOQvOoHMUcGJ2W6c49wB3ZQHShUbWu7LN9+WQ+8f9Vch3Sk4kLkWSAH1oYJKG5DJVk/Q4D1x6XSOtfuzOtT89OT0zegscd2eu5SEMsWucJfY/s99XwxaH3owrisNNKpy0JmDsesx3H8k3Ycs5LQ5qR/cSX4cDGW/y4Rb0GSn1xi6u9XudPlu/FhLPVwtY3fJCGnedxYfhPW+TwlID4jMhEHakXadj03cO6BkY1vpAfoqM7gUT9bON72/46PrRSDSuRdFProJDVVxv1N20NjnobrRF3vu2ICxRUv+gW8+io2d2PhMSUEjnHrofi8KGbD2gtjgMREOb++FSBexrWJBiHWkdbHuRVpEXVGhmrstfwtRIgZ2pO8ziKZHipZsWokRn+Dz36465CN6FoKfw/4WVosU1AfQbua97dZ6NfSuBLXnO2hvpWpmZBKIxIIhaU6UGoPNCOB8+92O1rXtOEKVAzGai4jYZDnVbkdTQc7bi+C9omKvmcipGBA6QyYuA4uzCm9GXh2WG9EZJqoizrsJ4Y0SS9yuYWA7i6Kw5k5Kxj7DMo3o5NKkn65u3jDdb5mgruumcCvtdImYtvWv6uM4aXL+tMV3eAimsKYHOvrD2wzGJ8oPvgSvVgGbi1L9Me0pc+y2Ipw9/mWAB3vJoEDovnNkY9IhIfAOuFqsUJmHfHLmxqosQyx7623JlBBGHn0QN7LU5rqNXg00GItfJxsq1O7Hl6iD7DNuh+Qc4DKYmyJeyb7kM+Ziryx6vA== 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)(396003)(136003)(346002)(39860400002)(376002)(230922051799003)(186009)(82310400011)(64100799003)(1800799009)(451199024)(36840700001)(40470700004)(46966006)(70206006)(70586007)(478600001)(2616005)(54906003)(316002)(110136005)(426003)(1076003)(336012)(26005)(7696005)(16526019)(2906002)(41300700001)(5660300002)(8936002)(4326008)(8676002)(44832011)(86362001)(36756003)(82740400003)(356005)(47076005)(83380400001)(6666004)(36860700001)(81166007)(40460700003)(40480700001)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 20:57:35.7131 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 976004c2-862e-41c0-6737-08dbce8a865c 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: CY4PEPF0000E9D0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4434 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 A new API to allow power monitoring condition on event port to optimize power when no events are arriving on an event port for the worker core to process in an eventdev based pipelined application. Signed-off-by: Sivaprasad Tummala --- lib/eventdev/eventdev_pmd.h | 22 ++++++++++++++++++++++ lib/eventdev/rte_eventdev.c | 24 ++++++++++++++++++++++++ lib/eventdev/rte_eventdev.h | 25 +++++++++++++++++++++++++ lib/eventdev/version.map | 1 + 4 files changed, 72 insertions(+) diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index 30bd90085c..a0ee768ce7 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -525,6 +525,26 @@ typedef int (*eventdev_port_unlink_profile_t)(struct rte_eventdev *dev, void *po typedef int (*eventdev_port_unlinks_in_progress_t)(struct rte_eventdev *dev, void *port); +/** + * @internal + * Get address of memory location whose contents will change whenever there is + * new data to be received on an Event port. + * + * @param port + * Eventdev port pointer. + * @param pmc + * The pointer to power-optimized monitoring condition structure. + * @return + * Negative errno value on error, 0 on success. + * + * @retval 0 + * Success + * @retval -EINVAL + * Invalid parameters + */ +typedef int (*event_get_monitor_addr_t)(void *port, + struct rte_power_monitor_cond *pmc); + /** * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue() * @@ -1564,6 +1584,8 @@ struct eventdev_ops { eventdev_dump_t dump; /* Dump internal information */ + event_get_monitor_addr_t get_monitor_addr; + /** Get power monitoring condition for event port */ eventdev_xstats_get_t xstats_get; /**< Get extended device statistics. */ eventdev_xstats_get_names_t xstats_get_names; diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c index 95373bbaad..5feb4326a2 100644 --- a/lib/eventdev/rte_eventdev.c +++ b/lib/eventdev/rte_eventdev.c @@ -884,6 +884,30 @@ rte_event_port_attr_get(uint8_t dev_id, uint8_t port_id, uint32_t attr_id, return 0; } +int +rte_event_port_get_monitor_addr(uint8_t dev_id, uint8_t port_id, + struct rte_power_monitor_cond *pmc) +{ + struct rte_eventdev *dev; + + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); + dev = &rte_eventdevs[dev_id]; + if (!is_valid_port(dev, port_id)) { + RTE_EDEV_LOG_ERR("Invalid port_id=%" PRIu8, port_id); + return -EINVAL; + } + + if (pmc == NULL) { + RTE_EDEV_LOG_ERR("devid %u port %u power monitor condition is NULL\n", + dev_id, port_id); + return -EINVAL; + } + + if (*dev->dev_ops->get_monitor_addr == NULL) + return -ENOTSUP; + return (*dev->dev_ops->get_monitor_addr)(dev->data->ports[port_id], pmc); +} + int rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id, uint32_t *attr_value) diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h index 2ea98302b8..38dbbc2617 100644 --- a/lib/eventdev/rte_eventdev.h +++ b/lib/eventdev/rte_eventdev.h @@ -214,6 +214,7 @@ extern "C" { #include #include #include +#include #include "rte_eventdev_trace_fp.h" @@ -990,6 +991,30 @@ int rte_event_port_attr_get(uint8_t dev_id, uint8_t port_id, uint32_t attr_id, uint32_t *attr_value); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Retrieve the monitor condition for a given event port. + * + * @param dev_id + * Eventdev id + * @param port_id + * Eventdev port id + * @param pmc + * The pointer to power-optimized monitoring condition structure. + * + * @return + * - 0: Success. + * -ENOTSUP: Operation not supported. + * -EINVAL: Invalid parameters. + * -ENODEV: Invalid device ID. + */ +__rte_experimental +int +rte_event_port_get_monitor_addr(uint8_t dev_id, uint8_t port_id, + struct rte_power_monitor_cond *pmc); + /** * Start an event device. * diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index 42a2f7206e..fa9eb069ff 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -154,6 +154,7 @@ EXPERIMENTAL { rte_event_port_profile_links_set; rte_event_port_profile_unlink; rte_event_port_profile_links_get; + rte_event_port_get_monitor_addr; __rte_eventdev_trace_port_profile_switch; }; From patchwork Mon Oct 16 20:57:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sivaprasad Tummala X-Patchwork-Id: 132656 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 5637C43182; Mon, 16 Oct 2023 22:57:55 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 48220402E8; Mon, 16 Oct 2023 22:57:55 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2056.outbound.protection.outlook.com [40.107.92.56]) by mails.dpdk.org (Postfix) with ESMTP id 26980400D6 for ; Mon, 16 Oct 2023 22:57:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JmOMW1dTYspPv5fmnt6k2wODhnWLaWRL5+8XpYM70X5fioCw0Xid6Wz28psHtZ5O3xSftT3LWA9yZgfQFRl3l8beWhiHYhXbE0ICwTVRGchFOsJRs23oAy1mlZjsP1yvU/wirrEWqmSvvJrk4zRbY2n3KjMZ7tIm368BFbLdfJ3j0VeRvMM7VvRbCoTt2Jf7Q/si9Qw/gT56o3IF+Ob8TFBnXM+1M56PqEwJFpigQGJkfz57Z/wUEgCgkfZkF7DwzpMUpTcDEMKTPN3gTC6RmHAGqBqtuAjkCmCYMIC1bymPiqyWDb57tkExGSho1rU/IT5jZIET//nNyiJiKhd4jQ== 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=t2/80l4kkmEFB+rGfJgjb7QYIUpNFKh67Q3+JPwwQEY=; b=QIC2Znt/Y5530oPd0yXRDAiVltNvOBvmo8OT/0CYZiQLeHGY6d6AeHk0AVFykT+U3pIZYhHRbO/Vzkm7fzBYqIjvXM0G+aSGaEQSVQWTTcVFYneVQTbF+eOW3o7kzyKS6KksTuG2WwB+9NYgOsbngc0OJ0vCxpsID3fDHRCReGcTRAgC1vLtwVSAFDdRIvSOLLfg1gVjByDGVMMzXRsXb1IlXzkcU6qPZsJugZ8mMsVlQfHW0lFTgV9Yww2NXQrYUgT4vltXKVRp8s52xQqSQuq8zY5NJyolLlwvEnNE+XuKGnELTpLxmjY1c50E6OS7Y9sVyCAgZMyuZsMqMqoxOw== 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=t2/80l4kkmEFB+rGfJgjb7QYIUpNFKh67Q3+JPwwQEY=; b=UDuWIpi5kWPHccdUy/Rm/g8Pttr8PRJdpPzRDuZnJct1ybadWHDAszRS30s0QqizGh4GIN+zaRqanZ6npt3ZgcGzxJWPwIdK8xiOnz7sbi90B4KGu++ZWx+9GaOSOLBI7IQmMdjvjXGuMUxa8SyVruJLiuXPx6mb2pOYEGeh+Ss= Received: from CYZPR14CA0038.namprd14.prod.outlook.com (2603:10b6:930:a0::26) by SA3PR12MB8761.namprd12.prod.outlook.com (2603:10b6:806:312::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.34; Mon, 16 Oct 2023 20:57:51 +0000 Received: from CY4PEPF0000E9D0.namprd03.prod.outlook.com (2603:10b6:930:a0:cafe::d9) by CYZPR14CA0038.outlook.office365.com (2603:10b6:930:a0::26) 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:51 +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 CY4PEPF0000E9D0.mail.protection.outlook.com (10.167.241.143) 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:51 +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:35 -0500 From: Sivaprasad Tummala To: , , CC: , , Subject: [PATCH v1 2/6] event/sw: support power monitor Date: Mon, 16 Oct 2023 13:57:11 -0700 Message-ID: <20231016205715.970999-2-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: CY4PEPF0000E9D0:EE_|SA3PR12MB8761:EE_ X-MS-Office365-Filtering-Correlation-Id: f6270d42-f815-4249-d7a1-08dbce8a8f88 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wMFh0wu6w/NNDBufblGNt1CIFeLmTJhXcQ05p8l5U1ZnXflJ56r8+I911P5gPrjQVy4iA5p3Hn8xkbGbciS6bQ/o9PiyvwsVI6EMDBuVDt7B0VIsmIGJwvHrD+u+LaksI8kTmA838uu5ttBlWquiIk5rAoJ36iZ5jQCvSdyS5Qshxnt+PMfPSO3lkAZnc2hAfkY/PsY3OWV4PVPYyM4S6kzjUxIeD1Dsd5FfzxU4K8A7dMezbLk00z+UD9tXjLwdz6XIIhbCs6srGXQlMLqLTNnZH+nxjoN1GhtReWr/WPZQFFkYc6nmi4dPD1dyZOJ7++Z/5m0gMG8Gwtpw+PnhNgRuk8nIbPjhfhKe5i1OZErdv29O66KsQgyS1LqkuP9maS3yE+xYiRUgJ2gD9tfahEgsg72N++648qudsMmepdqvrhcBEBets1Oc8GxHnQrxMvr162Rfi/o5u7ydfm7O7ekcq7BY+ZxxcPRRSb8h75sDTeFYrjIh3qb3omA6/JIE8rrNOhulVDfn20so0ABJQLGbtiUBWODUiQTFrATSfWgHGggI/4ktL9v34LxBXqr82FnuZjX9vjTtpABHr/O9lX5aOd8goZ4XHc0xMsaZfZikVb7rs+P3G7l5oaV5RF+Iy1usgJpMjmUf8Y3hp6hxRzhtlPiIMXsqpxNQ0r5NYBGvzCtrA0rCwdAz4RVot9LtqXpbGgXA8bpIl+b9mze1duDuoDbpIbwuHjA3dUWYkzAJqdXXOkMGtNQ4Upis2hZw6epBtNMBP5X4CVyogx5KUg== 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)(396003)(346002)(39860400002)(376002)(136003)(230922051799003)(451199024)(1800799009)(82310400011)(186009)(64100799003)(36840700001)(46966006)(40470700004)(40460700003)(40480700001)(356005)(82740400003)(36756003)(81166007)(36860700001)(47076005)(26005)(7696005)(16526019)(6666004)(70586007)(70206006)(478600001)(2616005)(426003)(110136005)(1076003)(316002)(54906003)(336012)(2906002)(44832011)(41300700001)(86362001)(8676002)(4326008)(5660300002)(8936002)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 20:57:51.0882 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f6270d42-f815-4249-d7a1-08dbce8a8f88 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: CY4PEPF0000E9D0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8761 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 Currently sw eventdev pmd does not support ``rte_power_monitor`` api. This patch adds support by adding monitor callback that is called whenever we enter sleep state and need to check if it is time to wake up. Signed-off-by: Sivaprasad Tummala --- drivers/event/sw/sw_evdev.c | 1 + drivers/event/sw/sw_evdev.h | 2 ++ drivers/event/sw/sw_evdev_worker.c | 27 +++++++++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c index 6d1816b76d..99b3c0d92f 100644 --- a/drivers/event/sw/sw_evdev.c +++ b/drivers/event/sw/sw_evdev.c @@ -958,6 +958,7 @@ sw_probe(struct rte_vdev_device *vdev) .port_link = sw_port_link, .port_unlink = sw_port_unlink, .port_unlinks_in_progress = sw_port_unlinks_in_progress, + .get_monitor_addr = sw_event_get_monitor_addr, .eth_rx_adapter_caps_get = sw_eth_rx_adapter_caps_get, diff --git a/drivers/event/sw/sw_evdev.h b/drivers/event/sw/sw_evdev.h index c7b943a72b..26aa2fe283 100644 --- a/drivers/event/sw/sw_evdev.h +++ b/drivers/event/sw/sw_evdev.h @@ -312,6 +312,8 @@ int sw_xstats_reset(struct rte_eventdev *dev, int16_t queue_port_id, const uint64_t ids[], uint32_t nb_ids); +int sw_event_get_monitor_addr(void *port, + struct rte_power_monitor_cond *pmc); int test_sw_eventdev(void); diff --git a/drivers/event/sw/sw_evdev_worker.c b/drivers/event/sw/sw_evdev_worker.c index 063b919c7e..139c98cfe2 100644 --- a/drivers/event/sw/sw_evdev_worker.c +++ b/drivers/event/sw/sw_evdev_worker.c @@ -10,6 +10,33 @@ #define PORT_ENQUEUE_MAX_BURST_SIZE 64 +static int +sw_event_ring_monitor_callback(const uint64_t value, + const uint64_t arg[RTE_POWER_MONITOR_OPAQUE_SZ]) +{ + /* Check if the head pointer has changed */ + return value != arg[0]; +} + +int +sw_event_get_monitor_addr(void *port, struct rte_power_monitor_cond *pmc) +{ + struct sw_port *p = (void *)port; + struct rte_event_ring *ev_ring = p->cq_worker_ring; + struct rte_ring *rng = &ev_ring->r; + + /* + * Monitor event ring producer tail since if + * prod.tail moves there are events to dequeue + */ + pmc->addr = &rng->prod.tail; + pmc->size = sizeof(rng->prod.tail); + pmc->opaque[0] = rng->prod.tail; + pmc->fn = sw_event_ring_monitor_callback; + + return 0; +} + static inline void sw_event_release(struct sw_port *p, uint8_t index) { From patchwork Mon Oct 16 20:57:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sivaprasad Tummala X-Patchwork-Id: 132658 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 2AF6B43182; Mon, 16 Oct 2023 22:58:06 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5F14D40DDB; Mon, 16 Oct 2023 22:57:57 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2056.outbound.protection.outlook.com [40.107.93.56]) by mails.dpdk.org (Postfix) with ESMTP id D7894402E5 for ; Mon, 16 Oct 2023 22:57:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Wm0pOtFpOwU2TnEf2ne3wEueCiiHhivsVjv7NqcARSPl8RuKePcnIOnW4/zk+ZPxcThUn3pR22iueqZ8O5qRkzGNC6PPt0VdkyC+LjXTyJzrZPK5/e4EPyC9ljrxyQnr/Ar/Txx2VoDAgXjsjG6vC/pIp27e4+tiozZKLr/y5lw1ODN0Lrgs+T49HGGvhEY7hTm/qQ8X8QZKBFANocVJHyDFl3ueddtZkaIwEabXBik8d5QXD/hRQWjVRotse2GCSECq0uPYWjVrhuZ+TQW5fUMq9zvopX8nClpTRnzBpBXe0km/ZkLb6Vz+hTdkMSjDzCJNdpwS9Xr+jXjhyXy1Lw== 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=fOcCZGCCn4AtEdOVDu+1kF8ahl0/1bFawPr/C0KFNTU=; b=iXSbKkWLhTwtaFzYFiHFcwpMnLdp+Py4rmSAG3k6hZg3U2TYAi/y2eHfhKsYd5c4UhErA0INPHa2MNDFfQqcjhPbeV4UAKKGSMe1UVuS758Sw+BU6oMud0nGuY4FcjEVO93ZlGjHwlSCnbg87hcn7XHFgiG+RlWsdgyU9UgkINGvpwt9f+xjeZkop2aCWBeHK5x2vNN3LFXRqtNIzSYjVmnwksyin69v+sUAb+ysIOPVPDfAZYCJiT7hBuDq2tGEJh85l53yA16iyc9972hmmyAUNoJgwXiq+Yw6MT9vAHI/4is5ytZJ9reAlsnOp/C9vLOUCGuONjd4kPwFQ+932Q== 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=fOcCZGCCn4AtEdOVDu+1kF8ahl0/1bFawPr/C0KFNTU=; b=ZSAB2jqsyr9MjICSFLAbZLv93m3ZBlADUheJFlhPpzi3wEn+1pi7kcTqyTBGbMaegzZStaA1tjinytY9cxDqOCuTN2Sjn0BjpyrZIaDKhhZwOb5bL1NUY1dN7KMyuNFFkCIaINcwFoI9zrcl2/IvpM/PX9psaeMshAhAlW6BQL0= Received: from CYZPR14CA0048.namprd14.prod.outlook.com (2603:10b6:930:a0::25) by DM4PR12MB7573.namprd12.prod.outlook.com (2603:10b6:8:10f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.34; Mon, 16 Oct 2023 20:57:52 +0000 Received: from CY4PEPF0000E9D0.namprd03.prod.outlook.com (2603:10b6:930:a0:cafe::40) by CYZPR14CA0048.outlook.office365.com (2603:10b6:930:a0::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.35 via Frontend Transport; Mon, 16 Oct 2023 20:57:52 +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 CY4PEPF0000E9D0.mail.protection.outlook.com (10.167.241.143) 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:52 +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:36 -0500 From: Sivaprasad Tummala To: , , CC: , , Subject: [PATCH v1 3/6] eventdev: support optional dequeue callbacks Date: Mon, 16 Oct 2023 13:57:12 -0700 Message-ID: <20231016205715.970999-3-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: CY4PEPF0000E9D0:EE_|DM4PR12MB7573:EE_ X-MS-Office365-Filtering-Correlation-Id: 5d24626f-0eb7-415b-7f98-08dbce8a9053 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tbEl8qJbGfd7d/xDcY7GcciU0zNpWRs0sVzTagjOTy/m4TQJe2jt4nn224N4BWd2n+Xthma1/PrBozr/OD3i47C8QbauqE+MfcW5r4FSEGP6c2Y+0czE1cQrOyGfS/1dQFkSgWstk6PQrMysyASQ3cB0XMxTpuleUjoTm9+vjoqdVobjtuYnIXlrHRz97R4Ovqv10L9awAGQ/DW/JSvAVa4U4vq0IaWFStBYgj4F55xIHZwQvyYPhRTbnJVQ4TDZNqLvC/q8KoUxyR1aZHGuvEWFy0whXwx550WgUHwr3Dci+QCl4JvzYJiHDN9LWbSmGuRaCDVE5JbrL54PzcsLvK61njO5kh79yLy3DPNFpKi3rexM+sFekeGI9lTg6GhunDSeUrIZDgoV2BtNCyQRIekGwUicQ4ldabfovkSQtFImpAxHCN1dNVx+L0oqYZTQ5wDjr2O8Z49pRmhhiAE2db04B+oP4mcaQ1xOPUOVHCreYY4S1bW3kKDPGfKQOwJPuADeZOeWLfwACa01iZmpPpAclPexeALe/lpLxPMPeX+f7b7VLnL63CRnhh8AAIjoah8FSY8hXL/DErzG9B+nOp6QzVd374iCHO5wIoYNBKek8J5weJedtrYurdUNUVP4Lkr9pM8sGOJq4rm2gkhI0Y8yIQHKNrYCZN6M6p/b6kiK4ifXvsV3/QneTOptI4fZMqXAquGSW09rQQS6xxgtqx5RTDGOSDQDwypnFzYX4Lmk3AOmGqwjU8iJCpBAwgwZVuvEXUxTYzOCRV66qv606A== 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)(39860400002)(376002)(136003)(346002)(396003)(230922051799003)(64100799003)(82310400011)(451199024)(1800799009)(186009)(40470700004)(46966006)(36840700001)(6666004)(40460700003)(36860700001)(54906003)(8936002)(70206006)(316002)(70586007)(110136005)(356005)(478600001)(81166007)(1076003)(82740400003)(2616005)(26005)(7696005)(16526019)(8676002)(47076005)(83380400001)(4326008)(426003)(336012)(40480700001)(30864003)(2906002)(5660300002)(36756003)(86362001)(41300700001)(44832011)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 20:57:52.4163 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5d24626f-0eb7-415b-7f98-08dbce8a9053 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: CY4PEPF0000E9D0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7573 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 optional support for inline event processing within pmd dequeue call. For a dequeue callback, events dequeued from the event port were passed them to a callback function if configured, to allow additional processing. e.g. unpack batch of packets from each event on dequeue, before passing back to the application. Signed-off-by: Sivaprasad Tummala --- lib/eventdev/eventdev_pmd.h | 38 +++++++++++ lib/eventdev/eventdev_private.c | 2 + lib/eventdev/rte_eventdev.c | 107 +++++++++++++++++++++++++++++++ lib/eventdev/rte_eventdev.h | 95 +++++++++++++++++++++++++++ lib/eventdev/rte_eventdev_core.h | 12 +++- lib/eventdev/version.map | 3 + 6 files changed, 256 insertions(+), 1 deletion(-) diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index a0ee768ce7..ce067b1d5d 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -97,6 +97,19 @@ struct rte_eventdev_global { uint8_t nb_devs; /**< Number of devices found */ }; +/** + * @internal + * Structure used to hold information about the callbacks to be called for a + * port on dequeue. + */ +struct rte_event_dequeue_callback { + struct rte_event_dequeue_callback *next; + union{ + rte_dequeue_callback_fn dequeue; + } fn; + void *param; +}; + /** * @internal * The data part, with no function pointers, associated with each device. @@ -171,6 +184,10 @@ struct rte_eventdev { /**< Pointer to PMD dequeue burst function. */ event_maintain_t maintain; /**< Pointer to PMD port maintenance function. */ + struct rte_event_dequeue_callback *post_dequeue_burst_cbs[RTE_EVENT_MAX_PORTS_PER_DEV]; + /**< User-supplied functions called from dequeue_burst to post-process + * received packets before passing them to the user + */ event_tx_adapter_enqueue_t txa_enqueue_same_dest; /**< Pointer to PMD eth Tx adapter burst enqueue function with * events destined to same Eth port & Tx queue. @@ -245,6 +262,27 @@ rte_event_pmd_is_valid_dev(uint8_t dev_id) return 1; } +/** + * Executes all the user application registered callbacks for the specific + * event device. + * + * @param dev_id + * Event device index. + * @param port_id + * Event port index + * @param ev + * Points to an array of *nb_events* objects of type *rte_event* structure + * for output to be populated with the dequeued event objects. + * @param nb_events + * number of event objects + * + * @return + * The number of event objects + */ +__rte_internal +uint16_t rte_eventdev_pmd_dequeue_callback_process(uint8_t dev_id, + uint8_t port_id, struct rte_event ev[], uint16_t nb_events); + /** * Definitions of all functions exported by a driver through the * generic structure of type *event_dev_ops* supplied in the diff --git a/lib/eventdev/eventdev_private.c b/lib/eventdev/eventdev_private.c index 017f97ccab..052c526ce0 100644 --- a/lib/eventdev/eventdev_private.c +++ b/lib/eventdev/eventdev_private.c @@ -137,4 +137,6 @@ event_dev_fp_ops_set(struct rte_event_fp_ops *fp_op, fp_op->dma_enqueue = dev->dma_enqueue; fp_op->profile_switch = dev->profile_switch; fp_op->data = dev->data->ports; + fp_op->ev_port.clbk = (void **)(uintptr_t)dev->post_dequeue_burst_cbs; + fp_op->ev_port.data = dev->data->ports; } diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c index 5feb4326a2..f2540a6aa8 100644 --- a/lib/eventdev/rte_eventdev.c +++ b/lib/eventdev/rte_eventdev.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,9 @@ static struct rte_eventdev_global eventdev_globals = { /* Public fastpath APIs. */ struct rte_event_fp_ops rte_event_fp_ops[RTE_EVENT_MAX_DEVS]; +/* spinlock for add/remove dequeue callbacks */ +static rte_spinlock_t event_dev_dequeue_cb_lock = RTE_SPINLOCK_INITIALIZER; + /* Event dev north bound API implementation */ uint8_t @@ -884,6 +888,109 @@ rte_event_port_attr_get(uint8_t dev_id, uint8_t port_id, uint32_t attr_id, return 0; } +const struct rte_event_dequeue_callback * +rte_event_add_dequeue_callback(uint8_t dev_id, uint8_t port_id, + rte_dequeue_callback_fn fn, void *user_param) +{ + struct rte_eventdev *dev; + struct rte_event_dequeue_callback *cb; + struct rte_event_dequeue_callback *tail; + + /* check input parameters */ + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, NULL); + dev = &rte_eventdevs[dev_id]; + if (!is_valid_port(dev, port_id)) { + RTE_EDEV_LOG_ERR("Invalid port_id=%" PRIu8, port_id); + return NULL; + } + + cb = rte_zmalloc(NULL, sizeof(*cb), 0); + if (cb == NULL) { + rte_errno = ENOMEM; + return NULL; + } + cb->fn.dequeue = fn; + cb->param = user_param; + + rte_spinlock_lock(&event_dev_dequeue_cb_lock); + /* Add the callbacks in fifo order. */ + tail = rte_eventdevs[dev_id].post_dequeue_burst_cbs[port_id]; + if (!tail) { + /* Stores to cb->fn and cb->param should complete before + * cb is visible to data plane. + */ + rte_atomic_store_explicit( + &rte_eventdevs[dev_id].post_dequeue_burst_cbs[port_id], + cb, __ATOMIC_RELEASE); + } else { + while (tail->next) + tail = tail->next; + /* Stores to cb->fn and cb->param should complete before + * cb is visible to data plane. + */ + rte_atomic_store_explicit(&tail->next, cb, __ATOMIC_RELEASE); + } + rte_spinlock_unlock(&event_dev_dequeue_cb_lock); + + return cb; +} + +int +rte_event_remove_dequeue_callback(uint8_t dev_id, uint8_t port_id, + const struct rte_event_dequeue_callback *user_cb) +{ + struct rte_eventdev *dev; + struct rte_event_dequeue_callback *cb; + struct rte_event_dequeue_callback **prev_cb; + + /* Check input parameters. */ + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); + dev = &rte_eventdevs[dev_id]; + if (user_cb == NULL || !is_valid_port(dev, port_id)) + return -EINVAL; + + rte_spinlock_lock(&event_dev_dequeue_cb_lock); + prev_cb = &dev->post_dequeue_burst_cbs[port_id]; + for (; *prev_cb != NULL; prev_cb = &cb->next) { + cb = *prev_cb; + if (cb == user_cb) { + /* Remove the user cb from the callback list. */ + rte_atomic_store_explicit(prev_cb, cb->next, + __ATOMIC_RELAXED); + break; + } + } + rte_spinlock_unlock(&event_dev_dequeue_cb_lock); + + return 0; +} + +uint16_t rte_eventdev_pmd_dequeue_callback_process(uint8_t dev_id, + uint8_t port_id, struct rte_event ev[], uint16_t nb_events) +{ + struct rte_event_dequeue_callback *cb; + const struct rte_event_fp_ops *fp_ops; + + fp_ops = &rte_event_fp_ops[dev_id]; + + /* __ATOMIC_RELEASE memory order was used when the + * call back was inserted into the list. + * Since there is a clear dependency between loading + * cb and cb->fn/cb->next, __ATOMIC_ACQUIRE memory order is + * not required. + */ + cb = rte_atomic_load_explicit((void **)&fp_ops->ev_port.clbk[port_id], + __ATOMIC_RELAXED); + if (unlikely(cb != NULL)) + while (cb != NULL) { + nb_events = cb->fn.dequeue(dev_id, port_id, ev, + nb_events, cb->param); + cb = cb->next; + } + + return nb_events; +} + int rte_event_port_get_monitor_addr(uint8_t dev_id, uint8_t port_id, struct rte_power_monitor_cond *pmc) diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h index 38dbbc2617..c0097c0a23 100644 --- a/lib/eventdev/rte_eventdev.h +++ b/lib/eventdev/rte_eventdev.h @@ -954,6 +954,101 @@ void rte_event_port_quiesce(uint8_t dev_id, uint8_t port_id, rte_eventdev_port_flush_t release_cb, void *args); +struct rte_event_dequeue_callback; + +/** + * Function type used for dequeue event processing callbacks. + * + * The callback function is called on dequeue with a burst of events that have + * been received on the given event port. + * + * @param dev_id + * The identifier of the device. + * @param port_id + * The identifier of the event port. + * @param[out] ev + * Points to an array of *nb_events* objects of type *rte_event* structure + * for output to be populated with the dequeued event objects. + * @param nb_events + * The maximum number of event objects to dequeue, typically number of + * rte_event_port_dequeue_depth() available for this port. + * @param opaque + * Opaque pointer of event port callback related data. + * + * @return + * The number of event objects returned to the user. + */ +typedef uint16_t (*rte_dequeue_callback_fn)(uint8_t dev_id, uint8_t port_id, + struct rte_event *ev, uint16_t nb_events, void *user_param); + +/** + * Add a callback to be called on event dequeue on a given event device port. + * + * This API configures a function to be called for each burst of + * events dequeued on a given event device port. The return value is a pointer + * that can be used to later remove the callback using + * rte_event_remove_dequeue_callback(). + * + * Multiple functions are called in the order that they are added. + * + * @param dev_id + * The identifier of the device. + * @param port_id + * The identifier of the event port. + * @param fn + * The callback function + * @param user_param + * A generic pointer parameter which will be passed to each invocation of the + * callback function on this event device port. Inter-thread synchronization + * of any user data changes is the responsibility of the user. + * + * @return + * NULL on error. + * On success, a pointer value which can later be used to remove the callback. + */ +__rte_experimental +const struct rte_event_dequeue_callback * +rte_event_add_dequeue_callback(uint8_t dev_id, uint8_t port_id, + rte_dequeue_callback_fn fn, void *user_param); + +/** + * Remove a dequeue event callback from a given event device port. + * + * This API is used to removed callbacks that were added to a event device port + * using rte_event_add_dequeue_callback(). + * + * Note: the callback is removed from the callback list but it isn't freed + * since the it may still be in use. The memory for the callback can be + * subsequently freed back by the application by calling rte_free(): + * + * - Immediately - if the device is stopped, or the user knows that no + * callbacks are in flight e.g. if called from the thread doing dequeue + * on that port. + * + * - After a short delay - where the delay is sufficient to allow any + * in-flight callbacks to complete. Alternately, the RCU mechanism can be + * used to detect when data plane threads have ceased referencing the + * callback memory. + * + * @param dev_id + * The identifier of the device. + * @param port_id + * The identifier of the event port. + * @param user_cb + * The callback function + * + * @return + * - 0: Success. Callback was removed. + * - -ENODEV: If *dev_id* is invalid. + * - -EINVAL: The port_id is out of range, or the callback + * is NULL. + */ +__rte_experimental +int +rte_event_remove_dequeue_callback(uint8_t dev_id, uint8_t port_id, + const struct rte_event_dequeue_callback *user_cb); + + /** * The queue depth of the port on the enqueue side */ diff --git a/lib/eventdev/rte_eventdev_core.h b/lib/eventdev/rte_eventdev_core.h index 5b405518d1..5ce93c4b6f 100644 --- a/lib/eventdev/rte_eventdev_core.h +++ b/lib/eventdev/rte_eventdev_core.h @@ -49,6 +49,14 @@ typedef uint16_t (*event_dma_adapter_enqueue_t)(void *port, struct rte_event ev[ typedef int (*event_profile_switch_t)(void *port, uint8_t profile); /**< @internal Switch active link profile on the event port. */ +struct rte_eventdev_port_data { + void **data; + /**< points to array of internal port data pointers */ + void **clbk; + /**< points to array of port callback data pointers */ +}; +/**< @internal Structure used to hold opaque eventdev port data. */ + struct rte_event_fp_ops { void **data; /**< points to array of internal port data pointers */ @@ -76,7 +84,9 @@ struct rte_event_fp_ops { /**< PMD DMA adapter enqueue function. */ event_profile_switch_t profile_switch; /**< PMD Event switch profile function. */ - uintptr_t reserved[4]; + struct rte_eventdev_port_data ev_port; + /**< Eventdev port data. */ + uintptr_t reserved[1]; } __rte_cache_aligned; extern struct rte_event_fp_ops rte_event_fp_ops[RTE_EVENT_MAX_DEVS]; diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index fa9eb069ff..a0c7aa5bbd 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -155,6 +155,8 @@ EXPERIMENTAL { rte_event_port_profile_unlink; rte_event_port_profile_links_get; rte_event_port_get_monitor_addr; + rte_event_add_dequeue_callback; + rte_event_remove_dequeue_callback; __rte_eventdev_trace_port_profile_switch; }; @@ -165,6 +167,7 @@ INTERNAL { event_dev_fp_ops_set; event_dev_probing_finish; rte_event_pmd_allocate; + rte_eventdev_pmd_dequeue_callback_process; rte_event_pmd_get_named_dev; rte_event_pmd_is_valid_dev; rte_event_pmd_pci_probe; From patchwork Mon Oct 16 20:57:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sivaprasad Tummala X-Patchwork-Id: 132657 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 69B8943182; Mon, 16 Oct 2023 22:58:00 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 53F1E40A7F; Mon, 16 Oct 2023 22:57:56 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2082.outbound.protection.outlook.com [40.107.223.82]) by mails.dpdk.org (Postfix) with ESMTP id 9FE95400D6 for ; Mon, 16 Oct 2023 22:57:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f5gRpB0UaI1MlVzTqgfsBusmsxATzFaTERssmStXsVUpfgzBiYoiCs4uYjL1IRAI1Ia+sg2msFhi2prSXdP3S540gGFhpfq/SnH6tngJNDAvEvDmXuSjVDgfyL2crgmz9AV2Jc6a0XmlctVHISyyED8+LfHSaCxyNPzTQmV+Y4BClhfJhCm7ibe8bK+3uSUEa6b2CitC9Vx7IkYUS1/ekl5RBaFdSr7ozBLZTaPPz9jRkrdEo/v37EhuWleEHnKrCQKoNXpqUi0RfCWG/u/g+OvXTtczNgpLRyJ5XP5hLewUVZXYilfHfeOofrccdv71W7SZ1L4BLyhc8BdGZYaw2w== 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=fKqnK76EMXyrVxqHam5iowHfN1mwxN03aBh8ezZ9jZY=; b=ZCqPv9nq82qNq38iwe8yVm7iASH1L8XJK7liaCZXhqRraOc55ga9fJVp03opDQg9WwAeyeT2DOMnJDFXvz3BCGj8FotoJpU+UOYQO70DE8k7JRBasmOWh9b+Wchjk1jxwGVYz3nVInS0lQhH0gJCaYjdRO99cHlD1Gb0j3E0/G9M/ydl+TImEr7cRBcmXz4AWg4j2j0aozXP1dsYnFDJIV5NP0kosjQ+d9LtiYVGMbcMoKPGZhn/C/2KbDG0lubTxuqEYJqiNqCIJ+iDBNvSASi55elJm6M5beMu14dMDz5Kxz/1rQzu8batqayB0gS42g6tj7bfCELP6yizQcpbTQ== 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=fKqnK76EMXyrVxqHam5iowHfN1mwxN03aBh8ezZ9jZY=; b=ecz1AclummeMke8Xvvu0bEcte0aih9aL6BizTP9/JC917WTTye73Z+YNhBbzNdsd23gafET5fDzpnsbTNpyvCi2wFaMWv4kQRtgJbmDCufOpoL7YNmsyuZc+dLuzWcsPou72fAbexpp8Fr6jGxGrRlp4GPqUA6k81X5DqTJTW2A= Received: from CYZPR14CA0043.namprd14.prod.outlook.com (2603:10b6:930:a0::6) by CY5PR12MB6528.namprd12.prod.outlook.com (2603:10b6:930:43::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.45; Mon, 16 Oct 2023 20:57:53 +0000 Received: from CY4PEPF0000E9D0.namprd03.prod.outlook.com (2603:10b6:930:a0:cafe::5a) by CYZPR14CA0043.outlook.office365.com (2603:10b6:930:a0::6) 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:53 +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 CY4PEPF0000E9D0.mail.protection.outlook.com (10.167.241.143) 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:52 +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:51 -0500 From: Sivaprasad Tummala To: , , CC: , , Subject: [PATCH v1 4/6] event/sw: support optional dequeue callbacks Date: Mon, 16 Oct 2023 13:57:13 -0700 Message-ID: <20231016205715.970999-4-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: CY4PEPF0000E9D0:EE_|CY5PR12MB6528:EE_ X-MS-Office365-Filtering-Correlation-Id: 009e4649-e57e-4ef5-6944-08dbce8a909d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: buKEgz/nDn5ewHU52gw/7bX+R+YfS6Z5k5yHgvHyHmWlLGtNfVUA496xd2BszcDub2/wazalZ7d0wk85Rkl3mIyUStKybnPnyZsYa30n6OYqjMkus4auuK2e032/9ty4DUgy0DI7++tNRllT0tfFb3PDQADnQpxTVgFQaSb3bHwOq6R3Vt5Qfd3s8OlN4k8AwkYO1LuoNCVhOPeY38kpHbiYVRVDuOLfVNOhs5j2k/cBq05Uavw/x2N/aaqR4ZHlIZFP4aReL6Rva38mzf2EMc+8Xejw8KZbeZjsA1F3ugVGt4wdAosliEEWd5zjxyt95EnkYdIZU1ga0QBRfNhSjx169DkinVFhbTPG+MPPAQxz56VswbfcwXJl97kdP+4NYrmGQ+H21Afs2z2oMP6U+eQ/MbOq3EHtK/awBW3MPpzvpu7BpLfEXvH//z2g6ysmYFu4IGDbN9OFP5STTchYay5xaIzy7LHsTYpBgPPlvkNah4hU7xYgy7xRpNOp9M/QXHjgDx+MrZ8kZgJu3OQo1qgEtQrNgSe3kYj9LeIFydxzzFcXfpXn4XSYn/wB1bipJu6g2rUcSpNaLqaOPPdSJv4zBQErBco55VNUUtvH7AehUAI3WflXIwvTDDaTz+FUpnFdFz8/c2t/fJYO4hMPox0knwsGAsMkwdm2AvkDMFSx+kYtChMVtCFZQUujp8FTAZB52UiycO+DSi3IVM7Ceg7BCtPOPWPFMYu53SpI+bZ+76rOkNHZmP5c0pvh2PrfaPpDzNfMsImw7Prmi/9H9g== 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)(396003)(376002)(136003)(39860400002)(346002)(230922051799003)(82310400011)(186009)(64100799003)(1800799009)(451199024)(40470700004)(36840700001)(46966006)(16526019)(26005)(47076005)(336012)(426003)(82740400003)(44832011)(36756003)(70586007)(40480700001)(7696005)(70206006)(316002)(110136005)(54906003)(356005)(1076003)(86362001)(81166007)(2616005)(36860700001)(40460700003)(6666004)(2906002)(478600001)(5660300002)(8676002)(4326008)(8936002)(41300700001)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 20:57:52.8069 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 009e4649-e57e-4ef5-6944-08dbce8a909d 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: CY4PEPF0000E9D0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6528 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 This patch adds support for an event dequeue callbacks when configured to allow additional processing, power management (frequency scaling, monitor/sleep etc.,) and soon. Signed-off-by: Sivaprasad Tummala --- config/rte_config.h | 3 +++ drivers/event/sw/sw_evdev_worker.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/config/rte_config.h b/config/rte_config.h index 9036214013..b05a86a267 100644 --- a/config/rte_config.h +++ b/config/rte_config.h @@ -135,4 +135,7 @@ /* DLB2 defines */ // RTE_LIBRTE_PMD_DLB2_QUELL_STATS is not set +/* Event/SW defines */ +#define RTE_EVENT_SW_DEQ_CALLBACKS 1 + #endif /* _RTE_CONFIG_H_ */ diff --git a/drivers/event/sw/sw_evdev_worker.c b/drivers/event/sw/sw_evdev_worker.c index 139c98cfe2..3a954b2385 100644 --- a/drivers/event/sw/sw_evdev_worker.c +++ b/drivers/event/sw/sw_evdev_worker.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "sw_evdev.h" @@ -203,6 +204,10 @@ sw_event_dequeue_burst(void *port, struct rte_event *ev, uint16_t num, p->total_polls++; end: +#ifdef RTE_EVENT_SW_DEQ_CALLBACKS + ndeq = rte_eventdev_pmd_dequeue_callback_process(p->sw->data->dev_id, + p->id, ev, ndeq); +#endif return ndeq; } From patchwork Mon Oct 16 20:57:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sivaprasad Tummala X-Patchwork-Id: 132659 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 7390C43182; Mon, 16 Oct 2023 22:58:14 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B134240E64; Mon, 16 Oct 2023 22:57:58 +0200 (CEST) Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2057.outbound.protection.outlook.com [40.107.102.57]) by mails.dpdk.org (Postfix) with ESMTP id 9CE4040A8B for ; Mon, 16 Oct 2023 22:57:56 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=en9NVbZVtyI1CL1O7rJHYoYYKqkKRe1RAUGo6TfdsdrsM3YnsCblTJoz10jVTyTAy1JbwkqHr1Kbv1IvPCbBY0YmqwpZzGW2aof+19UQfsLKq5FJFvaN5zDEHpo3bgpoLKgeLabsJSZNWYMzYRXHjFJKctUz9oDK+4NsENxUSlDziPbWQmyRqwvL3jJaUkBJlLnBhmNlDKK6sKmb60nHMBt4kIgvkKnZD4NDyGeR96US66wJwgTz8vNY3lNHwau2KDDFQTL0joaLplz3KZ4NCR5djjFyBD3TSYbaxwLzlkzVKZNS9zK2hGSuFUkQcr+tjh97ZR3sx1/QTnA/vpZzww== 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=Rzh57Ta9gQEs5xUmO3JDHzxWv92pWEkuYVbXwPSve6A=; b=h7VhY+vjSXbymv/CsI9KuVFGQSGILhFv65fMianWXCLYYPpyw/M19B25H4s95mqfQJSENoyX0QCioPceeKwT5lE+GPYCBcwryAOY+g+sXq8BLvyZf9idyGRO++k/M+mqRXtpAECxxmhJZiG+4QRp4c6EOcTMEpUF/yxRzFhRGSWusAU4273qjP3FZXIXXfUo5phu0ul+3bvE/P3TyW/hMm9q8eQHvoXB87c4sxNhI8iV8psxJHUl/GJoYtpKSJJog3AyAPnSFSQWLbsCxey+QrcuR5eH0/x21fg0CR21vUGAzVcwxCivig7hLkV5xij4pg6g63gPecH+Raq4NuaXUQ== 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=Rzh57Ta9gQEs5xUmO3JDHzxWv92pWEkuYVbXwPSve6A=; b=jBfPdWCud8zSJJXkKvue3su+2hojsRBExQyXjV7QBGDAx9yAh562DuT4DF+2VravH6fDhXBJuXjRIAmP6wI+P5+WVZGsbAJqZDjIhL+AY6Kqn/wmPr4CRhDqKZbbnDROdek5JDyZldr/BsVe1V4f62w9BasPdkNWXqWkbIGQ2C0= Received: from CYZPR14CA0039.namprd14.prod.outlook.com (2603:10b6:930:a0::12) by BY5PR12MB4853.namprd12.prod.outlook.com (2603:10b6:a03:1da::18) 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:54 +0000 Received: from CY4PEPF0000E9D0.namprd03.prod.outlook.com (2603:10b6:930:a0:cafe::dd) by CYZPR14CA0039.outlook.office365.com (2603:10b6:930:a0::12) 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:54 +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 CY4PEPF0000E9D0.mail.protection.outlook.com (10.167.241.143) 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:52 -0500 From: Sivaprasad Tummala To: , , CC: , , Subject: [PATCH v1 5/6] power: add eventdev support for power management Date: Mon, 16 Oct 2023 13:57:14 -0700 Message-ID: <20231016205715.970999-5-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: CY4PEPF0000E9D0:EE_|BY5PR12MB4853:EE_ X-MS-Office365-Filtering-Correlation-Id: 28ee3f74-4a37-49f8-3953-08dbce8a9150 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DenBPTbwOStVhmcG7aLdHE+lgDIm4kHR8sihSuocU+KdR+2CGB4AQHhPI8YC0hHm1xYrFJaQsS2RudMKt8akCmIzC3YN+9qxta4hUELOz1xBwUXR5COwHtBWbHTyDQJH1K/bPVo3TnKSUukBwSdHxrOy7Xi9tdsBPTCq9yZsCaPHU62hqlXxwQ6DrGM65D11Uuwa/oXX7AdrfHagwBQkTn6TlwcNgTtasYZsmmLJAwBah4SnpnBD6qZqMuwH6jo1u86RtdgMzAyfdhtHMQjzHIsKmfIsgQ3ymPSD/dCZltKcLO78eHwnJ/DLOo2ReG0PMzPKLgzO9xGkHmMvWfNI1Z7nEcJAUFCEr9LZJ0F5aG1jXTfUObIndqMsEl280KBzSWuGzsnKZC2HTbW6YsGHBNtFGgWqn6Ce4TQh5Setj/WrAGvqv0CUdkF0kaVzh54ZyZ2TXFSLRnPF/5lxaNUjNEaW8ttr/UXLB5qsU0LfMAp09rdy/LFb7vORFMHQWyqASt5qw/NZWGytutGY8xKpF6OgfZV06ef1LYsesnFq6SHrJwfxMCaZrujwo/+xo8McBK40FZ0sNAs0pl9Tue7ex5pyiDn9BkKio3tVUuVIEYucgsrTfzq5QPIkeqLVCAOk4eURmN/42cqlQ6oKmAm/zaXpEDZ0BBCzUHtzGXt9Es5PD/8nmVv39/lQnH8iciFuAr+pSn+WicTUCvnFnYJVSYYugLN7n/rhBWQzkjeeAIekh7AwYrg2N0PPKYIRMaztd+bQaQE3jdIMxGV/MQ8h6Q== 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)(39860400002)(376002)(136003)(346002)(396003)(230922051799003)(64100799003)(82310400011)(186009)(1800799009)(451199024)(40470700004)(46966006)(36840700001)(110136005)(478600001)(7696005)(6666004)(82740400003)(356005)(81166007)(36756003)(86362001)(1076003)(40460700003)(16526019)(2616005)(426003)(26005)(36860700001)(83380400001)(5660300002)(316002)(54906003)(70206006)(70586007)(41300700001)(336012)(8936002)(8676002)(4326008)(30864003)(2906002)(40480700001)(47076005)(44832011)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 20:57:54.0725 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 28ee3f74-4a37-49f8-3953-08dbce8a9150 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: CY4PEPF0000E9D0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4853 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 eventdev support to enable power saving when no events are arriving. It is based on counting the number of empty polls and, when the number reaches a certain threshold, entering an architecture-defined optimized power state that will either wait until a TSC timestamp expires, or when events arrive. This API mandates a core-to-single-port mapping (i.e. one core polling multiple ports of event device is not supported). This should be ok as the general use case will have one CPU core using one port to enqueue/dequeue events from an eventdev. This design is using Eventdev PMD Dequeue callbacks. 1. MWAITX/MONITORX: When a certain threshold of empty polls is reached, the core will go into a power optimized sleep while waiting on an address of next RX descriptor to be written to. 2. Pause instruction This method uses the pause instruction to avoid busy polling. Signed-off-by: Sivaprasad Tummala --- lib/power/meson.build | 2 +- lib/power/rte_power_pmd_mgmt.c | 226 +++++++++++++++++++++++++++++++++ lib/power/rte_power_pmd_mgmt.h | 55 ++++++++ lib/power/version.map | 4 + 4 files changed, 286 insertions(+), 1 deletion(-) diff --git a/lib/power/meson.build b/lib/power/meson.build index 056d0043d8..86e178bbb4 100644 --- a/lib/power/meson.build +++ b/lib/power/meson.build @@ -32,4 +32,4 @@ headers = files( if cc.has_argument('-Wno-cast-qual') cflags += '-Wno-cast-qual' endif -deps += ['timer', 'ethdev'] +deps += ['timer', 'ethdev', 'eventdev'] diff --git a/lib/power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c index 38f8384085..df3ac2d221 100644 --- a/lib/power/rte_power_pmd_mgmt.c +++ b/lib/power/rte_power_pmd_mgmt.c @@ -9,8 +9,10 @@ #include #include #include +#include #include +#include #include "rte_power_pmd_mgmt.h" #include "power_common.h" @@ -53,6 +55,7 @@ struct queue_list_entry { uint64_t n_empty_polls; uint64_t n_sleeps; const struct rte_eth_rxtx_callback *cb; + const struct rte_event_dequeue_callback *evt_cb; }; struct pmd_core_cfg { @@ -414,6 +417,64 @@ cfg_queues_stopped(struct pmd_core_cfg *queue_cfg) return 1; } +static uint16_t +evt_clb_umwait(uint8_t dev_id, uint8_t port_id, struct rte_event *ev __rte_unused, + uint16_t nb_events, void *arg) +{ + struct queue_list_entry *queue_conf = arg; + + /* this callback can't do more than one queue, omit multiqueue logic */ + if (unlikely(nb_events == 0)) { + queue_conf->n_empty_polls++; + if (unlikely(queue_conf->n_empty_polls > emptypoll_max)) { + struct rte_power_monitor_cond pmc; + int ret; + + /* use monitoring condition to sleep */ + ret = rte_event_port_get_monitor_addr(dev_id, port_id, + &pmc); + if (ret == 0) + rte_power_monitor(&pmc, UINT64_MAX); + } + } else + queue_conf->n_empty_polls = 0; + + return nb_events; +} + +static uint16_t +evt_clb_pause(uint8_t dev_id __rte_unused, uint8_t port_id __rte_unused, + struct rte_event *ev __rte_unused, + uint16_t nb_events, void *arg) +{ + const unsigned int lcore = rte_lcore_id(); + struct queue_list_entry *queue_conf = arg; + struct pmd_core_cfg *lcore_conf; + const bool empty = nb_events == 0; + uint32_t pause_duration = rte_power_pmd_mgmt_get_pause_duration(); + + lcore_conf = &lcore_cfgs[lcore]; + + if (likely(!empty)) + /* early exit */ + queue_reset(lcore_conf, queue_conf); + else { + /* can this queue sleep? */ + if (!queue_can_sleep(lcore_conf, queue_conf)) + return nb_events; + + /* can this lcore sleep? */ + if (!lcore_can_sleep(lcore_conf)) + return nb_events; + + uint64_t i; + for (i = 0; i < global_data.pause_per_us * pause_duration; i++) + rte_pause(); + } + + return nb_events; +} + static int check_scale(unsigned int lcore) { @@ -481,6 +542,171 @@ get_monitor_callback(void) clb_multiwait : clb_umwait; } +static int +check_evt_monitor(struct pmd_core_cfg *cfg __rte_unused, + const union queue *qdata) +{ + struct rte_power_monitor_cond dummy; + + /* check if rte_power_monitor is supported */ + if (!global_data.intrinsics_support.power_monitor) { + RTE_LOG(DEBUG, POWER, "Monitoring intrinsics are not supported\n"); + return -ENOTSUP; + } + + /* check if the device supports the necessary PMD API */ + if (rte_event_port_get_monitor_addr((uint8_t)qdata->portid, (uint8_t)qdata->qid, + &dummy) == -ENOTSUP) { + RTE_LOG(DEBUG, POWER, "event port does not support rte_event_get_monitor_addr\n"); + return -ENOTSUP; + } + + /* we're done */ + return 0; +} + +int +rte_power_eventdev_pmgmt_port_enable(unsigned int lcore_id, uint8_t dev_id, + uint8_t port_id, enum rte_power_pmd_mgmt_type mode) +{ + const union queue qdata = {.portid = dev_id, .qid = port_id}; + struct pmd_core_cfg *lcore_cfg; + struct queue_list_entry *queue_cfg; + struct rte_event_dev_info info; + rte_dequeue_callback_fn clb; + int ret; + + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); + + if (lcore_id >= RTE_MAX_LCORE) { + ret = -EINVAL; + goto end; + } + + if (rte_event_dev_info_get(dev_id, &info) < 0) { + ret = -EINVAL; + goto end; + } + + /* check if queue id is valid */ + if (port_id >= info.max_event_ports) { + ret = -EINVAL; + goto end; + } + + lcore_cfg = &lcore_cfgs[lcore_id]; + + /* if callback was already enabled, check current callback type */ + if (lcore_cfg->pwr_mgmt_state != PMD_MGMT_DISABLED && + lcore_cfg->cb_mode != mode) { + ret = -EINVAL; + goto end; + } + + /* we need this in various places */ + rte_cpu_get_intrinsics_support(&global_data.intrinsics_support); + + switch (mode) { + case RTE_POWER_MGMT_TYPE_MONITOR: + /* check if we can add a new port */ + ret = check_evt_monitor(lcore_cfg, &qdata); + if (ret < 0) + goto end; + + clb = evt_clb_umwait; + break; + case RTE_POWER_MGMT_TYPE_PAUSE: + /* figure out various time-to-tsc conversions */ + if (global_data.tsc_per_us == 0) + calc_tsc(); + + clb = evt_clb_pause; + break; + default: + RTE_LOG(DEBUG, POWER, "Invalid power management type\n"); + ret = -EINVAL; + goto end; + } + /* add this queue to the list */ + ret = queue_list_add(lcore_cfg, &qdata); + if (ret < 0) { + RTE_LOG(DEBUG, POWER, "Failed to add queue to list: %s\n", + strerror(-ret)); + goto end; + } + /* new queue is always added last */ + queue_cfg = TAILQ_LAST(&lcore_cfg->head, queue_list_head); + + /* when enabling first queue, ensure sleep target is not 0 */ + if (lcore_cfg->n_queues == 1 && lcore_cfg->sleep_target == 0) + lcore_cfg->sleep_target = 1; + + /* initialize data before enabling the callback */ + if (lcore_cfg->n_queues == 1) { + lcore_cfg->cb_mode = mode; + lcore_cfg->pwr_mgmt_state = PMD_MGMT_ENABLED; + } + queue_cfg->evt_cb = rte_event_add_dequeue_callback(dev_id, port_id, + clb, queue_cfg); + + ret = 0; +end: + return ret; +} + +int +rte_power_eventdev_pmgmt_port_disable(unsigned int lcore_id, + uint8_t dev_id, uint8_t port_id) +{ + const union queue qdata = {.portid = dev_id, .qid = port_id}; + struct pmd_core_cfg *lcore_cfg; + struct queue_list_entry *queue_cfg; + + RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL); + + if (lcore_id >= RTE_MAX_LCORE) + return -EINVAL; + + /* no need to check queue id as wrong queue id would not be enabled */ + lcore_cfg = &lcore_cfgs[lcore_id]; + + if (lcore_cfg->pwr_mgmt_state != PMD_MGMT_ENABLED) + return -EINVAL; + + /* + * There is no good/easy way to do this without race conditions, so we + * are just going to throw our hands in the air and hope that the user + * has read the documentation and has ensured that ports are stopped at + * the time we enter the API functions. + */ + queue_cfg = queue_list_take(lcore_cfg, &qdata); + if (queue_cfg == NULL) + return -ENOENT; + + /* if we've removed all queues from the lists, set state to disabled */ + if (lcore_cfg->n_queues == 0) + lcore_cfg->pwr_mgmt_state = PMD_MGMT_DISABLED; + + switch (lcore_cfg->cb_mode) { + case RTE_POWER_MGMT_TYPE_MONITOR: /* fall-through */ + case RTE_POWER_MGMT_TYPE_SCALE: + case RTE_POWER_MGMT_TYPE_PAUSE: + rte_event_remove_dequeue_callback(dev_id, port_id, + queue_cfg->evt_cb); + break; + } + /* + * the API doc mandates that the user stops all processing on affected + * ports before calling any of these API's, so we can assume that the + * callbacks can be freed. we're intentionally casting away const-ness. + */ + rte_free((void *)queue_cfg->evt_cb); + free(queue_cfg); + + return 0; +} + + int rte_power_ethdev_pmgmt_queue_enable(unsigned int lcore_id, uint16_t port_id, uint16_t queue_id, enum rte_power_pmd_mgmt_type mode) diff --git a/lib/power/rte_power_pmd_mgmt.h b/lib/power/rte_power_pmd_mgmt.h index 0f1a2eb22e..e1966b9777 100644 --- a/lib/power/rte_power_pmd_mgmt.h +++ b/lib/power/rte_power_pmd_mgmt.h @@ -87,6 +87,61 @@ int rte_power_ethdev_pmgmt_queue_disable(unsigned int lcore_id, uint16_t port_id, uint16_t queue_id); +/** + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice. + * + * Enable power management on a specified Event device port and lcore. + * + * @note This function is not thread-safe. + * + * @warning This function must be called when the event device stopped and + * no enqueue/dequeue is in progress! + * + * @param lcore_id + * The lcore the event port will be polled from. + * @param dev_id + * The identifier of the device. + * @param port_id + * Event port identifier of the Event device. + * @param mode + * The power management scheme to use for specified event port. + * @return + * 0 on success + * <0 on error + */ +__rte_experimental +int +rte_power_eventdev_pmgmt_port_enable(unsigned int lcore_id, + uint8_t dev_id, uint8_t port_id, + enum rte_power_pmd_mgmt_type mode); + +/** + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice. + * + * Disable power management on a specified Ethernet device Rx queue and lcore. + * + * @note This function is not thread-safe. + * + * @warning This function must be called when all affected Ethernet queues are + * stopped and no Rx/Tx is in progress! + * + * @param lcore_id + * The lcore the Rx queue is polled from. + * @param dev_id + * The identifier of the device. + * @param port_id + * Event port identifier of the Event device. + * @return + * 0 on success + * <0 on error + */ +__rte_experimental +int +rte_power_eventdev_pmgmt_port_disable(unsigned int lcore_id, + uint8_t dev_id, uint8_t port_id); + /** * @warning * @b EXPERIMENTAL: this API may change, or be removed, without prior notice. diff --git a/lib/power/version.map b/lib/power/version.map index b8b54f768e..4ab762e072 100644 --- a/lib/power/version.map +++ b/lib/power/version.map @@ -52,4 +52,8 @@ EXPERIMENTAL { rte_power_uncore_get_num_freqs; rte_power_uncore_get_num_pkgs; rte_power_uncore_init; + + # added in 23.07 + rte_power_eventdev_pmgmt_port_enable; + rte_power_eventdev_pmgmt_port_disable; }; 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