kernel/kernel-rt/centos/patches/0033-rcu-Avoid-running-boost-kthreads-on-isolated-CPUs.patch
Jim Somerville f85a7fc271 rcu: Avoid running boost kthreads on isolated CPUs
Problem:
The rcub tasks are allowed to run on isolated CPUs.  This
is a two-fold problem.  The first is that these rcub tasks
steal precious yielded CPU time away from kworker
tasks that need to run on the isolated cpu.  The second
is that they interfere with nohz_full behavior.

Solution:
This is already solved for us upstream, so we simply
backport the patch here.  It affines the rcub tasks
away from any nohz_full cpus.  Note that even though
this issue only pertains to our rt kernel, we also
apply the patch to the std kernel for completeness.

Verification:
- Boot rt kernel without this patch applied, and check the
affinity of the rcub tasks.  They are set to run on any
cpu, even the nohz_full ones.
- Boot rt kernel with this patch included, and now see that
the nohz_full cpus are excluded from rcub affinity.

Closes-Bug: 1992201

Signed-off-by: Jim Somerville <jim.somerville@windriver.com>
Change-Id: I53cbfeddcd7c89b17bd7465134c02311caa7914f
2022-10-07 16:30:40 -04:00

40 lines
1.6 KiB
Diff

From 547921028c785f90e52adb7f54cc2f13103934de Mon Sep 17 00:00:00 2001
Message-Id: <547921028c785f90e52adb7f54cc2f13103934de.1665174246.git.jim.somerville@windriver.com>
From: Zqiang <qiang.zhang1211@gmail.com>
Date: Mon, 15 Nov 2021 13:15:46 +0800
Subject: [PATCH] rcu: Avoid running boost kthreads on isolated CPUs
When the boost kthreads are created on systems with nohz_full CPUs,
the cpus_allowed_ptr is set to housekeeping_cpumask(HK_FLAG_KTHREAD).
However, when the rcu_boost_kthread_setaffinity() is called, the original
affinity will be changed and these kthreads can subsequently run on
nohz_full CPUs. This commit makes rcu_boost_kthread_setaffinity()
restrict these boost kthreads to housekeeping CPUs.
Signed-off-by: Zqiang <qiang.zhang1211@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
[ commit c2cf0767e98eb4487444e5c7ebba491a866811ce upstream ]
Signed-off-by: Jim Somerville <jim.somerville@windriver.com>
---
kernel/rcu/tree_plugin.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index 9db906dcbdac..0a18fa5d27b3 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -1185,8 +1185,9 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
if ((mask & leaf_node_cpu_bit(rnp, cpu)) &&
cpu != outgoingcpu)
cpumask_set_cpu(cpu, cm);
+ cpumask_and(cm, cm, housekeeping_cpumask(HK_FLAG_RCU));
if (cpumask_weight(cm) == 0)
- cpumask_setall(cm);
+ cpumask_copy(cm, housekeeping_cpumask(HK_FLAG_RCU));
set_cpus_allowed_ptr(t, cm);
free_cpumask_var(cm);
}
--
2.25.1