From: Nick Piggin <npiggin@suse.de>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: tree rcu: call_rcu scalability problem?
Date: Thu, 3 Sep 2009 09:45:10 +0200 [thread overview]
Message-ID: <20090903074510.GE979@wotan.suse.de> (raw)
In-Reply-To: <20090903051427.GD7138@linux.vnet.ibm.com>
On Wed, Sep 02, 2009 at 10:14:27PM -0700, Paul E. McKenney wrote:
> On Wed, Sep 02, 2009 at 09:17:44PM +0200, Peter Zijlstra wrote:
> > On Wed, 2009-09-02 at 14:27 +0200, Nick Piggin wrote:
> >
> > > It seems like nearly 2/3 of the cost is here:
> > > /* Add the callback to our list. */
> > > *rdp->nxttail[RCU_NEXT_TAIL] = head; <<<
> > > rdp->nxttail[RCU_NEXT_TAIL] = &head->next;
> > >
> > > In loading the pointer to the next tail pointer. If I'm reading the profile
> > > correctly. Can't see why that should be a probem though...
> > >
> > > ffffffff8107dee0 <__call_rcu>: /* __call_rcu total: 320971 100.000 */
> > > 697 0.2172 :ffffffff8107dee0: push %r12
> >
> > > 921 0.2869 :ffffffff8107df57: push %rdx
> > > 151 0.0470 :ffffffff8107df58: popfq
> > > 183507 57.1725 :ffffffff8107df59: mov 0x50(%rbx),%rax
> > > 995 0.3100 :ffffffff8107df5d: mov %rdi,(%rax)
> >
> > I'd guess at popfq to be the expensive op here.. skid usually causes the
> > attribution to be a few ops down the line.
>
> I believe that Nick's workload is routinely driving the number of
> callbacks queued on a given CPU above 10,000, which would provoke numerous
> (and possibly inlined) calls to force_quiescent_state(). Like about
> 400,000 such calls per second. Hey, I was naively assuming that no one
> would see more than 10,000 callbacks queued on a single CPU unless there
> was some sort of major emergency underway, and coded accordingly. ;-)
>
> I offer the attached experimental (untested, might not even compile) patch.
Not only does it compile, but __call_rcu is now taking 1/10th the
cycles and absolute performance up nearly 20%. Looks like it is
now better than classic RCU.
I'll collect and post some more detailed numbers and profiles. Do
you want some new rcu trace results too?
Thanks,
Nick
next prev parent reply other threads:[~2009-09-03 7:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-02 9:48 tree rcu: call_rcu scalability problem? Nick Piggin
2009-09-02 12:27 ` Nick Piggin
2009-09-02 15:19 ` Paul E. McKenney
2009-09-02 16:24 ` Nick Piggin
2009-09-02 16:37 ` Paul E. McKenney
2009-09-02 16:45 ` Nick Piggin
2009-09-02 16:48 ` Paul E. McKenney
2009-09-02 17:50 ` Nick Piggin
2009-09-02 19:17 ` Peter Zijlstra
2009-09-03 5:14 ` Paul E. McKenney
2009-09-03 7:45 ` Nick Piggin [this message]
2009-09-03 9:01 ` Nick Piggin
2009-09-03 13:28 ` Paul E. McKenney
2009-09-03 7:14 ` Nick Piggin
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=20090903074510.GE979@wotan.suse.de \
--to=npiggin@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox