From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Josh Triplett <josh@joshtriplett.org>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, Valdis.Kletnieks@vt.edu,
dhowells@redhat.com, eric.dumazet@gmail.com, darren@dvhart.com,
patches@linaro.org, "Paul E. McKenney" <paul.mckenney@linaro.org>
Subject: Re: [PATCH tip/core/rcu 2/9] rcu: Add rcutorture system-shutdown capability
Date: Wed, 16 Nov 2011 12:32:26 -0800 [thread overview]
Message-ID: <20111116203226.GK2355@linux.vnet.ibm.com> (raw)
In-Reply-To: <20111115214615.GD31473@leaf>
On Tue, Nov 15, 2011 at 01:46:15PM -0800, Josh Triplett wrote:
> On Tue, Nov 15, 2011 at 12:27:58PM -0800, Paul E. McKenney wrote:
> > From: Paul E. McKenney <paul.mckenney@linaro.org>
> >
> > Although it is easy to run rcutorture tests under KVM, there is currently
> > no nice way to run such a test for a fixed time period, collect all of
> > the rcutorture data, and then shut the system down cleanly. This commit
> > therefore adds an rcutorture module parameter named "shutdown_secs" that
> > specified the run duration in seconds, after which rcutorture terminates
> > the test and powers the system down. The default value for "shutdown_secs"
> > is zero, which disables shutdown.
> >
> > Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> >From your recent post on this, I thought you found a solution through
> the init= parameter, which seems preferable.
For some things, the init= parameter does work great. I do intend to
use it when collecting event-tracing and debugfs data, for example.
However, there is still a need for RCU torture testing that will operate
correctly regardless of how userspace is set up. That, and there are
quite a few different kernel test setup, each with their own peculiar
capabilities and limitations. So what happened was that before people
suggested the init= approach, I implemented enough of the in-kernel
approach to appreciate how much it simplifies life for the common case of
"just torture-test RCU". As in I should have done this long ago.
I will therefore be taking both approaches. There will be at least one
more patch pushing what is now script into rcutorture.c.
> > --- a/kernel/rcutorture.c
> > +++ b/kernel/rcutorture.c
> > @@ -61,9 +61,10 @@ static int test_no_idle_hz; /* Test RCU's support for tickless idle CPUs. */
> > static int shuffle_interval = 3; /* Interval between shuffles (in sec)*/
> > static int stutter = 5; /* Start/stop testing interval (in sec) */
> > static int irqreader = 1; /* RCU readers from irq (timers). */
> > -static int fqs_duration = 0; /* Duration of bursts (us), 0 to disable. */
> > -static int fqs_holdoff = 0; /* Hold time within burst (us). */
> > +static int fqs_duration; /* Duration of bursts (us), 0 to disable. */
> > +static int fqs_holdoff; /* Hold time within burst (us). */
>
> Looks like these lines picked up unrelated whitespace changes in this
> commit.
Turns out that my initial patch added another variable that I explicitly
initialized to zero. Of course, checkpatch yelled at me about this, so
I figured I should fix the other nearby occurrences of this while I was
at it. Doesn't really seem to me to be worth a separate patch, though.
> > @@ -1305,6 +1313,37 @@ static int rcutorture_booster_init(int cpu)
> > return 0;
> > }
> >
> > +/*
> > + * Cause the rcutorture test to "stutter", starting and stopping all
> > + * threads periodically.
> > + */
>
> This comment looks like a copy-paste error.
Or maybe a copy-paste stutter. ;-)
Good eyes, fixed!
> > +static int
> > +rcu_torture_shutdown(void *arg)
> > +{
> > + VERBOSE_PRINTK_STRING("rcu_torture_shutdown task started");
> > + while (ULONG_CMP_LT(jiffies, shutdown_time) &&
> > + !kthread_should_stop()) {
> > + if (verbose)
> > + printk(KERN_ALERT "%s" TORTURE_FLAG
> > + "rcu_torture_shutdown task: %lu "
> > + "jiffies remaining\n",
> > + torture_type, shutdown_time - jiffies);
> > + schedule_timeout_interruptible(HZ);
> > + }
>
> Any particular reason to wake up once a second here? If !verbose, this could just
> sleep until shutdown time. (And does the verbose output really help
> here, given printk timestamps?)
It actually did help me find a bug where it was failing to shut down.
I could use different code paths, but that would defeat the debugging.
So I increased the sleep time to 30 seconds. Fair enough?
> > + if (ULONG_CMP_LT(jiffies, shutdown_time)) {
> > + VERBOSE_PRINTK_STRING("rcu_torture_shutdown task stopping");
> > + return 0;
> > + }
> > +
> > + /* OK, shut down the system. */
> > +
> > + VERBOSE_PRINTK_STRING("rcu_torture_shutdown task shutting down system");
> > + shutdown_task = NULL; /* Avoid self-kill deadlock. */
>
> Not that it matters much here, but won't this cause a leak?
Only if we are shutting down. And the alternative is a deadlock
where this task invokes kthread_stop() on itself. ;-)
> > + rcu_torture_cleanup(); /* Get the success/failure message. */
> > + kernel_power_off(); /* Shut down the system. */
> > + return 0;
> > +}
>
> Huh. I would have expected kernel_power_off to use noreturn, making the
> return 0 unnecessary here; however, apparently it doesn't.
Indeed, gcc yelled at me, so I added the "return 0". ;-)
Thanx, Paul
next prev parent reply other threads:[~2011-11-16 20:38 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-15 20:27 [PATCH tip/core/rcu 0/9] Preview of additional RCU changes for 3.3 Paul E. McKenney
2011-11-15 20:27 ` [PATCH tip/core/rcu 1/9] rcu: Permit RCU_FAST_NO_HZ to be used by TREE_PREEMPT_RCU Paul E. McKenney
2011-11-15 20:27 ` [PATCH tip/core/rcu 2/9] rcu: Add rcutorture system-shutdown capability Paul E. McKenney
2011-11-15 21:46 ` Josh Triplett
2011-11-16 20:32 ` Paul E. McKenney [this message]
2011-11-16 22:15 ` Josh Triplett
2011-11-16 22:44 ` Paul E. McKenney
2011-11-16 22:58 ` Josh Triplett
2011-11-16 23:43 ` Paul E. McKenney
2011-11-17 0:48 ` Josh Triplett
2011-11-17 0:49 ` Josh Triplett
2011-11-17 1:40 ` Paul E. McKenney
2011-11-17 23:57 ` Josh Triplett
2011-11-18 0:27 ` Paul E. McKenney
2011-11-15 20:27 ` [PATCH tip/core/rcu 3/9] rcu: Control rcutorture startup from kernel boot parameters Paul E. McKenney
2011-11-15 21:49 ` Josh Triplett
2011-11-16 20:38 ` Paul E. McKenney
2011-11-16 22:17 ` Josh Triplett
2011-11-15 20:28 ` [PATCH tip/core/rcu 4/9] sched: add is_idle_task() to handle invalidated uses of idle_cpu() Paul E. McKenney
2011-11-15 21:13 ` Josh Triplett
2011-11-16 19:54 ` Paul E. McKenney
2011-11-15 20:28 ` [PATCH tip/core/rcu 5/9] rcu: Make RCU use the new is_idle_task() API Paul E. McKenney
2011-11-15 21:35 ` Josh Triplett
2011-11-15 20:28 ` [PATCH tip/core/rcu 6/9] sparc: Make SPARC " Paul E. McKenney
2011-11-15 21:15 ` David Miller
2011-11-15 20:28 ` [PATCH tip/core/rcu 7/9] kdb: Make KDB " Paul E. McKenney
2011-11-15 20:28 ` [PATCH tip/core/rcu 8/9] events: Make events " Paul E. McKenney
2011-11-15 20:28 ` [PATCH tip/core/rcu 9/9] tile: Make tile " Paul E. McKenney
2011-11-23 17:03 ` Chris Metcalf
2011-11-28 23:02 ` Paul E. McKenney
2011-11-15 21:50 ` [PATCH tip/core/rcu 0/9] Preview of additional RCU changes for 3.3 Josh Triplett
2011-11-16 20:39 ` 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=20111116203226.GK2355@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=darren@dvhart.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=eric.dumazet@gmail.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=niv@us.ibm.com \
--cc=patches@linaro.org \
--cc=paul.mckenney@linaro.org \
--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.