* [PATCH rcu 0/1] RCU fixes for v6.12
@ 2024-08-16 7:10 Neeraj Upadhyay
2024-08-16 7:11 ` [PATCH rcu] rcu: Use system_unbound_wq to avoid disturbing isolated CPUs neeraj.upadhyay
0 siblings, 1 reply; 2+ messages in thread
From: Neeraj Upadhyay @ 2024-08-16 7:10 UTC (permalink / raw)
To: rcu
Cc: paulmck, joel, frederic, boqun.feng, urezki, linux-kernel,
kernel-team, rostedt, longman
Hello,
Below are the RCU fixes for v6.12:
1. Use system_unbound_wq to avoid disturbing isolated CPUs, courtesy
of Waiman Long.
Git tree: https://git.kernel.org/pub/scm/linux/kernel/git/neeraj.upadhyay/linux-rcu.git/log/?h=fixes.12.08.24a
- Neeraj
------------------------------------------------------------------------
kernel/rcu/tree.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH rcu] rcu: Use system_unbound_wq to avoid disturbing isolated CPUs
2024-08-16 7:10 [PATCH rcu 0/1] RCU fixes for v6.12 Neeraj Upadhyay
@ 2024-08-16 7:11 ` neeraj.upadhyay
0 siblings, 0 replies; 2+ messages in thread
From: neeraj.upadhyay @ 2024-08-16 7:11 UTC (permalink / raw)
To: rcu
Cc: linux-kernel, kernel-team, rostedt, paulmck, neeraj.upadhyay,
neeraj.upadhyay, boqun.feng, joel, urezki, frederic, Waiman Long,
Vratislav Bendel, Breno Leitao
From: Waiman Long <longman@redhat.com>
It was discovered that isolated CPUs could sometimes be disturbed by
kworkers processing kfree_rcu() works causing higher than expected
latency. It is because the RCU core uses "system_wq" which doesn't have
the WQ_UNBOUND flag to handle all its work items. Fix this violation of
latency limits by using "system_unbound_wq" in the RCU core instead.
This will ensure that those work items will not be run on CPUs marked
as isolated.
Beside the WQ_UNBOUND flag, the other major difference between system_wq
and system_unbound_wq is their max_active count. The system_unbound_wq
has a max_active of WQ_MAX_ACTIVE (512) while system_wq's max_active
is WQ_DFL_ACTIVE (256) which is half of WQ_MAX_ACTIVE.
Reported-by: Vratislav Bendel <vbendel@redhat.com>
Closes: https://issues.redhat.com/browse/RHEL-50220
Signed-off-by: Waiman Long <longman@redhat.com>
Reviewed-by: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
Tested-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
---
kernel/rcu/tree.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index e641cc681901..494aa9513d0b 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -3539,10 +3539,10 @@ schedule_delayed_monitor_work(struct kfree_rcu_cpu *krcp)
if (delayed_work_pending(&krcp->monitor_work)) {
delay_left = krcp->monitor_work.timer.expires - jiffies;
if (delay < delay_left)
- mod_delayed_work(system_wq, &krcp->monitor_work, delay);
+ mod_delayed_work(system_unbound_wq, &krcp->monitor_work, delay);
return;
}
- queue_delayed_work(system_wq, &krcp->monitor_work, delay);
+ queue_delayed_work(system_unbound_wq, &krcp->monitor_work, delay);
}
static void
@@ -3634,7 +3634,7 @@ static void kfree_rcu_monitor(struct work_struct *work)
// be that the work is in the pending state when
// channels have been detached following by each
// other.
- queue_rcu_work(system_wq, &krwp->rcu_work);
+ queue_rcu_work(system_unbound_wq, &krwp->rcu_work);
}
}
@@ -3704,7 +3704,7 @@ run_page_cache_worker(struct kfree_rcu_cpu *krcp)
if (rcu_scheduler_active == RCU_SCHEDULER_RUNNING &&
!atomic_xchg(&krcp->work_in_progress, 1)) {
if (atomic_read(&krcp->backoff_page_cache_fill)) {
- queue_delayed_work(system_wq,
+ queue_delayed_work(system_unbound_wq,
&krcp->page_cache_work,
msecs_to_jiffies(rcu_delay_page_cache_fill_msec));
} else {
--
2.40.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-08-16 7:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-16 7:10 [PATCH rcu 0/1] RCU fixes for v6.12 Neeraj Upadhyay
2024-08-16 7:11 ` [PATCH rcu] rcu: Use system_unbound_wq to avoid disturbing isolated CPUs neeraj.upadhyay
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.