lkml.org 
[lkml]   [2014]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] sched: keep quiescent cpu out of idle balance loop
Date
Since cpu which is put into quiescent mode, would remove itself
from kernel's sched_domain. So we could use search sched_domain
method to check whether this cpu don't want to be disturbed as
idle load balance would send IPI to it.

Signed-off-by: Lei Wen <leiwen@marvell.com>
---
kernel/sched/fair.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 235cfa7..14230ae 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -6783,6 +6783,8 @@ out_unlock:
* - When one of the busy CPUs notice that there may be an idle rebalancing
* needed, they will kick the idle load balancer, which then does idle
* load balancing for all the idle CPUs.
+ * - exclude those cpus not inside current call_cpu's sched_domain, so that
+ * those isolated cpu could be kept in their quisecnt mode.
*/
static struct {
cpumask_var_t idle_cpus_mask;
@@ -6792,10 +6794,16 @@ static struct {

static inline int find_new_ilb(void)
{
- int ilb = cpumask_first(nohz.idle_cpus_mask);
+ int ilb;
+ int cpu = smp_processor_id();
+ struct sched_domain *tmp;

- if (ilb < nr_cpu_ids && idle_cpu(ilb))
- return ilb;
+ for_each_domain(cpu, tmp) {
+ ilb = cpumask_first_and(nohz.idle_cpus_mask,
+ sched_domain_span(tmp));
+ if (ilb < nr_cpu_ids && idle_cpu(ilb))
+ return ilb;
+ }

return nr_cpu_ids;
}
--
1.8.3.2


\
 
 \ /
  Last update: 2014-02-19 07:02    [W:0.115 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site