From: Josh Triplett <josh@joshtriplett.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
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 14:58:56 -0800 [thread overview]
Message-ID: <20111116225856.GD2325@leaf> (raw)
In-Reply-To: <20111116224447.GO2355@linux.vnet.ibm.com>
On Wed, Nov 16, 2011 at 02:44:47PM -0800, Paul E. McKenney wrote:
> On Wed, Nov 16, 2011 at 02:15:45PM -0800, Josh Triplett wrote:
> > On Wed, Nov 16, 2011 at 12:32:26PM -0800, Paul E. McKenney wrote:
> > > 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.
> >
> > Seems like it would work just as easily to point init at a statically
> > linked C program which just sleeps for a fixed time and then shuts down.
> > However, given the special-purpose nature of rcutorture, I won't
> > complain that strongly.
>
> I did consider a statically linked C program, but that can introduce the
> need for cross-compilation into situations that do not otherwise need it.
Wouldn't you need to cross-compile the kernel anyway in such situations?
> > > > > +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?
> >
> > Well, now that you've debugged rcutorture's shutdown routine, would it
> > suffice to have a printk when you actually go to shut down, without
> > waking up for previous printks when not shutting down yet?
> >
> > (The poll time doesn't really matter, and sleeping for 30 seconds before
> > checking the time means you might overshoot by up to 30 seconds. I'd
> > like to avoid polling to begin with when you know exactly how long you
> > need to sleep.)
>
> Indeed, good points! But please see below for what this function turns
> into when taking that approach.
See below for responses; that version seems like an improvement, though
it could still improve further.
> rcu_torture_shutdown(void *arg)
> {
> long delta;
> unsigned long jiffies_snap;
>
> VERBOSE_PRINTK_STRING("rcu_torture_shutdown task started");
> jiffies_snap = ACCESS_ONCE(jiffies);
Why do you need to snapshot jiffies in this version but not in the
version you originally posted?
> while (ULONG_CMP_LT(jiffies_snap, shutdown_time) &&
> !kthread_should_stop()) {
> delta = shutdown_time - jiffies_snap;
> if (verbose)
> printk(KERN_ALERT "%s" TORTURE_FLAG
> "rcu_torture_shutdown task: %lu "
> "jiffies remaining\n",
> torture_type, delta);
I suggested dropping this print entirely; under normal circumstances it
should never print. It will only print if
schedule_timeout_interruptible wakes up spuriously.
> schedule_timeout_interruptible(delta);
> jiffies_snap = ACCESS_ONCE(jiffies);
> }
Any reason this entire loop body couldn't just become
msleep_interruptible()?
> if (ULONG_CMP_LT(jiffies_snap, shutdown_time)) {
> VERBOSE_PRINTK_STRING("rcu_torture_shutdown task stopping");
> return 0;
> }
Writing this as "if (kthread_should_stop())" seems clearer.
- Josh Triplett
next prev parent reply other threads:[~2011-11-16 22:59 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
2011-11-16 22:15 ` Josh Triplett
2011-11-16 22:44 ` Paul E. McKenney
2011-11-16 22:58 ` Josh Triplett [this message]
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=20111116225856.GD2325@leaf \
--to=josh@joshtriplett.org \
--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=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=paulmck@linux.vnet.ibm.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.