From: Andrea Parri <andrea.parri@amarulasolutions.com>
To: Quentin Perret <quentin.perret@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
rjw@rjwysocki.net, linux-kernel@vger.kernel.org,
linux-pm@vger.kernel.org, gregkh@linuxfoundation.org,
mingo@redhat.com, dietmar.eggemann@arm.com,
morten.rasmussen@arm.com, chris.redpath@arm.com,
patrick.bellasi@arm.com, valentin.schneider@arm.com,
vincent.guittot@linaro.org, thara.gopinath@linaro.org,
viresh.kumar@linaro.org, tkjos@google.com,
joel@joelfernandes.org, smuckle@google.com,
adharmap@codeaurora.org, skannan@codeaurora.org,
pkondeti@codeaurora.org, juri.lelli@redhat.com,
edubezval@gmail.com, srinivas.pandruvada@linux.intel.com,
currojerez@riseup.net, javi.merino@kernel.org
Subject: Re: [PATCH v7 03/14] PM: Introduce an Energy Model management framework
Date: Tue, 2 Oct 2018 21:12:17 +0200 [thread overview]
Message-ID: <20181002191217.GA4160@andrea> (raw)
In-Reply-To: <20181002144025.wnanxibhdcnl23sf@queper01-lin>
On Tue, Oct 02, 2018 at 03:40:28PM +0100, Quentin Perret wrote:
> On Tuesday 02 Oct 2018 at 16:29:24 (+0200), Peter Zijlstra wrote:
> > On Tue, Oct 02, 2018 at 03:05:23PM +0100, Quentin Perret wrote:
> > > On Tuesday 02 Oct 2018 at 15:48:57 (+0200), Peter Zijlstra wrote:
> > > > +/**
> > > > + * em_cpu_get() - Return the performance domain for a CPU
> > > > + * @cpu : CPU to find the performance domain for
> > > > + *
> > > > + * Return: the performance domain to which 'cpu' belongs, or NULL if it doesn't
> > > > + * exist.
> > > > + */
> > > > +struct em_perf_domain *em_cpu_get(int cpu)
> > > > +{
> > > > + return READ_ONCE(per_cpu(em_data, cpu));
> > > > +}
> > > > +EXPORT_SYMBOL_GPL(em_cpu_get);
> > > >
> > > > But your read side doesn't take, not is required to take em_pd_mutex.
> > > >
> > > > At that point, the mutex_unlock() doesn't guarantee anything.
> > > >
> > > > A CPU observing the em_data store, doesn't need to observe the store
> > > > that filled the data structure it points to.
> > >
> > > Right but even if I add the smp_store_release(), I can still have a
> > > CPU observing em_data while another is in the process of updating it.
> > > So, if smp_store_release() doesn't guarantee that readers will see a
> > > complete update, do I actually get something interesting from it ?
> > > (That's not a rhetorical question, I'm actually wondering :-)
> >
> > I thought the update would fail if em_data was already set.
> >
> > That is, you can only set this thing up _once_ and then you'll have to
> > forever live with it.
> >
> > Or did I read that wrong?
>
> No no, that's correct. em_data is populated once and kept as-is
> forever.
>
> What I was trying to say is, when em_data is being populated for the
> first time, nothing prevents a reader from using em_cpu_get()
> concurrently. And in this case, it doesn't matter if you use
> smp_store_release() or not, the reader might see the table half-updated.
>
> So, basically, smp_store_release() doesn't guarantee that readers won't
> see a half-baked em_data. That's the point I'm trying to make at least :-)
An example might help clarify this: here is a scenario I can _imagine,
based on your description.
CPU0 (em_register_perf_domain()) CPU1 (reader)
[...] my_pd = READ_ONCE(per_cpu(em_data, 1)); /* em_cpu_get() */
pd->table = table if (my_pd)
WRITE_ONCE(per_cpu(em_data, 1), pd); my_table = my_pd->table; /* process, dereference, ... my_table */
In this scenario, we'd like CPU1 to see CPU0's store to ->table (as well
as the stores to table[]) _if CPU1 sees CPU0's store to em_data (that is,
if my_pd != NULL).
This guarantee does not hold with the WRITE_ONCE(), because CPU0 could
propagate the store to ->table and the store to em_data out-of-order.
The smp_store_release(), together with the address dependency headed by
the READ_ONCE(), provides this guarantee (and more...).
(Enclosing the reader into an em_pd_mutex critical section would also
provide this guarantee, but I can imagine a few arguments for not using
a mutex... ;-) ).
The question, I guess, is whether you want such a guarantee.
Andrea
next prev parent reply other threads:[~2018-10-02 19:12 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-12 9:12 [PATCH v7 00/14] Energy Aware Scheduling Quentin Perret
2018-09-12 9:12 ` [PATCH v7 01/14] sched: Relocate arch_scale_cpu_capacity Quentin Perret
2018-09-12 9:12 ` [PATCH v7 02/14] sched/cpufreq: Prepare schedutil for Energy Aware Scheduling Quentin Perret
2018-09-12 14:56 ` Vincent Guittot
2018-09-12 14:56 ` Vincent Guittot
2018-09-18 21:33 ` Rafael J. Wysocki
2018-09-18 21:33 ` Rafael J. Wysocki
2018-09-27 12:17 ` Quentin Perret
2018-09-27 12:17 ` Quentin Perret
2018-09-28 8:23 ` Rafael J. Wysocki
2018-09-28 8:23 ` Rafael J. Wysocki
2018-09-28 8:35 ` Quentin Perret
2018-09-28 8:35 ` Quentin Perret
2018-09-28 8:35 ` Rafael J. Wysocki
2018-09-28 8:35 ` Rafael J. Wysocki
2018-09-12 9:12 ` [PATCH v7 03/14] PM: Introduce an Energy Model management framework Quentin Perret
2018-10-02 12:25 ` Peter Zijlstra
2018-10-02 12:54 ` Quentin Perret
2018-10-02 13:50 ` Peter Zijlstra
2018-10-02 12:30 ` Peter Zijlstra
2018-10-02 12:51 ` Quentin Perret
2018-10-02 13:48 ` Peter Zijlstra
2018-10-02 14:05 ` Quentin Perret
2018-10-02 14:29 ` Peter Zijlstra
2018-10-02 14:40 ` Quentin Perret
2018-10-02 19:12 ` Andrea Parri [this message]
2018-10-03 7:48 ` Quentin Perret
2018-09-12 9:12 ` [PATCH v7 04/14] PM / EM: Expose the Energy Model in sysfs Quentin Perret
2018-09-12 9:13 ` [PATCH v7 05/14] sched: Introduce a sched_feat for Energy Aware Scheduling Quentin Perret
2018-10-02 12:34 ` Peter Zijlstra
2018-10-02 13:08 ` Quentin Perret
2018-10-03 16:24 ` Peter Zijlstra
2018-10-04 9:57 ` Quentin Perret
2018-09-12 9:13 ` [PATCH v7 06/14] sched/topology: Reference the Energy Model of CPUs when available Quentin Perret
2018-10-02 12:36 ` Peter Zijlstra
2018-10-02 13:16 ` Quentin Perret
2018-09-12 9:13 ` [PATCH v7 07/14] sched/topology: Lowest CPU asymmetry sched_domain level pointer Quentin Perret
2018-09-12 9:13 ` [PATCH v7 08/14] sched/topology: Disable EAS on inappropriate platforms Quentin Perret
2018-10-03 16:27 ` Peter Zijlstra
2018-10-04 9:10 ` Quentin Perret
2018-10-04 9:38 ` Peter Zijlstra
2018-10-04 9:45 ` Quentin Perret
2018-09-12 9:13 ` [PATCH v7 09/14] sched/fair: Clean-up update_sg_lb_stats parameters Quentin Perret
2018-09-12 9:13 ` [PATCH v7 10/14] sched: Add over-utilization/tipping point indicator Quentin Perret
2018-09-12 9:13 ` [PATCH v7 11/14] sched/fair: Introduce an energy estimation helper function Quentin Perret
2018-10-04 8:34 ` Peter Zijlstra
2018-10-04 9:02 ` Quentin Perret
2018-09-12 9:13 ` [PATCH v7 12/14] sched/fair: Select an energy-efficient CPU on task wake-up Quentin Perret
2018-10-04 9:44 ` Peter Zijlstra
2018-10-04 10:27 ` Quentin Perret
2018-10-04 10:41 ` Peter Zijlstra
2018-10-04 10:55 ` Quentin Perret
2018-10-04 12:18 ` Peter Zijlstra
2018-09-12 9:13 ` [PATCH v7 13/14] sched/topology: Make Energy Aware Scheduling depend on schedutil Quentin Perret
2018-10-04 10:50 ` Peter Zijlstra
2018-10-04 11:58 ` Quentin Perret
2018-09-12 9:13 ` [PATCH v7 14/14] OPTIONAL: cpufreq: dt: Register an Energy Model Quentin Perret
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=20181002191217.GA4160@andrea \
--to=andrea.parri@amarulasolutions.com \
--cc=adharmap@codeaurora.org \
--cc=chris.redpath@arm.com \
--cc=currojerez@riseup.net \
--cc=dietmar.eggemann@arm.com \
--cc=edubezval@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=javi.merino@kernel.org \
--cc=joel@joelfernandes.org \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=morten.rasmussen@arm.com \
--cc=patrick.bellasi@arm.com \
--cc=peterz@infradead.org \
--cc=pkondeti@codeaurora.org \
--cc=quentin.perret@arm.com \
--cc=rjw@rjwysocki.net \
--cc=skannan@codeaurora.org \
--cc=smuckle@google.com \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=thara.gopinath@linaro.org \
--cc=tkjos@google.com \
--cc=valentin.schneider@arm.com \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.