Commit c3ade221 authored by Hui Tang's avatar Hui Tang
Browse files

sched: Add statistics for scheduler dynamic affinity

hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8LL9S



--------------------------------

Signed-off-by: default avatarHui Tang <tanghui20@huawei.com>
parent cc1db38f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -543,6 +543,11 @@ struct sched_statistics {
#ifdef CONFIG_SCHED_CORE
	u64				core_forceidle_sum;
#endif

#ifdef CONFIG_QOS_SCHED_DYNAMIC_AFFINITY
	u64				nr_wakeups_preferred_cpus;
	u64				nr_wakeups_force_preferred_cpus;
#endif
#endif /* CONFIG_SCHEDSTATS */
} ____cacheline_aligned;

+4 −0
Original line number Diff line number Diff line
@@ -1039,6 +1039,10 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
		P_SCHEDSTAT(nr_wakeups_affine_attempts);
		P_SCHEDSTAT(nr_wakeups_passive);
		P_SCHEDSTAT(nr_wakeups_idle);
#ifdef CONFIG_QOS_SCHED_DYNAMIC_AFFINITY
		P_SCHEDSTAT(nr_wakeups_preferred_cpus);
		P_SCHEDSTAT(nr_wakeups_force_preferred_cpus);
#endif

		avg_atom = p->se.sum_exec_runtime;
		if (nr_switches)
+9 −2
Original line number Diff line number Diff line
@@ -8186,6 +8186,8 @@ static void set_task_select_cpus(struct task_struct *p, int *idlest_cpu,
		if (available_idle_cpu(cpu)) {
			rcu_read_unlock();
			p->select_cpus = p->prefer_cpus;
			if (sd_flag & SD_BALANCE_WAKE)
				schedstat_inc(p->stats.nr_wakeups_preferred_cpus);
			return;
		}

@@ -8195,8 +8197,11 @@ static void set_task_select_cpus(struct task_struct *p, int *idlest_cpu,
	rcu_read_unlock();

	if (tg_capacity > cpumask_weight(p->prefer_cpus) &&
	    util_avg_sum * 100 <= tg_capacity * sysctl_sched_util_low_pct)
	    util_avg_sum * 100 <= tg_capacity * sysctl_sched_util_low_pct) {
		p->select_cpus = p->prefer_cpus;
		if (sd_flag & SD_BALANCE_WAKE)
			schedstat_inc(p->stats.nr_wakeups_preferred_cpus);
	}
}
#endif

@@ -8296,8 +8301,10 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags)
	rcu_read_unlock();

#ifdef CONFIG_QOS_SCHED_DYNAMIC_AFFINITY
	if (!cpumask_test_cpu(new_cpu, p->select_cpus))
	if (!cpumask_test_cpu(new_cpu, p->select_cpus)) {
		new_cpu = idlest_cpu;
		schedstat_inc(p->stats.nr_wakeups_force_preferred_cpus);
	}
#endif
	return new_cpu;
}