From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org,
dhowells@redhat.com, edumazet@google.com, dvhart@linux.intel.com,
fweisbec@gmail.com, oleg@redhat.com, bobby.prani@gmail.com,
Alexander Gordeev <agordeev@redhat.com>
Subject: Re: [PATCH tip/core/rcu 02/12] rcu: Panic if RCU tree can not accommodate all CPUs
Date: Thu, 30 Jul 2015 09:01:41 -0700 [thread overview]
Message-ID: <20150730160141.GI27280@linux.vnet.ibm.com> (raw)
In-Reply-To: <20150730153424.GR18673@twins.programming.kicks-ass.net>
On Thu, Jul 30, 2015 at 05:34:24PM +0200, Peter Zijlstra wrote:
> On Thu, Jul 30, 2015 at 05:32:51PM +0200, Peter Zijlstra wrote:
> > On Thu, Jul 30, 2015 at 08:25:17AM -0700, Paul E. McKenney wrote:
> > > On Thu, Jul 30, 2015 at 02:28:35PM +0200, Peter Zijlstra wrote:
> > > > On Fri, Jul 17, 2015 at 03:30:53PM -0700, Paul E. McKenney wrote:
> > > > > + if (n > rcu_capacity[MAX_RCU_LVLS])
> > > > > + panic("rcu_init_geometry: rcu_capacity[] is too small");
> > > >
> > > > How can this ever happen? We _know_ NR_CPUS at compile time, there's no
> > > > way we can get more CPUs than that -- even if the hardware has more,
> > > > we'll stop enumerating.
> > >
> > > You can make this happen by building with CONFIG_RCU_FANOUT=2 and
> > > CONFIG_RCU_FANOUT_LEAF=2, then running on a system with more than 16 CPUs.
> > > The kernel boot parameter rcutree.rcu_fanout_leaf=2 can be substituted for
> > > CONFIG_RCU_FANOUT_LEAF=2, hence the need for a runtime test. I do this
> > > sort of thing for my rcutorture testing in order to test a four-level
> > > rcu_node tree with only 16 CPUs.
> >
> > How about we make the build fail if NR_CPUS exceeds that maximum fanout?
>
> Or better yet, auto-select these numbers based on NR_CPUS and remove the
> configs.
The current strategy is to default CONFIG_RCU_FANOUT to 32 on 32-bit
systems and to 64 on 64-bit systems, and to default CONFIG_RCU_FANOUT_LEAF
to 16. This accommodates up to 4,194,304 CPUs, which should be enough
for anyone (famous last words!). At boot time, RCU automatically shrinks
its combining tree based on the value of nr_cpu_ids. So the overall
effect is that very few people should need to mess with these RCU
parameters.
The purpose of the CONFIG_RCU_FANOUT_LEAF=16 default is to keep
lock contention down to a dull roar on systems that deliver the
scheduling-clock interrupts simultaneously across all CPUs, and you should
boot with skew_tick if you want to set CONFIG_RCU_FANOUT_LEAF larger.
Thanx, Paul
next prev parent reply other threads:[~2015-07-30 16:13 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-17 22:30 [PATCH tip/core/rcu 0/12] Tree geometry-initialization simplifications for 4.3 Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 01/12] rcu: Provide more diagnostics for stalled GP kthread Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 02/12] rcu: Panic if RCU tree can not accommodate all CPUs Paul E. McKenney
2015-07-30 12:28 ` Peter Zijlstra
2015-07-30 15:25 ` Paul E. McKenney
2015-07-30 15:32 ` Peter Zijlstra
2015-07-30 15:34 ` Peter Zijlstra
2015-07-30 16:01 ` Paul E. McKenney [this message]
2015-07-30 15:54 ` Paul E. McKenney
2015-07-30 16:22 ` Peter Zijlstra
2015-07-31 15:53 ` Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 03/12] rcu: Remove superfluous local variable in rcu_init_geometry() Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 04/12] rcu: Cleanup rcu_init_geometry() code and arithmetics Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 05/12] rcu: Simplify rcu_init_geometry() capacity arithmetics Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 06/12] rcu: Limit rcu_state::levelcnt[] to RCU_NUM_LVLS items Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 07/12] rcu: Limit rcu_capacity[] size " Paul E. McKenney
2015-07-17 22:30 ` [PATCH tip/core/rcu 08/12] rcu: Remove unnecessary fields from rcu_state structure Paul E. McKenney
2015-07-17 22:31 ` [PATCH tip/core/rcu 09/12] rcu: Limit count of static data to the number of RCU levels Paul E. McKenney
2015-07-17 22:31 ` [PATCH tip/core/rcu 10/12] rcu: Simplify arithmetic to calculate number of RCU nodes Paul E. McKenney
2015-07-17 22:31 ` [PATCH tip/core/rcu 11/12] rcu: Shut up bogus gcc array bounds warning Paul E. McKenney
2015-07-17 22:31 ` [PATCH tip/core/rcu 12/12] rcu: Reset rcu_fanout_leaf if out of bounds 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=20150730160141.GI27280@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=agordeev@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=bobby.prani@gmail.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhart@linux.intel.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--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 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).