All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yafang Shao <laoar.shao@gmail.com>
To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com,
	vincent.guittot@linaro.org, dietmar.eggemann@arm.co,
	rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de,
	bristot@redhat.com
Cc: linux-kernel@vger.kernel.org, Yafang Shao <laoar.shao@gmail.com>
Subject: [PATCH 1/1] sched: do active load balance on the new idle cpu
Date: Wed,  2 Jun 2021 20:25:55 +0800	[thread overview]
Message-ID: <20210602122555.10082-1-laoar.shao@gmail.com> (raw)

We monitored our latency-sensitive RT tasks are randomly preempted by the
kthreads migration/n, which means to migrate tasks on CPUn to other new
idle CPU. The logical as follows,

  new idle CPU				CPU n
  (no task to run)              	(busy running)
  wakeup migration/n			(busy running)
  (idle)                        	migraion/n preempts current task
  run the migrated task			(busy running)

As the new idle CPU is going to be idle, we'd better move the migration
work on it instead of burdening the busy CPU. After this change, the
logic is,
 new idle CPU				CPU n
 (no task to run) 			(busy running)
 migrate task from CPU n		(busy running)
 run the migrated task			(busy running)

Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
---
 kernel/sched/fair.c | 17 +++++------------
 1 file changed, 5 insertions(+), 12 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 3248e24a90b0..3e8b98b982ff 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9807,13 +9807,11 @@ static int load_balance(int this_cpu, struct rq *this_rq,
 				busiest->push_cpu = this_cpu;
 				active_balance = 1;
 			}
-			raw_spin_unlock_irqrestore(&busiest->lock, flags);
 
-			if (active_balance) {
-				stop_one_cpu_nowait(cpu_of(busiest),
-					active_load_balance_cpu_stop, busiest,
-					&busiest->active_balance_work);
-			}
+			if (active_balance)
+				active_load_balance_cpu_stop(busiest);
+
+			raw_spin_unlock_irqrestore(&busiest->lock, flags);
 		}
 	} else {
 		sd->nr_balance_failed = 0;
@@ -9923,7 +9921,6 @@ static int active_load_balance_cpu_stop(void *data)
 	struct task_struct *p = NULL;
 	struct rq_flags rf;
 
-	rq_lock_irq(busiest_rq, &rf);
 	/*
 	 * Between queueing the stop-work and running it is a hole in which
 	 * CPUs can become inactive. We should not move tasks from or to
@@ -9933,8 +9930,7 @@ static int active_load_balance_cpu_stop(void *data)
 		goto out_unlock;
 
 	/* Make sure the requested CPU hasn't gone down in the meantime: */
-	if (unlikely(busiest_cpu != smp_processor_id() ||
-		     !busiest_rq->active_balance))
+	if (unlikely(!busiest_rq->active_balance))
 		goto out_unlock;
 
 	/* Is there any task to move? */
@@ -9981,13 +9977,10 @@ static int active_load_balance_cpu_stop(void *data)
 	rcu_read_unlock();
 out_unlock:
 	busiest_rq->active_balance = 0;
-	rq_unlock(busiest_rq, &rf);
 
 	if (p)
 		attach_one_task(target_rq, p);
 
-	local_irq_enable();
-
 	return 0;
 }
 
-- 
2.17.1


             reply	other threads:[~2021-06-02 12:26 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-02 12:25 Yafang Shao [this message]
2021-06-02 12:37 ` [PATCH 1/1] sched: do active load balance on the new idle cpu Vincent Guittot
2021-06-02 12:38   ` Vincent Guittot
2021-06-02 12:58   ` Yafang Shao
2021-06-02 13:26     ` Vincent Guittot
2021-06-03  1:29       ` Yafang Shao
2021-06-14 10:23   ` Yafang Shao
2021-06-14 14:20     ` Vincent Guittot
2021-06-14 15:59       ` Yafang Shao
2021-06-04  1:23 ` [sched] 7a86d20411: phoronix-test-suite.x264.0.frames_per_second -3.8% regression kernel test robot
2021-06-04  1:23   ` kernel test robot

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=20210602122555.10082-1-laoar.shao@gmail.com \
    --to=laoar.shao@gmail.com \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.co \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.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 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.