torture: Increase stutter-end intensity
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 4 Mar 2014 19:03:21 +0000 (11:03 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 14 May 2014 16:46:02 +0000 (09:46 -0700)
Currently, all stuttered kthreads block a jiffy at a time, which can
result in them starting at different times.  (Note: This is not an
energy-efficiency problem unless you run torture tests in production,
in which case you have other problems!)  This commit increases the
intensity of the restart event by causing kthreads to spin through the
last jiffy, restarting when they see the variable change.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
kernel/torture.c

index e5af6be2594db1f5857734d8277810030520fe00..bc0ee382b3c84258b5033a84fed54200b7bef7ec 100644 (file)
@@ -533,7 +533,11 @@ void stutter_wait(const char *title)
        while (ACCESS_ONCE(stutter_pause_test) ||
               (torture_runnable && !ACCESS_ONCE(*torture_runnable))) {
                if (stutter_pause_test)
-                       schedule_timeout_interruptible(1);
+                       if (ACCESS_ONCE(stutter_pause_test) == 1)
+                               schedule_timeout_interruptible(1);
+                       else
+                               while (ACCESS_ONCE(stutter_pause_test))
+                                       cond_resched();
                else
                        schedule_timeout_interruptible(round_jiffies_relative(HZ));
                torture_shutdown_absorb(title);
@@ -550,7 +554,11 @@ static int torture_stutter(void *arg)
        VERBOSE_TOROUT_STRING("torture_stutter task started");
        do {
                if (!torture_must_stop()) {
-                       schedule_timeout_interruptible(stutter);
+                       if (stutter > 1) {
+                               schedule_timeout_interruptible(stutter - 1);
+                               ACCESS_ONCE(stutter_pause_test) = 2;
+                       }
+                       schedule_timeout_interruptible(1);
                        ACCESS_ONCE(stutter_pause_test) = 1;
                }
                if (!torture_must_stop())
This page took 0.025655 seconds and 5 git commands to generate.