All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josh Triplett <josh@joshtriplett.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
	laijs@cn.fujitsu.com, dipankar@in.ibm.com,
	akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
	niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
	rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
	darren@dvhart.com, fweisbec@gmail.com, sbw@mit.edu
Subject: Re: [PATCH RFC nohz_full v2 2/7] nohz_full: Add rcu_dyntick data for scalable detection of all-idle state
Date: Mon, 1 Jul 2013 11:34:13 -0700	[thread overview]
Message-ID: <20130701183412.GA18804@jtriplet-mobl1> (raw)
In-Reply-To: <20130701182326.GQ3773@linux.vnet.ibm.com>

On Mon, Jul 01, 2013 at 11:23:26AM -0700, Paul E. McKenney wrote:
> On Mon, Jul 01, 2013 at 11:16:01AM -0700, Josh Triplett wrote:
> > On Mon, Jul 01, 2013 at 08:52:20AM -0700, Paul E. McKenney wrote:
> > > On Mon, Jul 01, 2013 at 08:31:50AM -0700, Josh Triplett wrote:
> > > > On Fri, Jun 28, 2013 at 01:10:17PM -0700, Paul E. McKenney wrote:
> > > > > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> > > > > 
> > > > > This commit adds fields to the rcu_dyntick structure that are used to
> > > > > detect idle CPUs.  These new fields differ from the existing ones in
> > > > > that the existing ones consider a CPU executing in user mode to be idle,
> > > > > where the new ones consider CPUs executing in user mode to be busy.
> > > > 
> > > > Can you explain, both in the commit messages and in the comments added
> > > > by the next commit, *why* this code doesn't consider userspace a
> > > > quiescent state?
> > > 
> > > Good point!  Does the following explain it?
> > > 
> > > 	Although one of RCU's quiescent states is usermode execution,
> > > 	it is not a full-system idle state.  This is because the purpose
> > > 	of the full-system idle state is not RCU, but rather determining
> > > 	when accurate timekeeping can safely be disabled.  Whenever
> > > 	accurate timekeeping is required in a CONFIG_NO_HZ_FULL kernel,
> > > 	at least one CPU must keep the scheduling-clock tick going.
> > > 	If even one CPU is executing in user mode, accurate timekeeping
> > > 	is requires, particularly for architectures where gettimeofday()
> > > 	and friends do not enter the kernel.  Only when all CPUs are
> > > 	really and truly idle can accurate timekeeping be disabled,
> > > 	allowing all CPUs to turn off the scheduling clock interrupt,
> > > 	thus greatly improving energy efficiency.
> > > 
> > > 	This naturally raises the question "Why is this code in RCU rather
> > > 	than in timekeeping?", and the answer is that RCU has the data
> > > 	and infrastructure to efficiently make this determination.
> > 
> > Good explanation, thanks.
> > 
> > This also naturally raises the question "How can we let userspace get
> > accurate time without forcing a timer tick?".
> 
> We don't.  ;-)

We don't currently, hence my question about how we can. :)

> Without CONFIG_NO_HZ_FULL, if a CPU is running in user mode, that CPU
> takes scheduling-clock interrupts.  User-mode code will therefore always
> see accurate time.  For some definition of "accurate", anyway.
> 
> With CONFIG_NO_HZ_FULL and without CONFIG_NO_HZ_FULL_SYSIDLE, a single
> designated CPU will always be taking scheduling-clock interrupts, which
> again ensures that user-mode code will always see accurate time.
> 
> With both CONFIG_NO_HZ_FULL and CONFIG_NO_HZ_FULL_SYSIDLE, if
> any CPU other than the timekeeping CPU is nonidle (where "nonidle"
> includes usermode execution), then the timekeeping CPU will be taking
> scheduling-clock interrupts, yet again ensuring that user-mode code will
> always see accurate time.  If all CPUs are idle (in other words, we are
> in RCU_SYSIDLE_FULL_NOTED state and the timekeeping CPU is also idle),
> scheduling-clock interrupts will be globally disabled.  Or will be,
> once I fix the bug noted by Frederic.
> 
> I am guessing that you would like this added to the explanation?  ;-)

Seemed pretty clear already from your previous explanation above, but
since you've taken the time to write it... :)

- Josh Triplett

  reply	other threads:[~2013-07-01 18:34 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-28 20:09 [PATCH RFC nohz_full 0/7] v2 Provide infrastructure for full-system idle Paul E. McKenney
2013-06-28 20:10 ` [PATCH RFC nohz_full v2 1/7] nohz_full: Add Kconfig parameter for scalable detection of all-idle state Paul E. McKenney
2013-06-28 20:10   ` [PATCH RFC nohz_full v2 2/7] nohz_full: Add rcu_dyntick data " Paul E. McKenney
2013-07-01 15:31     ` Josh Triplett
2013-07-01 15:52       ` Paul E. McKenney
2013-07-01 18:16         ` Josh Triplett
2013-07-01 18:23           ` Paul E. McKenney
2013-07-01 18:34             ` Josh Triplett [this message]
2013-07-01 19:16               ` Paul E. McKenney
2013-07-02  5:10                 ` Mike Galbraith
2013-07-02  5:58                   ` Paul E. McKenney
2013-06-28 20:10   ` [PATCH RFC nohz_full v2 3/7] nohz_full: Add per-CPU idle-state tracking Paul E. McKenney
2013-07-01 15:33     ` Josh Triplett
2013-06-28 20:10   ` [PATCH RFC nohz_full v2 4/7] nohz_full: Add full-system idle states and variables Paul E. McKenney
2013-06-28 20:10   ` [PATCH RFC nohz_full v2 5/7] nohz_full: Add full-system-idle arguments to API Paul E. McKenney
2013-06-28 20:10   ` [PATCH RFC nohz_full v2 6/7] nohz_full: Add full-system-idle state machine Paul E. McKenney
2013-07-01 16:35     ` Frederic Weisbecker
2013-07-01 18:10       ` Paul E. McKenney
2013-07-01 20:55         ` Frederic Weisbecker
2013-07-01 16:53     ` Frederic Weisbecker
2013-07-01 18:17       ` Paul E. McKenney
2013-07-01 21:38     ` Frederic Weisbecker
2013-07-01 22:51       ` Paul E. McKenney
2013-06-28 20:10   ` [PATCH RFC nohz_full v2 7/7] nohz_full: Force RCU's grace-period kthreads onto timekeeping CPU Paul E. McKenney
2013-07-01 15:19 ` [PATCH RFC nohz_full 0/7] v2 Provide infrastructure for full-system idle Andi Kleen
2013-07-01 16:03   ` Paul E. McKenney
2013-07-01 16:19     ` Andi Kleen
2013-07-01 19:19       ` Paul E. McKenney
2013-07-01 19:43 ` Christoph Lameter
2013-07-01 19:56   ` Paul E. McKenney
2013-07-01 20:24     ` Christoph Lameter
2013-07-01 20:43       ` Thomas Gleixner

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=20130701183412.GA18804@jtriplet-mobl1 \
    --to=josh@joshtriplett.org \
    --cc=akpm@linux-foundation.org \
    --cc=darren@dvhart.com \
    --cc=dhowells@redhat.com \
    --cc=dipankar@in.ibm.com \
    --cc=edumazet@google.com \
    --cc=fweisbec@gmail.com \
    --cc=laijs@cn.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=niv@us.ibm.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sbw@mit.edu \
    --cc=tglx@linutronix.de \
    /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.