From: Peter Zijlstra <peterz@infradead.org>
To: paulmck@linux.vnet.ibm.com
Cc: Christoph Lameter <cl@linux-foundation.org>,
Pekka Enberg <penberg@cs.helsinki.fi>,
Ingo Molnar <mingo@elte.hu>,
Jeremy Fitzhardinge <jeremy@goop.org>,
Nick Piggin <nickpiggin@yahoo.com.au>,
Andi Kleen <andi@firstfloor.org>,
"Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>,
Suresh Siddha <suresh.b.siddha@intel.com>,
Jens Axboe <jens.axboe@oracle.com>,
Rusty Russell <rusty@rustcorp.com.au>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] smp_call_function: use rwlocks on queues rather than rcu
Date: Mon, 25 Aug 2008 17:22:16 +0200 [thread overview]
Message-ID: <1219677736.8515.69.camel@twins> (raw)
In-Reply-To: <20080825151220.GA6745@linux.vnet.ibm.com>
On Mon, 2008-08-25 at 08:12 -0700, Paul E. McKenney wrote:
> On Mon, Aug 25, 2008 at 12:31:31PM +0200, Peter Zijlstra wrote:
> > On Fri, 2008-08-22 at 13:53 -0700, Paul E. McKenney wrote:
> > > On Fri, Aug 22, 2008 at 03:03:13PM -0500, Christoph Lameter wrote:
> > > > Paul E. McKenney wrote:
> > > >
> > > > > I was indeed thinking in terms of the free from RCU being specially marked.
> > > >
> > > > Isnt there some way to shorten the rcu periods significantly? Critical
> > > > sections do not take that long after all.
> > >
> > > In theory, yes. However, the shorter the grace period, the greater the
> > > per-update overhead of grace-period detection -- the general approach
> > > is to use a per-CPU high-resolution timer to force RCU grace period
> > > processing every 100 microseconds or so.
> >
> > You could of course also drive the rcu state machine from
> > rcu_read_unlock().
>
> True, and Jim Houston implemented something similar to this some years
> back: http://marc.theaimsgroup.com/?l=linux-kernel&m=109387402400673&w=2
>
> This of course greatly increases rcu_read_unlock() overhead. But
> perhaps it is a good implementation for the workloads that Christoph is
> thinking of.
>
> > > Also, by definition, the RCU
> > > grace period can be no shorter than the longest active RCU read-side
> > > critical section. Nevertheless, I have designed my current hierarchical
> > > RCU patch with expedited grace periods in mind, though more for the
> > > purpose of reducing latency of long strings of operations that involve
> > > synchronize_rcu() than for cache locality.
> >
> > Another thing that could be done is more often force a grace period by
> > flipping the counters.
>
> Yep. That is exactly what I was getting at with the high-resolution
> timer point above. This seems to be a reasonable compromise, as it
> allows someone to specify how quickly the grace periods happen
> dynamically.
>
> But I am not sure that this gets the grace periods to go fast enough to
> cover Christoph's use case -- he seems to be in a "faster is better"
> space rather than in an "at least this fast" space. Still, it would
> likely help in some important cases.
If we combine these two cases, and flip the counter as soon as we've
enqueued one callback, unless we're already waiting for a grace period
to end - which gives us a longer window to collect callbacks.
And then the rcu_read_unlock() can do:
if (dec_and_zero(my_counter) && my_index == dying)
raise_softirq(RCU)
to fire off the callback stuff.
/me ponders - there must be something wrong with that...
Aaah, yes, the dec_and_zero is non trivial due to the fact that its a
distributed counter. Bugger..
next prev parent reply other threads:[~2008-08-25 15:23 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-22 0:29 [PATCH 2/2] smp_call_function: use rwlocks on queues rather than rcu Jeremy Fitzhardinge
2008-08-22 1:53 ` Nick Piggin
2008-08-22 6:28 ` Ingo Molnar
2008-08-22 7:06 ` Pekka Enberg
2008-08-22 7:12 ` Ingo Molnar
2008-08-22 9:12 ` Nick Piggin
2008-08-22 14:01 ` Christoph Lameter
2008-08-22 15:11 ` Paul E. McKenney
2008-08-22 17:14 ` Christoph Lameter
2008-08-22 18:29 ` Paul E. McKenney
2008-08-22 18:33 ` Andi Kleen
2008-08-22 18:35 ` Jeremy Fitzhardinge
2008-08-23 7:34 ` Andi Kleen
2008-08-24 4:55 ` Jeremy Fitzhardinge
2008-08-24 9:01 ` Andi Kleen
2008-08-22 22:40 ` Paul E. McKenney
2008-08-22 18:36 ` Christoph Lameter
2008-08-22 19:52 ` Paul E. McKenney
2008-08-22 20:03 ` Christoph Lameter
2008-08-22 20:53 ` Paul E. McKenney
2008-08-25 10:31 ` Peter Zijlstra
2008-08-25 15:12 ` Paul E. McKenney
2008-08-25 15:22 ` Peter Zijlstra [this message]
2008-08-25 15:46 ` Christoph Lameter
2008-08-25 15:51 ` Peter Zijlstra
2008-08-26 13:43 ` Paul E. McKenney
2008-08-26 14:07 ` Peter Zijlstra
2008-08-27 15:16 ` Paul E. McKenney
2008-08-25 20:04 ` Paul E. McKenney
2008-08-26 5:13 ` Nick Piggin
2008-08-26 13:40 ` [PATCH 2/2] smp_call_function: use rwlocks on queues rather?than rcu Paul E. McKenney
2008-08-25 15:44 ` [PATCH 2/2] smp_call_function: use rwlocks on queues rather than rcu Christoph Lameter
2008-08-25 20:05 ` Paul E. McKenney
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=1219677736.8515.69.camel@twins \
--to=peterz@infradead.org \
--cc=andi@firstfloor.org \
--cc=cl@linux-foundation.org \
--cc=jens.axboe@oracle.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nickpiggin@yahoo.com.au \
--cc=paulmck@linux.vnet.ibm.com \
--cc=penberg@cs.helsinki.fi \
--cc=rusty@rustcorp.com.au \
--cc=suresh.b.siddha@intel.com \
--cc=venkatesh.pallipadi@intel.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 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.