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

Commit f4218db1 authored by Srivatsa Vaddagiri's avatar Srivatsa Vaddagiri Committed by Syed Rameez Mustafa
Browse files

sched: Introduce the concept CPU clusters in the scheduler



A cluster is set of CPUs sharing some power controls and an L2 cache.
This patch buids a list of clusters at bootup which are sorted by
their max_power_cost. Many cluster-shared attributes like cur_freq,
max_freq etc are needlessly maintained in per-cpu 'struct rq' currently.
Consolidate them in a cluster structure.

Change-Id: I0567672ad5fb67d211d9336181ceb53b9f6023af
Signed-off-by: default avatarSrivatsa Vaddagiri <vatsa@codeaurora.org>
Signed-off-by: default avatarJoonwoo Park <joonwoop@codeaurora.org>
Signed-off-by: default avatarSyed Rameez Mustafa <rameezmustafa@codeaurora.org>
parent ed54583f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -313,6 +313,9 @@ void __init init_cpu_topology(void)

	parse_dt_topology();

	for_each_possible_cpu(cpu)
		update_siblings_masks(cpu);

	/* Set scheduler topology descriptor */
	set_sched_topology(arm_topology);
}
+7 −1
Original line number Diff line number Diff line
@@ -452,14 +452,20 @@ static void __init reset_cpu_power(void)

void __init init_cpu_topology(void)
{
	int cpu;

	reset_cpu_topology();

	/*
	 * Discard anything that was parsed if we hit an error so we
	 * don't use partial information.
	 */
	if (parse_dt_topology())
	if (parse_dt_topology()) {
		reset_cpu_topology();
	} else {
		for_each_possible_cpu(cpu)
			update_siblings_masks(cpu);
	}

	reset_cpu_power();
	parse_dt_cpu_power();
+6 −6
Original line number Diff line number Diff line
@@ -182,15 +182,15 @@ DECLARE_EVENT_CLASS(sched_cpu_load,
		__entry->idle			= idle;
		__entry->nr_running		= rq->nr_running;
		__entry->nr_big_tasks		= rq->hmp_stats.nr_big_tasks;
		__entry->load_scale_factor	= rq->load_scale_factor;
		__entry->capacity		= rq->capacity;
		__entry->load_scale_factor	= cpu_load_scale_factor(rq->cpu);
		__entry->capacity		= cpu_capacity(rq->cpu);
		__entry->cumulative_runnable_avg = rq->hmp_stats.cumulative_runnable_avg;
		__entry->irqload		= irqload;
		__entry->cur_freq		= rq->cur_freq;
		__entry->max_freq		= rq->max_freq;
		__entry->cur_freq		= cpu_cur_freq(rq->cpu);
		__entry->max_freq		= cpu_max_freq(rq->cpu);
		__entry->power_cost		= power_cost;
		__entry->cstate			= rq->cstate;
		__entry->dstate			= rq->dstate;
		__entry->dstate			= rq->cluster->dstate;
		__entry->temp			= temp;
	),

@@ -274,7 +274,7 @@ TRACE_EVENT(sched_update_task_ravg,
		__entry->evt            = evt;
		__entry->cpu            = rq->cpu;
		__entry->cur_pid        = rq->curr->pid;
		__entry->cur_freq       = rq->cur_freq;
		__entry->cur_freq       = cpu_cur_freq(rq->cpu);
		memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
		__entry->pid            = p->pid;
		__entry->mark_start     = p->ravg.mark_start;
+452 −280

File changed.

Preview size limit exceeded, changes collapsed.

+9 −8
Original line number Diff line number Diff line
@@ -320,18 +320,19 @@ do { \
	P(cpu_capacity);
#endif
#ifdef CONFIG_SCHED_HMP
	P(static_cpu_pwr_cost);
#ifdef CONFIG_SCHED_QHMP
	P(mostly_idle_load);
	P(mostly_idle_nr_run);
#else
	P(cluster->static_cluster_pwr_cost);
	P(cluster->load_scale_factor);
	P(cluster->capacity);
	P(cluster->max_possible_capacity);
	P(cluster->efficiency);
	P(cluster->cur_freq);
	P(cluster->max_freq);
#endif
	P(load_scale_factor);
	P(capacity);
	P(max_possible_capacity);
	P(efficiency);
	P(cur_freq);
	P(max_freq);
	P(static_cpu_pwr_cost);
	P(static_cluster_pwr_cost);
#endif
#ifdef CONFIG_SCHED_HMP
	P(hmp_stats.nr_big_tasks);
Loading