DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Van Haaren, Harry" <harry.van.haaren@intel.com>
To: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, Phil Yang <Phil.Yang@arm.com>,
	Gavin Hu <Gavin.Hu@arm.com>, nd <nd@arm.com>, nd <nd@arm.com>
Subject: Re: [dpdk-dev] Questions on service core feature implementation
Date: Tue, 10 Mar 2020 12:52:25 +0000	[thread overview]
Message-ID: <MWHPR1101MB21578E75AD4841A666912344D7FF0@MWHPR1101MB2157.namprd11.prod.outlook.com> (raw)
In-Reply-To: <VE1PR08MB51492476E7A7C68CBC2D06B998E00@VE1PR08MB5149.eurprd08.prod.outlook.com>

> -----Original Message-----
> From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
> Sent: Saturday, March 7, 2020 1:15 AM
> To: Van Haaren, Harry <harry.van.haaren@intel.com>
> Cc: dev@dpdk.org; Phil Yang <Phil.Yang@arm.com>; Gavin Hu
> <Gavin.Hu@arm.com>; nd <nd@arm.com>; nd <nd@arm.com>
> Subject: Questions on service core feature implementation
> 
> Hi Harry,

Hey Honnappa,

> 	I have few observations on service core feature implementation.
> 
> I believe it is allowed to map/unmap a lcore to service while the service is
> running (i.e. not just during initialization stage). Please clarify
> otherwise.

Service-cores wasn't designed for this use case, but this "popped up"
as the implementation was being finalized. Service cores' solves the problem
of HW vs SW PMDs lcore requirements being different - and service cores is the
abstraction to hide that lcore requirement difference.

So I don't think we made a very conscious decision on if this is allowed or not.


> Assuming yes -
> 
> In the 'service_run' function, the code to detect use of atomics seems to
> result in allowing the mt-unsafe service to run on multiple cores. Looking
> at the following code:
> 
> 1   const int use_atomics = (service_mt_safe(s) == 0) &&
> 2                (rte_atomic32_read(&s->num_mapped_cores) > 1);
> 3   if (use_atomics) {
> 4                if (!rte_atomic32_cmpset((uint32_t *)&s->execute_lock, 0,
> 1))
> 5                        return -EBUSY;
> 6
> 7                rte_service_runner_do_callback(s, cs, i);
> 8                rte_atomic32_clear(&s->execute_lock);
> 9   } else
> 10             rte_service_runner_do_callback(s, cs, i);
> 
> Let us say, on core1, after line 4, 'use_atomics' is set to 0. core1 is
> running the service function.
> On the control plane let us say 'rte_service_map_lcore_set' is called to map
> the service to an additional core, core2.
> Now, on core2, after line 4, 'use_atomics' is set to 1. But since core1 did
> not take execute_lock, core2 will take the lock and starts running the
> service function. This should not be allowed since the service is a mt-
> unsafe service.
>
> Please let me know if my assessment is correct.
> A possible solution is to take the execute_lock all the time.

Yes agreed that your scenario seems to show an inconsistency.
As per above, I'm not sure this use case was really the target of
the service-cores design - but we as a community should identify
if we want to support this use case.

We could either update docs explicitly dis-allowing the above
situation - this puts the burden on applications to understand
what services could be running, and if they're being scheduled already.

The other solution being to change the implementation to allow this
use-case, which will likely have a performance impact for those already
using service cores for its original function, by (as you suggested)
taking execute_lock all the time (and paying the atomic cost for that..)


> Thank you,
> Honnappa

Regards, -HvH

  reply	other threads:[~2020-03-10 12:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-07  1:14 Honnappa Nagarahalli
2020-03-10 12:52 ` Van Haaren, Harry [this message]
2020-03-10 16:06   ` Honnappa Nagarahalli

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=MWHPR1101MB21578E75AD4841A666912344D7FF0@MWHPR1101MB2157.namprd11.prod.outlook.com \
    --to=harry.van.haaren@intel.com \
    --cc=Gavin.Hu@arm.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=Phil.Yang@arm.com \
    --cc=dev@dpdk.org \
    --cc=nd@arm.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).