cc2c83709c
rt tasks are currently not eligible for schedtune boosting. Make it so by adding enqueue/dequeue hooks. For rt tasks, schedtune only acts as a frequency boosting framework, it has no impact on placement decisions and the prefer_idle attribute is not used. Also prepare schedutil use of boosted util for rt task boosting With this change, schedtune accounting will include rt class tasks, however boosting currently only applies to the utilization provided by fair class tasks. Sum up the tracked CPU utilization applying boost to the aggregate util instead - this includes RT task util in the boosting if any tasks are runnable. Scenario 1, considering one CPU: 1x rt task running, util 250, boost 0 1x cfs task runnable, util 250, boost 50 previous util=250+(50pct_boosted_250) = 887 new util=50_pct_boosted_500 = 762 Scenario 2, considering one CPU: 1x rt task running, util 250, boost 50 1x cfs task runnable, util 250, boost 0 previous util=250+250 = 500 new util=50_pct_boosted_500 = 762 Scenario 3, considering one CPU: 1x rt task running, util 250, boost 50 1x cfs task runnable, util 250, boost 50 previous util=250+(50pct_boosted_250) = 887 new util=50_pct_boosted_500 = 762 Scenario 4: 1x rt task running, util 250, boost 50 previous util=250 = 250 new util=50_pct_boosted_250 = 637 Change-Id: Ie287cbd0692468525095b5024db9faac8b2f4878 Signed-off-by: Chris Redpath <chris.redpath@arm.com> (cherry picked from commit 8e266aebf737262aeca9662254a3e61ccc7f8dec) [ - Fixed conflicts in sugov related to PELT signals of all classes - Fixed conflicts related to boosted_cpu_util being in a different location - Moved the CFS/RT util aggregation out of schedutil_freq_util to ease the integration with SchedTune ] Signed-off-by: Quentin Perret <quentin.perret@arm.com>
37 lines
908 B
C
37 lines
908 B
C
|
|
#ifdef CONFIG_SCHED_TUNE
|
|
|
|
#include <linux/reciprocal_div.h>
|
|
|
|
/*
|
|
* System energy normalization constants
|
|
*/
|
|
struct target_nrg {
|
|
unsigned long min_power;
|
|
unsigned long max_power;
|
|
struct reciprocal_value rdiv;
|
|
};
|
|
|
|
int schedtune_cpu_boost(int cpu);
|
|
int schedtune_task_boost(struct task_struct *tsk);
|
|
|
|
int schedtune_prefer_idle(struct task_struct *tsk);
|
|
|
|
void schedtune_enqueue_task(struct task_struct *p, int cpu);
|
|
void schedtune_dequeue_task(struct task_struct *p, int cpu);
|
|
|
|
unsigned long boosted_cpu_util(int cpu, unsigned long other_util);
|
|
|
|
#else /* CONFIG_SCHED_TUNE */
|
|
|
|
#define schedtune_cpu_boost(cpu) 0
|
|
#define schedtune_task_boost(tsk) 0
|
|
|
|
#define schedtune_prefer_idle(tsk) 0
|
|
|
|
#define schedtune_enqueue_task(task, cpu) do { } while (0)
|
|
#define schedtune_dequeue_task(task, cpu) do { } while (0)
|
|
|
|
#define boosted_cpu_util(cpu, other_util) cpu_util_cfs(cpu_rq(cpu))
|
|
|
|
#endif /* CONFIG_SCHED_TUNE */
|