sched: Improve the scheduler

This change is for general scheduler improvements.

Change-Id: Iaefb893a84055748be7f2108179e3b869ac00318
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
This commit is contained in:
Satya Durga Srinivasu Prabhala 2020-04-02 10:26:33 -07:00
commit 88949be233
5 changed files with 119 additions and 62 deletions

View file

@ -451,48 +451,6 @@ TRACE_EVENT(sched_load_balance_stats,
#endif /* NR_CPUS > BITS_PER_LONG */
#endif /* CONFIG_SMP */
#ifdef CONFIG_SCHED_WALT
TRACE_EVENT(sched_load_balance_skip_tasks,
TP_PROTO(int scpu, int dcpu, int grp_type, int pid,
unsigned long h_load, unsigned long task_util,
unsigned long affinity),
TP_ARGS(scpu, dcpu, grp_type, pid, h_load, task_util, affinity),
TP_STRUCT__entry(
__field(int, scpu)
__field(unsigned long, src_util_cum)
__field(int, grp_type)
__field(int, dcpu)
__field(unsigned long, dst_util_cum)
__field(int, pid)
__field(unsigned long, affinity)
__field(unsigned long, task_util)
__field(unsigned long, h_load)
),
TP_fast_assign(
__entry->scpu = scpu;
__entry->src_util_cum =
cpu_rq(scpu)->wrq.cum_window_demand_scaled;
__entry->grp_type = grp_type;
__entry->dcpu = dcpu;
__entry->dst_util_cum =
cpu_rq(dcpu)->wrq.cum_window_demand_scaled;
__entry->pid = pid;
__entry->affinity = affinity;
__entry->task_util = task_util;
__entry->h_load = h_load;
),
TP_printk("source_cpu=%d util_cum=%lu group_type=%d dest_cpu=%d util_cum=%lu pid=%d affinity=%#lx task_util=%lu task_h_load=%lu",
__entry->scpu, __entry->src_util_cum, __entry->grp_type,
__entry->dcpu, __entry->dst_util_cum, __entry->pid,
__entry->affinity, __entry->task_util, __entry->h_load)
);
#endif
DECLARE_EVENT_CLASS(sched_process_template,
TP_PROTO(struct task_struct *p),
@ -905,7 +863,47 @@ DECLARE_TRACE(sched_overutilized_tp,
TP_PROTO(struct root_domain *rd, bool overutilized),
TP_ARGS(rd, overutilized));
#ifdef CONFIG_SMP
#ifdef CONFIG_SCHED_WALT
TRACE_EVENT(sched_load_balance_skip_tasks,
TP_PROTO(int scpu, int dcpu, int grp_type, int pid,
unsigned long h_load, unsigned long task_util,
unsigned long affinity),
TP_ARGS(scpu, dcpu, grp_type, pid, h_load, task_util, affinity),
TP_STRUCT__entry(
__field(int, scpu)
__field(unsigned long, src_util_cum)
__field(int, grp_type)
__field(int, dcpu)
__field(unsigned long, dst_util_cum)
__field(int, pid)
__field(unsigned long, affinity)
__field(unsigned long, task_util)
__field(unsigned long, h_load)
),
TP_fast_assign(
__entry->scpu = scpu;
__entry->src_util_cum =
cpu_rq(scpu)->wrq.cum_window_demand_scaled;
__entry->grp_type = grp_type;
__entry->dcpu = dcpu;
__entry->dst_util_cum =
cpu_rq(dcpu)->wrq.cum_window_demand_scaled;
__entry->pid = pid;
__entry->affinity = affinity;
__entry->task_util = task_util;
__entry->h_load = h_load;
),
TP_printk("source_cpu=%d util_cum=%lu group_type=%d dest_cpu=%d util_cum=%lu pid=%d affinity=%#lx task_util=%lu task_h_load=%lu",
__entry->scpu, __entry->src_util_cum, __entry->grp_type,
__entry->dcpu, __entry->dst_util_cum, __entry->pid,
__entry->affinity, __entry->task_util, __entry->h_load)
);
TRACE_EVENT(sched_cpu_util,
TP_PROTO(int cpu),
@ -1025,6 +1023,7 @@ TRACE_EVENT(sched_task_util,
__field(u32, unfilter)
__field(unsigned long, cpus_allowed)
__field(int, task_boost)
__field(bool, low_latency)
),
TP_fast_assign(
@ -1043,28 +1042,22 @@ TRACE_EVENT(sched_task_util,
__entry->is_rtg = is_rtg;
__entry->rtg_skip_min = rtg_skip_min;
__entry->start_cpu = start_cpu;
#ifdef CONFIG_SCHED_WALT
__entry->unfilter = p->wts.unfilter;
#else
__entry->unfilter = 0;
#endif
__entry->cpus_allowed =
cpumask_bits(&p->cpus_mask)[0];
#ifdef CONFIG_SCHED_WALT
__entry->task_boost = per_task_boost(p);
#else
__entry->task_boost = 0;
#endif
__entry->low_latency = p->wts.low_latency;
),
TP_printk("pid=%d comm=%s util=%lu prev_cpu=%d candidates=%#lx best_energy_cpu=%d sync=%d need_idle=%d fastpath=%d placement_boost=%d latency=%llu stune_boosted=%d is_rtg=%d rtg_skip_min=%d start_cpu=%d unfilter=%u affinity=%lx task_boost=%d",
TP_printk("pid=%d comm=%s util=%lu prev_cpu=%d candidates=%#lx best_energy_cpu=%d sync=%d need_idle=%d fastpath=%d placement_boost=%d latency=%llu stune_boosted=%d is_rtg=%d rtg_skip_min=%d start_cpu=%d unfilter=%u affinity=%lx task_boost=%d low_latency=%d",
__entry->pid, __entry->comm, __entry->util, __entry->prev_cpu,
__entry->candidates, __entry->best_energy_cpu, __entry->sync,
__entry->need_idle, __entry->fastpath, __entry->placement_boost,
__entry->latency, __entry->uclamp_boosted,
__entry->is_rtg, __entry->rtg_skip_min, __entry->start_cpu,
__entry->unfilter, __entry->cpus_allowed, __entry->task_boost)
)
__entry->unfilter, __entry->cpus_allowed, __entry->task_boost,
__entry->low_latency)
);
/*
* Tracepoint for find_best_target
@ -1120,12 +1113,10 @@ TRACE_EVENT(sched_find_best_target,
__entry->skip,
__entry->running)
);
#endif /* CONFIG_SMP */
/*
* Tracepoint for system overutilized flag
*/
#ifdef CONFIG_SCHED_WALT
struct sched_domain;
TRACE_EVENT_CONDITION(sched_overutilized,
@ -1148,7 +1139,7 @@ TRACE_EVENT_CONDITION(sched_overutilized,
TP_printk("overutilized=%d sd_span=%s",
__entry->overutilized ? 1 : 0, __entry->cpulist)
);
#endif
#endif /* CONFIG_SCHED_WALT */
#endif /* _TRACE_SCHED_H */