From: David Marchand <david.marchand@redhat.com> To: "Ananyev, Konstantin" <konstantin.ananyev@intel.com> Cc: "dev@dpdk.org" <dev@dpdk.org>, "jerinjacobk@gmail.com" <jerinjacobk@gmail.com>, "Richardson, Bruce" <bruce.richardson@intel.com>, "mdr@ashroe.eu" <mdr@ashroe.eu>, "thomas@monjalon.net" <thomas@monjalon.net>, "arybchenko@solarflare.com" <arybchenko@solarflare.com>, "ktraynor@redhat.com" <ktraynor@redhat.com>, "Stokes, Ian" <ian.stokes@intel.com>, "i.maximets@ovn.org" <i.maximets@ovn.org>, "olivier.matz@6wind.com" <olivier.matz@6wind.com> Subject: Re: [dpdk-dev] [PATCH v6 00/10] Register non-EAL threads as lcore Date: Wed, 8 Jul 2020 15:05:52 +0200 Message-ID: <CAJFAV8zS2KyENp+isyXMmetOnvAj2dCHk3K-z9+ms3XwsdL_vQ@mail.gmail.com> (raw) In-Reply-To: <BYAPR11MB3301FEC60BD9E8902210EA6D9A690@BYAPR11MB3301.namprd11.prod.outlook.com> On Tue, Jul 7, 2020 at 1:23 AM Ananyev, Konstantin <konstantin.ananyev@intel.com> wrote: > > OVS and some other applications have been hacking into DPDK internals to > > fake EAL threads and avoid performance penalty of only having non-EAL > > threads. > > > > This series proposes to add a new type of lcores and maps those threads > > to such lcores. > > non-EAL threads won't run the DPDK eal mainloop. > > As a consequence, part of the EAL threads API cannot work. > > > > Having new lcores appearing during the process lifetime is not expected > > by some DPDK components. This is addressed by introducing init/uninit > > callacks invoked when hotplugging of such lcore. > > > > There is still some work/discussion: > > - refuse new lcore role in incompatible EAL threads API (or document it > > only as those API were already incompatible?), > > - think about deprecation notices for existing RTE_FOREACH_LCORE macros > > and consorts, it is probably worth discussing on how to iterate over > > lcores, > > > > For the interested parties, I have a patch [1] against dpdk-latest OVS > > branch that makes use of this series (this patch probably won't work with > > v5, it will be rebased once dpdk side is ready). > > > > 1: https://patchwork.ozlabs.org/project/openvswitch/patch/20200626123017.28555-1-david.marchand@redhat.com/ > > > > Changes since v5: > > - fixed windows build, > > > > Changes since v4: > > - added separate API to control mp feature activation, > > - addressed Konstantin and Olivier comments, > > > > Changes since v3: > > - added init failure when trying to use in conjunction with multiprocess, > > - addressed Andrew comments, > > > > Changes since v2: > > - fixed windows build error due to missing trace stub, > > - fixed bug when rolling back on lcore register, > > > > Changes since v1: > > - rebased on master (conflicts on merged Windows series), > > - separated lcore role code cleanup in a patch, > > - tried to use a single naming, so kept non-EAL threads as the main > > notion. non-EAL threads are then distinguished between registered and > > unregistered non-EAL threads, > > - added unit tests (still missing some coverage, marked with a FIXME), > > - reworked callbacks call under a common rwlock lock which protects > > lcores allocations and callbacks registration, > > - introduced lcore iterators and converted the bucket mempool driver, > > > > LGTM, just 2 nits see below. > Apart from that: > Series Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Thanks for the review. > > 1. > +void > +rte_lcore_callback_unregister(void *handle) > +{ > + struct rte_config *cfg = rte_eal_get_configuration(); > + struct lcore_callback *callback = handle; > + unsigned int lcore_id; > > Seems like forgot to add formal parameter check here: > if (callback == NULL) ... Indeed, fixed. > > + > + rte_rwlock_write_lock(&lcore_lock); > + if (callback->uninit == NULL) > > 2. > > +bool > +rte_mp_disable(void) > +{ > + return set_mp_status(MP_STATUS_DISABLED); > +} > > Probably name it rte_eal_multiprocess_enable (or so) > to make it clear from naming and follow > more closely our own name convention. > Apis for mp have the rte_mp_ prefix. lib/librte_eal/rte_eal_version.map: rte_mp_action_register; lib/librte_eal/rte_eal_version.map: rte_mp_action_unregister; lib/librte_eal/rte_eal_version.map: rte_mp_reply; lib/librte_eal/rte_eal_version.map: rte_mp_sendmsg; lib/librte_eal/rte_eal_version.map: rte_mp_request_async; lib/librte_eal/rte_eal_version.map: rte_mp_request_sync; I prefer to stick to it. > + > +bool > +eal_enable_multiprocess(void) > +{ > + return set_mp_status(MP_STATUS_ENABLED); > +} I will go with __rte_mp_ to indicate the private aspect. > > Might be worth to make that function public too. > Then user will have a proper pair to use: > rte_eal_multiprocess_(enable|disable). > I don't see the need for now. If you feel strong about it, I can send a followup patch later. Passed the checks again and pushed to the main branch. -- David Marchand
next prev parent reply other threads:[~2020-07-08 13:06 UTC|newest] Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-10 14:44 [dpdk-dev] [PATCH 0/7] Register external " David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 1/7] eal: relocate per thread symbols to common David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 2/7] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-15 6:46 ` Kinsella, Ray 2020-06-10 14:45 ` [dpdk-dev] [PATCH 3/7] eal: introduce thread init helper David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 4/7] eal: introduce thread uninit helper David Marchand 2020-06-10 14:45 ` [dpdk-dev] [PATCH 5/7] eal: register non-EAL threads as lcore David Marchand 2020-06-15 6:43 ` Kinsella, Ray 2020-06-10 14:45 ` [dpdk-dev] [PATCH 6/7] eal: dump lcores David Marchand 2020-06-15 6:40 ` Kinsella, Ray 2020-06-10 14:45 ` [dpdk-dev] [PATCH 7/7] eal: add lcore hotplug notifications David Marchand 2020-06-15 6:34 ` Kinsella, Ray 2020-06-15 7:13 ` David Marchand 2020-06-10 15:09 ` [dpdk-dev] [PATCH 0/7] Register external threads as lcore Jerin Jacob 2020-06-10 15:13 ` Bruce Richardson 2020-06-10 15:18 ` David Marchand 2020-06-10 15:33 ` Jerin Jacob 2020-06-15 7:11 ` David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 0/9] Register non-EAL " David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 1/9] eal: relocate per thread symbols to common David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 2/9] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 3/9] eal: introduce thread init helper David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 4/9] eal: introduce thread uninit helper David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 5/9] eal: move lcore role code David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 6/9] eal: register non-EAL threads as lcores David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 7/9] eal: add lcore init callbacks David Marchand 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 8/9] eal: add lcore iterators David Marchand 2020-06-20 2:21 ` Stephen Hemminger 2020-06-19 16:22 ` [dpdk-dev] [PATCH v2 9/9] mempool/bucket: handle non-EAL lcores David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 0/9] Register non-EAL threads as lcore David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 1/9] eal: relocate per thread symbols to common David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 2/9] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 3/9] eal: introduce thread init helper David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 4/9] eal: introduce thread uninit helper David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 5/9] eal: move lcore role code David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 6/9] eal: register non-EAL threads as lcores David Marchand 2020-06-22 15:49 ` Ananyev, Konstantin 2020-06-22 16:37 ` Ananyev, Konstantin 2020-06-23 7:49 ` David Marchand 2020-06-23 9:14 ` Bruce Richardson 2020-06-23 12:49 ` David Marchand 2020-06-23 13:15 ` Ananyev, Konstantin 2020-06-24 9:23 ` David Marchand 2020-06-24 9:56 ` Bruce Richardson 2020-06-24 10:08 ` Thomas Monjalon 2020-06-24 10:45 ` Ananyev, Konstantin 2020-06-24 10:39 ` Ananyev, Konstantin 2020-06-24 10:48 ` David Marchand 2020-06-24 11:59 ` Ananyev, Konstantin 2020-06-26 14:43 ` David Marchand 2020-06-30 10:35 ` Thomas Monjalon 2020-06-30 12:07 ` Ananyev, Konstantin 2020-06-30 12:44 ` Olivier Matz 2020-06-30 14:37 ` Thomas Monjalon 2020-06-30 19:02 ` Ananyev, Konstantin 2020-06-30 14:35 ` Thomas Monjalon 2020-06-30 18:57 ` Ananyev, Konstantin 2020-07-01 7:48 ` David Marchand 2020-07-01 11:58 ` Ananyev, Konstantin 2020-07-02 13:06 ` David Marchand 2020-07-03 15:15 ` Thomas Monjalon 2020-07-03 16:40 ` Ananyev, Konstantin 2020-07-04 15:00 ` David Marchand 2020-07-04 21:24 ` Ananyev, Konstantin 2020-06-23 17:02 ` Andrew Rybchenko 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 7/9] eal: add lcore init callbacks David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 8/9] eal: add lcore iterators David Marchand 2020-06-22 13:25 ` [dpdk-dev] [PATCH v3 9/9] mempool/bucket: handle non-EAL lcores David Marchand 2020-06-23 17:28 ` Andrew Rybchenko 2020-06-26 14:13 ` David Marchand 2020-06-26 14:34 ` Andrew Rybchenko 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 0/9] Register non-EAL threads as lcore David Marchand 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 1/9] eal: relocate per thread symbols to common David Marchand 2020-06-30 9:33 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 2/9] eal: fix multiple definition of per lcore thread id David Marchand 2020-06-30 9:34 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 3/9] eal: introduce thread init helper David Marchand 2020-06-30 9:37 ` Olivier Matz 2020-06-30 12:04 ` David Marchand 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 4/9] eal: introduce thread uninit helper David Marchand 2020-06-26 15:00 ` Jerin Jacob 2020-06-29 9:07 ` David Marchand 2020-06-29 8:59 ` [dpdk-dev] [EXT] " Sunil Kumar Kori 2020-06-29 9:25 ` David Marchand 2020-06-30 9:42 ` [dpdk-dev] " Olivier Matz 2020-07-01 8:00 ` David Marchand 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 5/9] eal: move lcore role code David Marchand 2020-06-30 9:45 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 6/9] eal: register non-EAL threads as lcores David Marchand 2020-06-29 14:27 ` Ananyev, Konstantin 2020-06-30 10:07 ` Olivier Matz 2020-07-01 7:13 ` David Marchand 2020-07-01 9:11 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 7/9] eal: add lcore init callbacks David Marchand 2020-06-29 12:46 ` Ananyev, Konstantin 2020-06-30 10:09 ` Olivier Matz 2020-06-30 10:15 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 8/9] eal: add lcore iterators David Marchand 2020-06-30 10:11 ` Olivier Matz 2020-06-26 14:47 ` [dpdk-dev] [PATCH v4 9/9] mempool/bucket: handle non-EAL lcores David Marchand 2020-06-26 14:52 ` Andrew Rybchenko 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 00/10] Register non-EAL threads as lcore David Marchand 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 01/10] eal: relocate per thread symbols to common David Marchand 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 02/10] eal: fix multiple definition of per lcore thread id David Marchand 2020-07-06 14:15 ` [dpdk-dev] [PATCH v5 03/10] eal: introduce thread init helper David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 04/10] eal: introduce thread uninit helper David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 05/10] eal: move lcore role code David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 06/10] eal: register non-EAL threads as lcores David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 07/10] eal: add lcore init callbacks David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 08/10] eal: add lcore iterators David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 09/10] mempool/bucket: handle non-EAL lcores David Marchand 2020-07-06 14:16 ` [dpdk-dev] [PATCH v5 10/10] eal: add multiprocess disable API David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 00/10] Register non-EAL threads as lcore David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 01/10] eal: relocate per thread symbols to common David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 02/10] eal: fix multiple definition of per lcore thread id David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 03/10] eal: introduce thread init helper David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 04/10] eal: introduce thread uninit helper David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 05/10] eal: move lcore role code David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 06/10] eal: register non-EAL threads as lcores David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 07/10] eal: add lcore init callbacks David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 08/10] eal: add lcore iterators David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 09/10] mempool/bucket: handle non-EAL lcores David Marchand 2020-07-06 20:52 ` [dpdk-dev] [PATCH v6 10/10] eal: add multiprocess disable API David Marchand 2020-07-06 23:22 ` [dpdk-dev] [PATCH v6 00/10] Register non-EAL threads as lcore Ananyev, Konstantin 2020-07-08 13:05 ` David Marchand [this message] 2020-07-08 13:06 ` David Marchand
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=CAJFAV8zS2KyENp+isyXMmetOnvAj2dCHk3K-z9+ms3XwsdL_vQ@mail.gmail.com \ --to=david.marchand@redhat.com \ --cc=arybchenko@solarflare.com \ --cc=bruce.richardson@intel.com \ --cc=dev@dpdk.org \ --cc=i.maximets@ovn.org \ --cc=ian.stokes@intel.com \ --cc=jerinjacobk@gmail.com \ --cc=konstantin.ananyev@intel.com \ --cc=ktraynor@redhat.com \ --cc=mdr@ashroe.eu \ --cc=olivier.matz@6wind.com \ --cc=thomas@monjalon.net \ /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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git