Loading include/linux/sched.h +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading kernel/sched/debug.c +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading kernel/sched/fair.c +9 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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 Loading Loading @@ -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; } Loading Loading
include/linux/sched.h +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
kernel/sched/debug.c +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
kernel/sched/fair.c +9 −2 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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 Loading Loading @@ -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; } Loading