Re: [PATCH 3/9] rcu: Cleanup rcu_init_geometry() code and arithmetics

From: Paul E. McKenney
Date: Sat Mar 07 2015 - 16:47:16 EST


On Sat, Mar 07, 2015 at 06:59:54PM +0000, Alexander Gordeev wrote:
> On Sat, Mar 07, 2015 at 10:08:21AM -0800, Paul E. McKenney wrote:
> > The rest of this series looks promising, but I do have to ask... How have
> > you tested these? The most straightforward approach would be to find
>
> I tried trees with 1,2 and 3 levels on a 160-CPU machine + dozens of kernel
> builds with 'make -j160'. I feel bit guilty I did not try the corner case
> with 4 levels, but run-time-wise it is not really differ from what I done.
>
> Do you expect the below is a better option?

What you did is not bad, actually. You can get four levels by building
with both CONFIG_RCU_FANOUT and CONFIG_RCU_FANOUT_LEAF equal to five,
and that will also test non-power-of-two choices. You do that, and I
will give your series a shot.

What I need to do is to create a user-level test that does the full
exhaustive test, varying:

o NR_CPUS from 1 to 4096
o nr_cpu_ids from 1 to NR_CPUS
o CONFIG_RCU_FANOUT from 2 to 64
o CONFIG_RCU_FANOUT_LEAF from 2 to 64
o CONFIG_RCU_FANOUT_EXACT from n to y

Unfortunately, if each test case took one millisecond, this would take
two years. Not so good when a new version of Linux comes out every
couple of months. Of course, this could be paralellized, but still...

So I should focus on the values actually used, especially for NR_CPUS:

o NR_CPUS from 1 to 4096 by powers of two, for 13 combinations
o nr_cpu_ids from 1 to NR_CPUS
o CONFIG_RCU_FANOUT of 32 or 64
o CONFIG_RCU_FANOUT_LEAF of 16, 32, or 64
o CONFIG_RCU_FANOUT_EXACT of n or y

This is 268,435,452 test cases, which is about tree days at one
millisecond per case. (My current single-use manual-inspection test
takes eight milliseconds, but then again it is printing out tons of
stuff.) But I do need to add at least a few oddball values -- there
was a bug for some years that happened only with CONFIG_RCU_FANOUT and
CONFIG_RCU_FANOUT_LEAF not dividing evenly.

Or maybe I can use cbmc and make things faster.

Anyway, again, if you do the test with CONFIG_RCU_FANOUT and
CONFIG_RCU_FANOUT_LEAF equal to five, this user-level testing is my
problem rather than yours.

Thanx, Paul

> > a KVM-capable system with at least 16 CPUs and type the following from
> > the top-level directory:
> >
> > sh tools/testing/selftests/rcutorture/bin/kvm.sh --cpus 34 --duration 5
> >
> > This will do a series of 16 build-boot-test cycles with various configs
> > (including various rcu_node tree shapes), and print a summary of the
> > outcome at the end.
> >
> > For these sorts of changes, I usually also do some user-level testing.
>
>
> --
> Regards,
> Alexander Gordeev
> agordeev@xxxxxxxxxx
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/