From: Clark Williams <clark.williams@gmail.com>
To: "Paul E. McKenney" <paulmck@us.ibm.com>,
LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH] rcu: unify boost and kthread priorities
Date: Mon, 15 Sep 2014 10:05:24 -0500 [thread overview]
Message-ID: <20140915100524.2cd80d2e@sluggy> (raw)
[-- Attachment #1: Type: text/plain, Size: 5467 bytes --]
Paul,
Here's the result of our conversation Friday, regarding the per-CPU and
boost priorities:
Rename CONFIG_RCU_BOOST_PRIO to CONFIG_RCU_KTHREAD_PRIO and use this
value for both the per-CPU kthreads (rcuc/N) and the rcu boosting
threads (rcub/n).
Also, create the module_parameter rcutree.kthread_prio to be used on
the kernel command line at boot to set a new value
(rcutree.kthread_prio=N).
Signed-off-by: Clark Williams <clark.williams@gmail.com>
---
Documentation/kernel-parameters.txt | 6 ++++++
init/Kconfig | 23 ++++++++++++-----------
kernel/rcu/tree_plugin.h | 16 ++++++++--------
3 files changed, 26 insertions(+), 19 deletions(-)
diff --git a/Documentation/kernel-parameters.txt
b/Documentation/kernel-parameters.txt index 10d51c2f10d7..471f885ab24d
100644 --- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2856,6 +2856,12 @@ bytes respectively. Such letter suffixes can
also be entirely omitted. quiescent states. Units are jiffies, minimum
value is one, and maximum value is HZ.
+ rcutree.kthread_prio= [KNL,BOOT]
+ Set the SCHED_FIFO priority of the RCU
+ per-CPU kthreads (rcuc/N). This value is also
+ used for the priority of the RCU boost threads
+ (rcub/N). Valid values are 1-99.
+
rcutree.rcu_nocb_leader_stride= [KNL]
Set the number of NOCB kthread groups, which
defaults to the square root of the number of
diff --git a/init/Kconfig b/init/Kconfig
index e84c6423a2e5..beacc8bb1523 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -662,30 +662,31 @@ config RCU_BOOST
Say Y here if you are working with real-time apps or heavy
loads Say N here if you are unsure.
-config RCU_BOOST_PRIO
- int "Real-time priority to boost RCU readers to"
+config RCU_KTHREAD_PRIO
+ int "Real-time priority to use for RCU worker threads"
range 1 99
depends on RCU_BOOST
default 1
help
- This option specifies the real-time priority to which
long-term
- preempted RCU readers are to be boosted. If you are working
- with a real-time application that has one or more CPU-bound
- threads running at a real-time priority level, you should set
- RCU_BOOST_PRIO to a priority higher then the highest-priority
- real-time CPU-bound thread. The default RCU_BOOST_PRIO value
- of 1 is appropriate in the common case, which is real-time
+ This option specifies the SCHED_FIFO priority value that
will be
+ assigned to the rcuc/n and rcub/n threads and is also the
value
+ used for RCU_BOOST (if enabled). If you are working with a
+ real-time application that has one or more CPU-bound threads
+ running at a real-time priority level, you should set
+ RCU_KTHREAD_PRIO to a priority higher than the
highest-priority
+ real-time CPU-bound application thread. The default
RCU_KTHREAD_PRIO
+ value of 1 is appropriate in the common case, which is
real-time applications that do not have any CPU-bound threads.
Some real-time applications might not have a single real-time
thread that saturates a given CPU, but instead might have
multiple real-time threads that, taken together, fully
utilize
- that CPU. In this case, you should set RCU_BOOST_PRIO to
+ that CPU. In this case, you should set RCU_KTHREAD_PRIO to
a priority higher than the lowest-priority thread that is
conspiring to prevent the CPU from running any non-real-time
tasks. For example, if one thread at priority 10 and another
thread at priority 5 are between themselves fully consuming
- the CPU time on a given CPU, then RCU_BOOST_PRIO should be
+ the CPU time on a given CPU, then RCU_KTHREAD_PRIO should be
set to priority 6 or higher.
Specify the real-time priority, or take the default if
unsure. diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index a7997e272564..dfb3b793b80a 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -30,13 +30,10 @@
#include <linux/smpboot.h>
#include "../time/tick-internal.h"
-#define RCU_KTHREAD_PRIO 1
-
#ifdef CONFIG_RCU_BOOST
-#include "../locking/rtmutex_common.h"
-#define RCU_BOOST_PRIO CONFIG_RCU_BOOST_PRIO
-#else
-#define RCU_BOOST_PRIO RCU_KTHREAD_PRIO
+/* rcuc/rcub kthread realtime priority */
+static int kthread_prio = CONFIG_RCU_KTHREAD_PRIO;
+module_param(kthread_prio, int, 0644);
#endif
#ifdef CONFIG_RCU_NOCB_CPU
@@ -112,6 +109,9 @@ static void __init rcu_bootup_announce_oddness(void)
pr_info("\tPoll for callbacks from no-CBs
CPUs.\n"); }
#endif /* #ifdef CONFIG_RCU_NOCB_CPU */
+#ifdef CONFIG_RCU_BOOST
+ pr_info("\tRCU kthread priority: %d.\n", kthread_prio);
+#endif
}
#ifdef CONFIG_TREE_PREEMPT_RCU
@@ -1352,7 +1352,7 @@ static int rcu_spawn_one_boost_kthread(struct
rcu_state *rsp, smp_mb__after_unlock_lock();
rnp->boost_kthread_task = t;
raw_spin_unlock_irqrestore(&rnp->lock, flags);
- sp.sched_priority = RCU_BOOST_PRIO;
+ sp.sched_priority = kthread_prio;
sched_setscheduler_nocheck(t, SCHED_FIFO, &sp);
wake_up_process(t); /* get to TASK_INTERRUPTIBLE quickly. */
return 0;
@@ -1369,7 +1369,7 @@ static void rcu_cpu_kthread_setup(unsigned int
cpu) {
struct sched_param sp;
- sp.sched_priority = RCU_KTHREAD_PRIO;
+ sp.sched_priority = kthread_prio;
sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
}
--
1.9.3
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next reply other threads:[~2014-09-15 15:05 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-15 15:05 Clark Williams [this message]
2014-09-16 20:41 ` [PATCH] rcu: unify boost and kthread priorities Paul E. McKenney
2014-09-17 13:14 ` Clark Williams
2014-09-17 15:09 ` Paul E. McKenney
2014-09-17 16:49 ` Paul Bolle
2014-09-17 17:17 ` Paul E. McKenney
2014-09-17 17:45 ` Paul Bolle
2014-09-17 18:25 ` 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=20140915100524.2cd80d2e@sluggy \
--to=clark.williams@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@us.ibm.com \
/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