Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1263962

[PATCH 10/13] hperf_hmp: idle pull function.

From Arseniy Krasnov <a.krasnov@samsung.com>
Newsgroups linux.kernel
Subject [PATCH 10/13] hperf_hmp: idle pull function.
Date 2015-11-06 13:10 +0100
Message-ID <qrO0c-4jL-47@gated-at.bofh.it> (permalink)
References <qrO09-4jL-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


	HMP idle pull is triggered when CPU becomes idle. It tries to pull task
from another cluster when it is overloaded. Also A7 can't pull alone task from
A15, but A15 can do that with A7 core. Task for migration is chosen in the same
way as for other HMP migration cases - using 'druntime' metric. Only difference
is that migration task doesn't need to run 5ms on its cluster before migration.

Signed-off-by: Tarek Dakhran <t.dakhran@samsung.com>
Signed-off-by: Sergey Dyasly <s.dyasly@samsung.com>
Signed-off-by: Dmitriy Safonov <d.safonov@partner.samsung.com>
Signed-off-by: Arseniy Krasnov <a.krasnov@samsung.com>
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 kernel/sched/fair.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 4fda1ec..fd16729 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -7421,6 +7421,72 @@ static unsigned int try_to_move_task(struct task_struct *migrate_task,
 }
 
 /**
+ * hmp_idle_pull(): Pulls task from opposite domain of this_cpu to this_cpu.
+ * @sd: Current sched domain.
+ * @this_cpu: without NO_HZ same as smp_processor_id().
+ *
+ * Returns moved weight.
+ *
+ * Chooses task by its druntime. Ignores task's druntime and
+ * time of last HMP migration. Also A7 can't pulls task from A15
+ * if A15 become idle.
+ */
+static unsigned int hmp_idle_pull(struct sched_domain *sd, int this_cpu)
+{
+	unsigned int ld_moved = 0;
+	struct task_struct *task_to_pull;
+	unsigned long local_flags;
+	int idle_stopper = 0;
+	struct rq *local_rq;
+	struct rq *rq;
+
+	local_irq_save(local_flags);
+	local_rq = cpu_rq(this_cpu);
+	rq = get_unfair_rq(sd, this_cpu);
+
+	if (!rq) {
+		local_irq_restore(local_flags);
+		return 0;
+	}
+	double_lock_balance(rq, local_rq);
+
+	if (rq->active_balance)
+		goto unlock;
+
+	if (local_rq->active_balance)
+		goto unlock;
+
+	/* Forbids secondary CPUs to pull alone task from primary CPUs */
+	if (!cpu_is_fastest(this_cpu) && rq->cfs.h_nr_running <= 1)
+		goto unlock;
+
+	/* Get task to pull from opposite domain to this_cpu */
+	task_to_pull = get_migration_candidate(sd, rq, 1, this_cpu);
+
+	if (!task_to_pull)
+		goto unlock;
+
+	ld_moved = try_to_move_task(task_to_pull, this_cpu, &idle_stopper);
+
+	if (idle_stopper) {
+		rq->push_cpu = this_cpu;
+		rq->active_balance = 1;
+		rq->migrate_task = task_to_pull;
+	}
+
+unlock:
+	double_rq_unlock(local_rq, rq);
+	local_irq_restore(local_flags);
+
+	if (idle_stopper)
+		stop_one_cpu_nowait(rq->cpu, active_load_balance_cpu_stop,
+				    rq, &rq->active_balance_work);
+
+	return ld_moved;
+}
+
+
+/**
  * swap_tasks(): swaps two tasks from different HMP domains
  * @sd: Current sched domain
  * @this_cpu: without NO_HZ same as smp_processor_id().
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/13] High performance balancing logic for big.LITTLE Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  [PATCH 01/13] hperf_hmp: add new config for arm and arm64. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  [PATCH 02/13] hperf_hmp: introduce hew domain flag. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  [PATCH 13/13] hperf_hmp: cpufreq routines. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  [PATCH 07/13] hperf_hmp: migration auxiliary functions. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
    Re: [PATCH 07/13] hperf_hmp: migration auxiliary functions. kbuild test robot <lkp@intel.com> - 2015-11-06 14:10 +0100
  [PATCH 10/13] hperf_hmp: idle pull function. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  [PATCH 08/13] hperf_hmp: swap tasks function. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  [PATCH 05/13] hperf_hmp: introduce druntime metric. Arseniy Krasnov <a.krasnov@samsung.com> - 2015-11-06 13:10 +0100
  Re: [PATCH 00/13] High performance balancing logic for big.LITTLE Peter Zijlstra <peterz@infradead.org> - 2015-11-07 11:00 +0100

csiph-web