Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b211a4e authored by Joonwoo Park's avatar Joonwoo Park
Browse files

sched: EAS: introduce irqload awareness



Avoid task placement on CPUs which are highly loaded with lots
of IRQ handling.

Change-Id: I55908f211aeb5338d10fb81db1ef33116b8fe98b
Signed-off-by: default avatarJoonwoo Park <joonwoop@codeaurora.org>
parent dc3420d8
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -715,6 +715,8 @@ TRACE_EVENT(sched_cpu_util,
		__field(unsigned long, curr_util		)
		__field(int, sync				)
		__field(int, idle_state				)
		__field(unsigned int, irqload		)
		__field(int, high_irqload		)
	),

	TP_fast_assign(
@@ -729,10 +731,12 @@ TRACE_EVENT(sched_cpu_util,
		__entry->curr_util		= curr_util;
		__entry->sync			= sync;
		__entry->idle_state		= idle_get_state_idx(cpu_rq(cpu));
		__entry->irqload		= sched_irqload(cpu);
		__entry->high_irqload		= sched_cpu_high_irqload(cpu);
	),

	TP_printk("comm=%s pid=%d cpu=%d task_util=%d nr_running=%d cpu_util=%ld capacity_curr=%u capacity=%u curr_util=%ld sync=%d idle_state=%d",
		__entry->comm, __entry->pid, __entry->cpu, __entry->task_util, __entry->nr_running, __entry->cpu_util, __entry->capacity_curr, __entry->capacity, __entry->curr_util, __entry->sync, __entry->idle_state)
	TP_printk("comm=%s pid=%d cpu=%d task_util=%d nr_running=%d cpu_util=%ld capacity_curr=%u capacity=%u curr_util=%ld sync=%d idle_state=%d irqload=%u high_irqload=%u",
		__entry->comm, __entry->pid, __entry->cpu, __entry->task_util, __entry->nr_running, __entry->cpu_util, __entry->capacity_curr, __entry->capacity, __entry->curr_util, __entry->sync, __entry->idle_state, __entry->irqload, __entry->high_irqload)
);

DECLARE_EVENT_CLASS(sched_task_util,
+3 −0
Original line number Diff line number Diff line
@@ -6655,6 +6655,9 @@ static int energy_aware_wake_cpu(struct task_struct *p, int target, int sync)
			trace_sched_cpu_util(p, i, task_util_boosted,
					     curr_util, sync);

			if (sched_cpu_high_irqload(cpu))
				continue;

			/*
			 * Ensure minimum capacity to grant the required boost.
			 * The target CPU can be already at a capacity level higher
+3 −0
Original line number Diff line number Diff line
@@ -1885,6 +1885,9 @@ static int find_lowest_rq(struct task_struct *task)
			 */
			util = cpu_util(cpu);
			if (!cpu_overutilized(cpu)) {
				if (sched_cpu_high_irqload(cpu))
					continue;

				if (best_cpu_util > util ||
				    (best_cpu_util == util &&
				     cpu == task_cpu(task))) {