From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Josh Triplett <josh@joshtriplett.org>
Cc: linux-kernel@vger.kernel.org, mingo@kernel.org,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
darren@dvhart.com, fweisbec@gmail.com, oleg@redhat.com,
sbw@mit.edu
Subject: Re: [PATCH tip/core/rcu 01/45] rcutorture: Add forward-progress checking for writer
Date: Tue, 13 May 2014 11:27:38 -0700 [thread overview]
Message-ID: <20140513182738.GL18164@linux.vnet.ibm.com> (raw)
In-Reply-To: <20140510001454.GA7553@thin>
On Fri, May 09, 2014 at 05:14:54PM -0700, Josh Triplett wrote:
> On Fri, May 09, 2014 at 03:55:14PM -0700, Paul E. McKenney wrote:
> > On Fri, May 09, 2014 at 03:40:52PM -0700, Josh Triplett wrote:
> > > On Fri, May 09, 2014 at 03:30:04PM -0700, Paul E. McKenney wrote:
> > > > On Fri, May 09, 2014 at 12:32:46PM -0700, Josh Triplett wrote:
> > > > > On Fri, May 09, 2014 at 10:36:58AM -0700, Paul E. McKenney wrote:
> > > > > > On Fri, May 09, 2014 at 08:52:31AM -0700, Josh Triplett wrote:
> > > > > > > On Wed, May 07, 2014 at 04:43:13PM -0700, Paul E. McKenney wrote:
> > > > > > > > On Wed, May 07, 2014 at 02:16:49PM -0700, josh@joshtriplett.org wrote:
> > > > > > > > > On Mon, Apr 28, 2014 at 05:24:49PM -0700, Paul E. McKenney wrote:
> > > > > > > > > > From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> > > > > > > > > >
> > > > > > > > > > The rcutorture output currently does not distinguish between stalls in
> > > > > > > > > > the RCU implementation and stalls in the rcu_torture_writer() kthreads.
> > > > > > > > > > This commit therefore adds some diagnostics to help distinguish between
> > > > > > > > > > these two conditions, at least for the non-SRCU implementations. (SRCU
> > > > > > > > > > does not provide evidence of update-side forward progress by design.)
> > > > > > > > > >
> > > > > > > > > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> > > > > > > > >
> > > > > > > > > The concept makes sense, and the writer state annotations seem like a
> > > > > > > > > useful debugging mechanism, but having RCU know about RCU torture types
> > > > > > > > > seems fundamentally wrong. This mechanism accesses rcu_state, which is
> > > > > > > > > already implementation-specific, so why not just only define the
> > > > > > > > > function for the RCU implementations that support it, and then have a
> > > > > > > > > function pointer in the torture-test structure to report a stall?
> > > > > > > >
> > > > > > > > Ouch. It is worse than that! When running RCU-bh or RCU-sched,
> > > > > > > > the current code incorrectly returns the statistics for RCU.
> > > > > > > > So I do need some way for rcutorture to tell RCU which flavor
> > > > > > > > it is testing.
> > > > > > > >
> > > > > > > > One thing I could do would be to pass in a pointer to the call_rcu()
> > > > > > > > function (cur_ops->call from rcutorture's viewpoint), then scan the
> > > > > > > > rcu_state structures looking for the selected flavor (rsp->call from
> > > > > > > > tree.c's viewpoint). In the SRCU and RCU-busted cases, the flavor would
> > > > > > > > not be found, and I could then just set everything to zero.
> > > > > > > >
> > > > > > > > Does that seem reasonable, or is there a better way to do this?
> > > > > > >
> > > > > > > That search seems rather too hackish; why not just declare one
> > > > > > > stats-returning function per RCU flavor, and put the pointer to the
> > > > > > > corresponding function in the structure for each test type?
> > > > > >
> > > > > > The problem is that rcutorture doesn't know anything about the structures,
> > > > > > as those are internal to the implementation. All it knows is which
> > > > > > functions it is using. I -could- EXPORT_SYMBOL_GPL() the rcu_state
> > > > > > structures to modules (they are already non-static), then rename
> > > > > > TINY_RCU's rcu_ctrlblk to rcu_state to allow the needed type punning,
> > > > > > then do some special-case thing for SRCU, and put a pointer to whatever
> > > > > > in rcu_torture_ops, but that was feeling a bit hackish as well.
> > > > > >
> > > > > > So what did you have in mind to allow rcutorture to communicate the
> > > > > > rcuflavor to the underlying RCU implementation?
> > > > >
> > > > > Rather than EXPORT_SYMBOL_GPLing the rcu_state structures, just
> > > > > EXPORT_SYMBOL_GPL one version of rcutorture_get_gp_data per RCU flavor.
> > > > > (And hide them all behind #ifdef CONFIG_RCU_TORTURE_TEST.) Then add a
> > > > > get_gp_data field to rcu_torture_ops; if NULL, skip the stats. (Or put
> > > > > a no-op version in rcutorture.)
> > > >
> > > > But that would require me to provide these same exports from TINY_RCU,
> > > > which does not need them.
> > > >
> > > > How about exporting integers identifying the flavors of RCU to rcutorture,
> > > > which rcutorture can then pass to rcutorture_get_gp_data()? This allows
> > > > TINY_RCU to provide a trivial static inline function. TREE_RCU and
> > > > TREE_PREEMPT_RCU can keep an array of pointers to the corresponding
> > > > rcu_state structure, with NULL pointers for flavors of RCU that don't
> > > > have any data to provide.
> > > >
> > > > Would that help?
> > >
> > > Either way seems fine: a single function with an extra parameter or a
> > > unique function per flavor. But if you're going to provide the
> > > RCU-flavor integers, they should be in RCU itself and refer to RCU
> > > flavors, rather than being in rcutorture and refering to test types.
> >
> > Fair enough, will take that approach!
> >
> > I am thinking in terms of something like the following:
> >
> > RCU_FLAVOR
> > RCU_BH_FLAVOR
> > RCU_SCHED_FLAVOR
> > SRCU_FLAVOR
> > OTHER_FLAVOR
> >
> > The "OTHER_FLAVOR" would be what rcutorture uses for the "busted"
> > incorrect-on-purpose flavor of RCU, which is local to rcutorture.
> >
> > Seem reasonable, or would some other naming scheme be better?
>
> Seems reasonable to me. I'd call the last one "INVALID_RCU_FLAVOR" or
> similar.
Done!
I ended up with a switch statement rather than an array of pointers, FWIW.
Thanx, Paul
next prev parent reply other threads:[~2014-05-13 18:27 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-29 0:24 [PATCH tip/core/rcu 0/44] Torture-test changes for 3.16 Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 01/45] rcutorture: Add forward-progress checking for writer Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 02/45] torture: Remove obsolete builddir options Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 03/45] torture: Add batch headers "--dryrun sched" Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 04/45] torture: Make parse-rcutorture.sh less RCU-specific Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 05/45] torture: Rename RCU_INITRD to TORTURE_INITRD Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 06/45] torture: Intensify locking test Paul E. McKenney
2014-05-07 21:20 ` josh
2014-05-07 23:56 ` Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 07/45] torture: Allow variations of "defconfig" to be specified Paul E. McKenney
2014-05-07 21:22 ` josh
2014-05-07 23:52 ` Paul E. McKenney
2014-05-08 1:54 ` Josh Triplett
2014-05-08 2:43 ` Paul E. McKenney
2014-05-08 7:47 ` Josh Triplett
2014-04-29 0:24 ` [PATCH tip/core/rcu 08/45] torture: Rename RCU_KMAKE_ARG to TORTURE_KMAKE_ARG Paul E. McKenney
2014-05-07 21:23 ` josh
2014-05-13 19:00 ` Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 09/45] torture: Rename RCU_BOOTARGS to TORTURE_BOOTARGS Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 10/45] torture: Rename RCU_BUILDONLY to TORTURE_BUILDONLY Paul E. McKenney
2014-05-07 21:24 ` josh
2014-05-13 19:01 ` Paul E. McKenney
2014-04-29 0:24 ` [PATCH tip/core/rcu 11/45] torture: Rename RCU_QEMU_INTERACTIVE to TORTURE_QEMU_INTERACTIVE Paul E. McKenney
2014-05-07 21:26 ` josh
2014-05-07 23:59 ` Paul E. McKenney
2014-05-07 21:27 ` josh
2014-05-07 23:57 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 12/45] torture: Rename RCU_QEMU_MAC to TORTURE_QEMU_MAC Paul E. McKenney
2014-05-07 21:27 ` josh
2014-05-07 23:59 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 13/45] torture: Rename RCU_QEMU_ARG to TORTURE_QEMU_ARG Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 14/45] torture: Rename RCU_QEMU_CMD to TORTURE_QEMU_CMD Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 15/45] torture: Make config-fragment filtering RCU-independent Paul E. McKenney
2014-05-07 21:29 ` josh
2014-05-08 0:01 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 16/45] rcutorture: Mark function as static in kernel/rcu/torture.c Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 17/45] torture: Make "--dryrun script" output self-sufficient Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 18/45] torture: Make "--dryrun script" use same environment as normal run Paul E. McKenney
2014-05-07 21:33 ` josh
2014-05-08 0:07 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 19/45] rcutorture: Print negatives for SRCU counter wraparound Paul E. McKenney
2014-05-07 21:34 ` josh
2014-05-08 0:08 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 20/45] torture: Include "Stopping" string to torture_kthread_stopping() Paul E. McKenney
2014-05-07 21:37 ` josh
2014-05-10 0:13 ` Paul E. McKenney
2014-05-10 0:16 ` Josh Triplett
2014-05-10 0:42 ` Paul E. McKenney
2014-05-10 3:46 ` Josh Triplett
2014-05-13 19:05 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 21/45] torture: Report diagnostics from qemu Paul E. McKenney
2014-05-07 21:59 ` josh
2014-05-13 23:03 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 22/45] torture: Increase stutter-end intensity Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 23/45] torture: Permit multi-word qemu and boot arguments Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 24/45] torture: Choose bzImage location based on architecture Paul E. McKenney
2014-05-07 22:02 ` josh
2014-05-10 0:31 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 25/45] torture: Add tracing-enabled variant of TREE02 Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 26/45] torture: Dump ftrace buffer when the RCU grace period stalls Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 27/45] rcutorture: Export RCU grace-period kthread wait state to rcutorture Paul E. McKenney
2014-05-07 22:05 ` josh
2014-05-10 0:37 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 28/45] percpu: Fix raw_cpu_inc_return() Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 29/45] sched,rcu: Make cond_resched() report RCU quiescent states Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 30/45] rcutorture: Make rcu_torture_reader() use cond_resched() Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 31/45] torture: Notice if an all-zero cpumask is passed inside a critical section Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 32/45] torture: Better summary diagnostics for build failures Paul E. McKenney
2014-05-07 22:11 ` josh
2014-05-10 0:48 ` Paul E. McKenney
2014-05-10 19:34 ` Josh Triplett
2014-05-13 19:25 ` Paul E. McKenney
2014-05-13 20:21 ` josh
2014-05-13 20:33 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 33/45] rcutorture: Check for rcu_torture_fqs creation errors Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 34/45] torture: Use elapsed time to detect hangs Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 35/45] rcutorture: Test RCU-sched primitives in TREE_PREEMPT_RCU kernels Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 36/45] rcutorture: Add tests for get_state_synchronize_rcu() Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 37/45] rcutorture: Explicitly test synchronous grace-period primitives Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 38/45] rcutorture: Add missing destroy_timer_on_stack() Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 39/45] rcutorture: Note diffs from git commits Paul E. McKenney
2014-05-07 22:17 ` josh
2014-05-10 0:51 ` Paul E. McKenney
2014-05-10 5:19 ` Josh Triplett
2014-05-13 23:17 ` Paul E. McKenney
2014-05-13 23:39 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 40/45] rcutorture: Run rcu_torture_writer at normal priority Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 41/45] torture: Put qemu into the background Paul E. McKenney
2014-05-07 22:18 ` josh
2014-05-13 17:44 ` Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 42/45] locktorture: Remove reference to nonexistent Kconfig parameter Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 43/45] torture: Check for multiple concurrent torture tests Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 44/45] torture: Remove __init from torture_init_begin/end Paul E. McKenney
2014-04-29 0:25 ` [PATCH tip/core/rcu 45/45] torture: Remove unused definition Paul E. McKenney
2014-05-07 21:16 ` [PATCH tip/core/rcu 01/45] rcutorture: Add forward-progress checking for writer josh
2014-05-07 23:43 ` Paul E. McKenney
2014-05-09 15:52 ` Josh Triplett
2014-05-09 17:36 ` Paul E. McKenney
2014-05-09 19:32 ` Josh Triplett
2014-05-09 22:30 ` Paul E. McKenney
2014-05-09 22:40 ` Josh Triplett
2014-05-09 22:55 ` Paul E. McKenney
2014-05-10 0:14 ` Josh Triplett
2014-05-10 0:31 ` Paul E. McKenney
2014-05-13 18:27 ` Paul E. McKenney [this message]
2014-05-07 22:32 ` [PATCH tip/core/rcu 0/44] Torture-test changes for 3.16 Josh Triplett
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=20140513182738.GL18164@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=darren@dvhart.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=niv@us.ibm.com \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sbw@mit.edu \
--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.