From: Jerin Jacob <jerinj@marvell.com>
To: Robin Jarry <rjarry@redhat.com>,
Nitin Saxena <nsaxena@marvell.com>, "dev@dpdk.org" <dev@dpdk.org>,
"grout@dpdk.org" <grout@dpdk.org>
Cc: David Marchand <david.marchand@redhat.com>,
Christophe Fontaine <cfontain@redhat.com>,
Nitin Saxena <nsaxena16@gmail.com>,
Zhirun Yan <yanzhirun_163@163.com>,
Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
Subject: RE: [EXTERNAL] graph: dispatch mode with libevent for control plane
Date: Mon, 16 Dec 2024 08:10:55 +0000 [thread overview]
Message-ID: <BY3PR18MB478537364910D202036D3318C83B2@BY3PR18MB4785.namprd18.prod.outlook.com> (raw)
In-Reply-To: <D672A6CZXHPH.XUFCIYI7V0NS@redhat.com>
> -----Original Message-----
> From: Robin Jarry <rjarry@redhat.com>
> Sent: Monday, December 9, 2024 2:58 PM
> To: Nitin Saxena <nsaxena@marvell.com>; dev@dpdk.org; grout@dpdk.org
> Cc: Jerin Jacob <jerinj@marvell.com>; David Marchand
> <david.marchand@redhat.com>; Christophe Fontaine <cfontain@redhat.com>;
> Nitin Saxena <nsaxena16@gmail.com>
> Subject: [EXTERNAL] graph: dispatch mode with libevent for control plane
>
> Hi folks, I had a look at the graph dispatch mode and wondered if it could be
> adapted to be used with event loops for "slow path" processing. The use case I
> have in mind is having lcores dedicated for control plane operations which are
> not latency
> Hi folks,
>
> I had a look at the graph dispatch mode and wondered if it could be adapted to
> be used with event loops for "slow path" processing.
>
> The use case I have in mind is having lcores dedicated for control plane
> operations which are not latency sensitive. It would be nice to allow data plane
> workers to send packets to these lcores while keeping the packets in the graph.
>
> The problem I have with this solution for now, is that all CPUs processing the
> graph with rte_graph_walk_mcore_dispatch() are supposed to do busy polling.
> This is not compatible with select/epoll based event loops.
>
> Would it be possible to have a way for busy-polling threads to signal non-busy-
> polling threads that there are packets waiting for them in the graph ring? In
> grout, we implemented something outside of the graph using
> pthread_cond_signal().
Sorry for delay, I was on business travel.
Adding yanzhirun_163@163.com(mcore model maintainer).
If I understand it correctly, we need three operations.
a)wait object creation.
b)wait object waiting instead of polling.
c)signal wait object from fastpath to wake up (b)
I see two options.
Option A:
In application (without graph change)
1)call (a)
2)
while(1)
{
Call (b)
rte_graph_walk_mcore_dispatch()
}
3)Call (c) from fp nodes(Assuming it is out of tree nodes)
Option B
1)Call (a) in model create or so
2)Add an option in rte_graph_walk_mcore_dispatch() to call (b)
3)Update rte_.._enqueue() to call (c) after ring enqueue
Option B is need if we need inbuilt fp nodes.
>
> https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__github.com_DPDK_grout_blob_main_modules_infra_datapath_control-
> 5Foutput.c&d=DwIFaQ&c=nKjWec2b6R0mOyPaz7xtfQ&r=1DGob4H4rxz6H8uIT
> ozGOCa0s5f4wCNtTa4UUKvcsvI&m=sctQnRalWyQEGrI4o2UpcCXD8n8qveibIe4C
> clcMOUmS7Oi0S7MoVryikpo_ZDh1&s=Zm-
> i7a_D6MFxZO362gYHHe9PtKO_Kr6JeFNlmEHpMCg&e=
> https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__github.com_DPDK_grout_blob_main_modules_infra_control_control-
> 5Foutput.c&d=DwIFaQ&c=nKjWec2b6R0mOyPaz7xtfQ&r=1DGob4H4rxz6H8uIT
> ozGOCa0s5f4wCNtTa4UUKvcsvI&m=sctQnRalWyQEGrI4o2UpcCXD8n8qveibIe4C
> clcMOUmS7Oi0S7MoVryikpo_ZDh1&s=09ea7Sa47B5SPe7SjP5zBNMzqem0XzI3
> HnlU-k73N2w&e=
>
> Unless I am mistaken, this does not perform any syscall and does not require
> acquiring any lock. Only the "slow" thread needs to acquire locks and wait for
> the data path threads to call pthread_cond_signal().
>
> This solution can only be used for busy-polling -> epoll-based communication,
> for the other direction epoll-based -> busy-polling there would not need any
> specific signaling required. Only posting the packets to the graph ring would be
> enough.
>
> What do you think? How would you integrate this into rte_graph? What would
> the API look like in your opinion?
>
> Thanks!
>
> --
> Robin
prev parent reply other threads:[~2024-12-16 8:11 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-09 9:27 Robin Jarry
2024-12-16 8:10 ` Jerin Jacob [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BY3PR18MB478537364910D202036D3318C83B2@BY3PR18MB4785.namprd18.prod.outlook.com \
--to=jerinj@marvell.com \
--cc=cfontain@redhat.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=grout@dpdk.org \
--cc=nsaxena16@gmail.com \
--cc=nsaxena@marvell.com \
--cc=pbhagavatula@marvell.com \
--cc=rjarry@redhat.com \
--cc=yanzhirun_163@163.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).