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 08:54:54 -0700 [thread overview]
Message-ID: <20150730155454.GH27280@linux.vnet.ibm.com> (raw)
In-Reply-To: <20150730153251.GL25159@twins.programming.kicks-ass.net>
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?
Good point, and it already does, and I clearly was confused, apologies.
So the real way to make this happen is (for example) to build
with CONFIG_RCU_FANOUT=2 and CONFIG_RCU_FANOUT_LEAF=16 (the
default), which could accommodate up to 128 CPUs. Then boot with
rcutree.rcu_fanout_leaf=2 on a system with more than 16 CPUs, with
rcutree.rcu_fanout_leaf=3 on a system with more than 24 CPUs, and so on.
Of course, the truly macho way to get this error message is to build
with CONFIG_RCU_FANOUT=64 and CONFIG_RCU_FANOUT_LEAF=64, then boot with
rcutree.rcu_fanout_leaf=63 on a system with more than 16,515,072 CPUs.
Of course, you get serious style points if the system manages to stay
up for more than 24 hours without a hardware failure. ;-)
Thanx, Paul
next prev parent reply other threads:[~2015-07-30 15:55 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
2015-07-30 15:54 ` Paul E. McKenney [this message]
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=20150730155454.GH27280@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 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.