ANDROID: sched/core: Add a latency-sensitive flag to uclamp
Add a 'latency_sensitive' flag to uclamp in order to express the need for some tasks to find a CPU where they can wake-up quickly. This is not expected to be used without cgroup support, so add solely a cgroup interface for it. As this flag represents a boolean attribute and not an amount of resources to be shared, it is not clear what the delegation logic should be. As such, it is kept simple: every new cgroup starts with latency_sensitive set to false, regardless of the parent. In essence, this is similar to SchedTune's prefer-idle flag which was used in android-4.19 and prior. Change-Id: I722d8ecabb428bb7b95a5b54bc70a87f182dde2a Signed-off-by: Quentin Perret <quentin.perret@arm.com>
This commit is contained in:
committed by
kondors1995
parent
1abcbcbea7
commit
b5fa516b3a
@@ -8398,6 +8398,27 @@ static int cpu_uclamp_max_show(struct seq_file *sf, void *v)
|
||||
cpu_uclamp_print(sf, UCLAMP_MAX);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cpu_uclamp_ls_write_u64(struct cgroup_subsys_state *css,
|
||||
struct cftype *cftype, u64 ls)
|
||||
{
|
||||
struct task_group *tg;
|
||||
|
||||
if (ls > 1)
|
||||
return -EINVAL;
|
||||
tg = css_tg(css);
|
||||
tg->latency_sensitive = (unsigned int) ls;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u64 cpu_uclamp_ls_read_u64(struct cgroup_subsys_state *css,
|
||||
struct cftype *cft)
|
||||
{
|
||||
struct task_group *tg = css_tg(css);
|
||||
|
||||
return (u64) tg->latency_sensitive;
|
||||
}
|
||||
#endif /* CONFIG_UCLAMP_TASK_GROUP */
|
||||
|
||||
#ifdef CONFIG_FAIR_GROUP_SCHED
|
||||
@@ -8743,6 +8764,12 @@ static struct cftype cpu_files[] = {
|
||||
.seq_show = cpu_uclamp_max_show,
|
||||
.write = cpu_uclamp_max_write,
|
||||
},
|
||||
{
|
||||
.name = "uclamp.latency_sensitive",
|
||||
.flags = CFTYPE_NOT_ON_ROOT,
|
||||
.read_u64 = cpu_uclamp_ls_read_u64,
|
||||
.write_u64 = cpu_uclamp_ls_write_u64,
|
||||
},
|
||||
#endif
|
||||
{ } /* Terminate */
|
||||
};
|
||||
|
||||
@@ -414,6 +414,8 @@ struct task_group {
|
||||
struct uclamp_se uclamp_req[UCLAMP_CNT];
|
||||
/* Effective clamp values used for a task group */
|
||||
struct uclamp_se uclamp[UCLAMP_CNT];
|
||||
/* Latency-sensitive flag used for a task group */
|
||||
unsigned int latency_sensitive;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user