From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
fweisbec@gmail.com, oleg@redhat.com, joel@joelfernandes.org,
"Paul E . McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 09/13] rcutorture: Disable RT throttling for boost tests
Date: Mon, 25 Jun 2018 17:52:23 -0700 [thread overview]
Message-ID: <20180626005227.30660-9-paulmck@linux.vnet.ibm.com> (raw)
In-Reply-To: <20180626005205.GA28179@linux.vnet.ibm.com>
From: "Joel Fernandes (Google)" <joel@joelfernandes.org>
Currently rcutorture is not able to torture RCU boosting properly. This
is because the rcutorture's boost threads which are doing the torturing
may be throttled due to RT throttling.
This patch makes rcutorture use the right torture technique (unthrottled
rcutorture boost tasks) for torturing RCU so that the test fails
correctly when no boost is available.
Currently this requires accessing sysctl_sched_rt_runtime directly, but
that should be Ok since rcutorture is test code. Such direct access is
also only possible if rcutorture is used as a built-in so make it
conditional on that.
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
kernel/rcu/rcutorture.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index aa0be7ec2a26..74e47d0a618c 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -55,6 +55,7 @@
#include <linux/torture.h>
#include <linux/vmalloc.h>
#include <linux/sched/debug.h>
+#include <linux/sched/sysctl.h>
#include "rcu.h"
@@ -772,6 +773,32 @@ static void rcu_torture_boost_cb(struct rcu_head *head)
smp_store_release(&rbip->inflight, 0);
}
+static int old_rt_runtime = -1;
+
+static void rcu_torture_disable_rt_throttle(void)
+{
+ /*
+ * Disable RT throttling so that rcutorture's boost threads don't get
+ * throttled. Only possible if rcutorture is built-in otherwise the
+ * user should manually do this by setting the sched_rt_period_us and
+ * sched_rt_runtime sysctls.
+ */
+ if (!IS_BUILTIN(CONFIG_RCU_TORTURE_TEST) || old_rt_runtime != -1)
+ return;
+
+ old_rt_runtime = sysctl_sched_rt_runtime;
+ sysctl_sched_rt_runtime = -1;
+}
+
+static void rcu_torture_enable_rt_throttle(void)
+{
+ if (!IS_BUILTIN(CONFIG_RCU_TORTURE_TEST) || old_rt_runtime == -1)
+ return;
+
+ sysctl_sched_rt_runtime = old_rt_runtime;
+ old_rt_runtime = -1;
+}
+
static int rcu_torture_boost(void *arg)
{
unsigned long call_rcu_time;
@@ -1511,6 +1538,7 @@ static int rcutorture_booster_cleanup(unsigned int cpu)
mutex_lock(&boost_mutex);
t = boost_tasks[cpu];
boost_tasks[cpu] = NULL;
+ rcu_torture_enable_rt_throttle();
mutex_unlock(&boost_mutex);
/* This must be outside of the mutex, otherwise deadlock! */
@@ -1527,6 +1555,7 @@ static int rcutorture_booster_init(unsigned int cpu)
/* Don't allow time recalculation while creating a new task. */
mutex_lock(&boost_mutex);
+ rcu_torture_disable_rt_throttle();
VERBOSE_TOROUT_STRING("Creating rcu_torture_boost task");
boost_tasks[cpu] = kthread_create_on_node(rcu_torture_boost, NULL,
cpu_to_node(cpu),
--
2.17.1
next prev parent reply other threads:[~2018-06-26 0:52 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-26 0:52 [PATCH tip/core/rcu 0/13] Post-gp_seq torture-test updates Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 01/13] rcu: Remove rcutorture test version and sequence number Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 02/13] rcuperf: Remove unused torturing_tasks() function Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 03/13] rcutorture: Extract common code from rcu_torture_reader() Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 04/13] rcutorture: Use atomic increment for n_rcu_torture_timers Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 05/13] rcutorture: Use per-CPU random state for rcu_torture_timer() Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 06/13] rcutorture: Make rcu_torture_timer() use rcu_torture_one_read() Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 07/13] rcutorture: Handle extended read-side critical sections Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 08/13] rcutorture: Emphasize testing of single reader protection type Paul E. McKenney
2018-06-26 0:52 ` Paul E. McKenney [this message]
2018-06-26 0:52 ` [PATCH tip/core/rcu 10/13] rcutorture: Make boost test more robust Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 11/13] rcutorture: Use monotonic timestamp for stall detection Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 12/13] rcutorture: Add support to detect if boost kthread prio is too low Paul E. McKenney
2018-06-26 0:52 ` [PATCH tip/core/rcu 13/13] rcutorture: Fix rcu_barrier successes counter 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=20180626005227.30660-9-paulmck@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®