From: Zhang Rui <rui.zhang@intel.com>
To: mingo@redhat.com, peterz@infradead.org, vincent.guittot@linaro.org
Cc: linux-kernel@vger.kernel.org, tj@kernel.org,
srinivas.pandruvada@intel.com
Subject: [PATCH] sched/fair: Skip cpus with no sched domain attached during NOHZ idle balance
Date: Fri, 4 Aug 2023 17:08:58 +0800 [thread overview]
Message-ID: <20230804090858.7605-1-rui.zhang@intel.com> (raw)
Problem statement
-----------------
When using cgroup isolated partition to isolate cpus including cpu0, it
is observed that cpu0 is woken up frequenctly but doing nothing. This is
not good for power efficiency.
<idle>-0 [000] 616.491602: hrtimer_cancel: hrtimer=0xffff8e8fdf623c10
<idle>-0 [000] 616.491608: hrtimer_start: hrtimer=0xffff8e8fdf623c10 function=tick_sched_timer/0x0 expires=615996000000 softexpires=615996000000
<idle>-0 [000] 616.491616: rcu_utilization: Start context switch
<idle>-0 [000] 616.491618: rcu_utilization: End context switch
<idle>-0 [000] 616.491637: tick_stop: success=1 dependency=NONE
<idle>-0 [000] 616.491637: hrtimer_cancel: hrtimer=0xffff8e8fdf623c10
<idle>-0 [000] 616.491638: hrtimer_start: hrtimer=0xffff8e8fdf623c10 function=tick_sched_timer/0x0 expires=616420000000 softexpires=616420000000
The above pattern repeats every one or multiple ticks, results in total
2000+ wakeups on cpu0 in 60 seconds, when running workload on the
cpus that are not in the isolated partition.
Rootcause
---------
In NOHZ mode, an active cpu either sends an IPI or touches the idle
cpu's polling flag to wake it up, so that the idle cpu can pull tasks
from the busy cpu. The logic for selecting the target cpu is to use the
first idle cpu that presents in both nohz.idle_cpus_mask and
housekeeping_cpumask.
In the above scenario, when cpu0 is in the cgroup isolated partition,
its sched domain is deteched, but it is still available in both of the
above cpumasks. As a result, cpu0
1. is always selected when kicking idle load balance
2. is woken up from the idle loop
3. calls __schedule() but cannot find any task to pull because it is not
in any sched_domain, thus it does nothing and reenters idle.
Solution
--------
Fix the problem by skipping cpus with no sched domain attached during
NOHZ idle balance.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
---
kernel/sched/fair.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index b3e25be58e2b..ea3185a46962 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -11340,6 +11340,9 @@ static inline int find_new_ilb(void)
if (ilb == smp_processor_id())
continue;
+ if (unlikely(on_null_domain(cpu_rq(ilb))))
+ continue;
+
if (idle_cpu(ilb))
return ilb;
}
--
2.34.1
next reply other threads:[~2023-08-04 9:13 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-04 9:08 Zhang Rui [this message]
2023-08-09 7:00 ` Chen Yu
2023-08-11 8:49 ` Zhang, Rui
2023-08-14 3:14 ` Aaron Lu
2023-08-14 8:30 ` Zhang, Rui
2023-09-08 9:43 ` Pierre Gondois
2023-09-11 11:42 ` Aaron Lu
2023-09-11 16:23 ` Zhang, Rui
2023-09-12 14:32 ` Pierre Gondois
2023-09-14 9:23 ` Zhang, Rui
2023-09-14 14:53 ` Pierre Gondois
2023-09-20 7:24 ` Zhang, Rui
2023-09-22 15:03 ` Pierre Gondois
2023-11-15 20:01 ` Vincent Guittot
2023-11-16 7:31 ` Zhang, Rui
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=20230804090858.7605-1-rui.zhang@intel.com \
--to=rui.zhang@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=srinivas.pandruvada@intel.com \
--cc=tj@kernel.org \
--cc=vincent.guittot@linaro.org \
/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®