rcuperf: Add writer_holdoff boot parameter
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 25 Apr 2017 22:12:56 +0000 (15:12 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 8 Jun 2017 15:25:32 +0000 (08:25 -0700)
This commit adds a writer_holdoff boot parameter to rcuperf, which is
intended to be used to test Tree SRCU's auto-expediting.  This
boot parameter is in microseconds, and defaults to zero (that is,
disabled).  Set it to a bit larger than srcutree.exp_holdoff,
keeping the nanosecond/microsecond conversion, to force Tree SRCU
to auto-expedite more aggressively.

This commit also adds documentation for this parameter, and fixes some
alphabetization while in the neighborhood.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Documentation/admin-guide/kernel-parameters.txt
kernel/rcu/rcuperf.c

index 3598464ca8edaaea60744307f491e731cc511684..01b5ab92d2516a4153ba3964f68c458e8b3a41a7 100644 (file)
        rcuperf.perf_runnable= [BOOT]
                        Start rcuperf running at boot time.
 
+       rcuperf.perf_type= [KNL]
+                       Specify the RCU implementation to test.
+
        rcuperf.shutdown= [KNL]
                        Shut the system down after performance tests
                        complete.  This is useful for hands-off automated
                        testing.
 
-       rcuperf.perf_type= [KNL]
-                       Specify the RCU implementation to test.
-
        rcuperf.verbose= [KNL]
                        Enable additional printk() statements.
 
+       rcuperf.writer_holdoff= [KNL]
+                       Write-side holdoff between grace periods,
+                       in microseconds.  The default of zero says
+                       no holdoff.
+
        rcutorture.cbflood_inter_holdoff= [KNL]
                        Set holdoff time (jiffies) between successive
                        callback-flood tests.
index 49c8ed6bd2fda2fe461eb9237d8b9b4913751287..d80f11d9f8bdaccaa9e681473735ac4c37de488e 100644 (file)
@@ -68,6 +68,7 @@ torture_param(int, nwriters, -1, "Number of RCU updater threads");
 torture_param(bool, shutdown, !IS_ENABLED(MODULE),
              "Shutdown at end of performance tests.");
 torture_param(bool, verbose, true, "Enable verbose debugging printk()s");
+torture_param(int, writer_holdoff, 0, "Holdoff (us) between GPs, zero to disable");
 
 static char *perf_type = "rcu";
 module_param(perf_type, charp, 0444);
@@ -447,6 +448,8 @@ rcu_perf_writer(void *arg)
        }
 
        do {
+               if (writer_holdoff)
+                       udelay(writer_holdoff);
                wdp = &wdpp[i];
                *wdp = ktime_get_mono_fast_ns();
                if (gp_async) {