From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E187D46AA0; Mon, 30 Jun 2025 18:51:21 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 79A15402A5; Mon, 30 Jun 2025 18:51:21 +0200 (CEST) Received: from mail.lysator.liu.se (mail.lysator.liu.se [130.236.254.3]) by mails.dpdk.org (Postfix) with ESMTP id BD70F4025D for ; Mon, 30 Jun 2025 18:51:19 +0200 (CEST) Received: from mail.lysator.liu.se (localhost [127.0.0.1]) by mail.lysator.liu.se (Postfix) with ESMTP id 529D11B371 for ; Mon, 30 Jun 2025 18:51:19 +0200 (CEST) Received: by mail.lysator.liu.se (Postfix, from userid 1004) id 4637D1B2F7; Mon, 30 Jun 2025 18:51:19 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on hermod.lysator.liu.se X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=disabled version=4.0.1 X-Spam-Score: -1.0 Received: from [192.168.1.85] (h-62-63-215-114.A163.priv.bahnhof.se [62.63.215.114]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by mail.lysator.liu.se (Postfix) with ESMTPSA id A23911B405; Mon, 30 Jun 2025 18:51:16 +0200 (CEST) Message-ID: <47e87bef-a862-495c-ad96-fb82c840f443@lysator.liu.se> Date: Mon, 30 Jun 2025 18:51:16 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v1] event/dlb2: add dequeue interrupt mode support To: "Pathak, Pravin" , Jerin Jacob Cc: "dev@dpdk.org" , "jerinj@marvell.com" , "Chen, Mike Ximing" , "Richardson, Bruce" , "thomas@monjalon.net" , "Marchand, David" , "nipun.gupta@amd.com" , "chenbox@nvidia.com" , "Sarkar, Tirthendu" , Pavan Nikhilesh , Shijith Thotton , Hemant Agrawal , Sachin Saxena , "harry.chang@intel.com" , =?UTF-8?Q?Mattias_R=C3=B6nnblom?= References: <20250628045112.655999-1-pravin.pathak@intel.com> Content-Language: en-US From: =?UTF-8?Q?Mattias_R=C3=B6nnblom?= In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: ClamAV using ClamSMTP 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 On 2025-06-30 18:18, Pathak, Pravin wrote: > > >> -----Original Message----- >> From: Jerin Jacob >> Sent: Monday, June 30, 2025 7:44 AM >> To: Mattias Rönnblom >> Cc: Pathak, Pravin ; dev@dpdk.org; >> jerinj@marvell.com; Chen, Mike Ximing ; >> Richardson, Bruce ; thomas@monjalon.net; >> Marchand, David ; nipun.gupta@amd.com; >> chenbox@nvidia.com; Sarkar, Tirthendu ; Pavan >> Nikhilesh ; Shijith Thotton >> ; Hemant Agrawal ; >> Sachin Saxena ; harry.chang@intel.com; >> Mattias Rönnblom >> Subject: Re: [PATCH v1] event/dlb2: add dequeue interrupt mode support >> >> On Mon, Jun 30, 2025 at 4:47 PM Mattias Rönnblom >> wrote: >>> >>> On 2025-06-30 11:19, Jerin Jacob wrote: >>>> On Sat, Jun 28, 2025 at 11:17 AM Pravin Pathak >> wrote: >>>>> >>>>> DLB2 port interrupt is implemented using DPDK interrupt framework. >>>>> This allows eventdev dequeue API to sleep when the port queue is >>>>> empty and gets wakeup when event arrives at the port. Port dequeue >>>>> mode is configured using devargs argument port_dequeue_wait. >>>>> Supported modes are polling and interrupt. Default mode is polling. >>>>> This commit also adds code to handle device error interrupts and >>>>> print alarm details. >>>>> >>>>> Signed-off-by: Pravin Pathak >>>>> Signed-off-by: Tirthendu Sarkar >>>>> --- >>>>> doc/guides/eventdevs/dlb2.rst | 20 + >>>>> drivers/event/dlb2/dlb2.c | 236 +++++- >>>>> drivers/event/dlb2/dlb2_iface.c | 7 + >>>>> drivers/event/dlb2/dlb2_iface.h | 8 + >>>>> drivers/event/dlb2/dlb2_priv.h | 18 + >>>>> drivers/event/dlb2/dlb2_user.h | 112 +++ >>>>> drivers/event/dlb2/pf/base/dlb2_hw_types.h | 70 ++ >>>>> drivers/event/dlb2/pf/base/dlb2_osdep.h | 46 ++ >>>>> drivers/event/dlb2/pf/base/dlb2_regs.h | 149 +++- >>>>> drivers/event/dlb2/pf/base/dlb2_resource.c | 825 >> +++++++++++++++++++++ >>>>> drivers/event/dlb2/pf/base/dlb2_resource.h | 6 + >>>>> drivers/event/dlb2/pf/dlb2_pf.c | 223 ++++++ >>>>> 12 files changed, 1711 insertions(+), 9 deletions(-) >>>>> >>>>> diff --git a/doc/guides/eventdevs/dlb2.rst >>>>> b/doc/guides/eventdevs/dlb2.rst index 8ec7168f20..a4ba857351 >> 100644 >>>>> --- a/doc/guides/eventdevs/dlb2.rst >>>>> +++ b/doc/guides/eventdevs/dlb2.rst >>>>> @@ -477,6 +477,26 @@ Example command to use as meson option for >> credit handling: >>>>> >>>>> meson configure -Dc_args='-DDLB_SW_CREDITS_CHECKS=0 - >> DDLB_HW_CREDITS_CHECKS=1' >>>>> >>>>> +Interrupt Mode Support >>>>> +~~~~~~~~~~~~~~~~~~~~~~ >>>>> +DLB dequeue supports interrupt mode for the API >> rte_event_dequeue_burst(). >>>>> +The default port dequeue mode is polling. Dequeue wait mode can be >>>>> +configured on per eventdev port basis using devargs argument >>>>> +'port_dequeue_wait'. In interrupt mode, if the port queue is >>>>> +empty, the application thread will block on the interrupt until a >>>>> +new event arrives. It enters blocking mode only after any >>>>> +specified timeout. During the timeout, it will poll the port queue for >> events as usual. Interrupt mode uses the DPDK interrupt support framework. >>>>> + >>>>> + .. code-block:: console >>>>> + >>>>> + --allow ea:00.0,port_dequeue_wait=all:interrupt >>>> >>>> Adding other eventdev PMD mainatainers. >>>> >>>> Looks like it can be a generic feature. i.e set this option is >>>> dev_configure() If there is no objection, Please send a new patch around >> that. >>> >>> I've considered implementing this in DSW, although in a different >>> manner (with eventfds and poll()). >>> >>> The dequeue timeout will still be honored in "interrupt mode", correct? >>> It wasn't obvious from the description. >> >> How is it in Intel PMD? > > It would be best if we configure it per port using RTE_EVENT_PORT_CFG_* flags. Will it be, OK? > The dequeue timeout will be honored, and the decision to block or return will be made after the timeout. That doesn't sound like the timeout is honored. The reason an application wants the dequeue call to complete within a certain time, even though there wasn't any events, is likely because it want to go do something else with that thread, after the timeout. Thus, you can't decide to block the thread *after* the timeout. If you block, you have to do some time *before* the timeout, and wake up in time to meet the deadline. For example, if the event device is given a 1 ms dequeue timeout by the application, it could go busy-poll for 10 us, then busy-poll with a short tpause for 100 us, and then put the thread to sleep blocking on some fd for the remaining 890 us. The hardware-specific nature of the timing and exact mechanism to use speaks against having this kind of configuration in the Eventdev API. > If not interrupt, it can be called blocking vs polling mode. If the port config is fine, I will create a new patch with it. > Also, we should have this as a capability for eventdevs. > >> >>> >>> What's being configured should just be a threshold time at which the >>> event device would go from busy-polling to blocking the thread. >>> >>> Maybe it should be called something with "blocking" or "sleeping", >>> instead of "interrupt", since interrupts are never directly involved. >> >> Agree. or make it a power save mode or so. >> >>> >>> Anyway, seems like a good candidate for a generic feature to me. >>>