sched/fair: add tunable to set initial task load
authorTodd Kjos <tkjos@google.com>
Sat, 12 Mar 2016 00:44:16 +0000 (16:44 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Wed, 10 Aug 2016 22:15:55 +0000 (15:15 -0700)
The choice of initial task load upon fork has a large influence
on CPU and OPP selection when scheduler-driven DVFS is in use.
Make this tuneable by adding a new sysctl "sched_initial_task_util".

If the sched governor is not used, the default remains at SCHED_LOAD_SCALE
Otherwise, the value from the sysctl is used. This defaults to 0.

Signed-off-by: "Todd Kjos <tkjos@google.com>"
include/linux/sched/sysctl.h
kernel/sched/fair.c
kernel/sysctl.c

index 4883dcf3e1a9e0ddea0a42f85730f3d8a466a147..2834841c507efbfc10fe2d3d85bef2bff47248a0 100644 (file)
@@ -41,6 +41,7 @@ extern unsigned int sysctl_sched_wakeup_granularity;
 extern unsigned int sysctl_sched_child_runs_first;
 extern unsigned int sysctl_sched_is_big_little;
 extern unsigned int sysctl_sched_sync_hint_enable;
+extern unsigned int sysctl_sched_initial_task_util;
 extern unsigned int sysctl_sched_cstate_aware;
 
 enum sched_tunable_scaling {
index a22df661aaa6be8cc5972af0f6c2471c62cc7961..88aca75a6659c2d2e3ecd5ccf66a84df7a54ac7a 100644 (file)
@@ -53,6 +53,7 @@ unsigned int normalized_sysctl_sched_latency = 6000000ULL;
 
 unsigned int sysctl_sched_is_big_little = 0;
 unsigned int sysctl_sched_sync_hint_enable = 1;
+unsigned int sysctl_sched_initial_task_util = 0;
 unsigned int sysctl_sched_cstate_aware = 1;
 
 /*
@@ -687,7 +688,9 @@ void init_entity_runnable_average(struct sched_entity *se)
        sa->period_contrib = 1023;
        sa->load_avg = scale_load_down(se->load.weight);
        sa->load_sum = sa->load_avg * LOAD_AVG_MAX;
-       sa->util_avg = scale_load_down(SCHED_LOAD_SCALE);
+       sa->util_avg =  sched_freq() ?
+               sysctl_sched_initial_task_util :
+               scale_load_down(SCHED_LOAD_SCALE);
        sa->util_sum = sa->util_avg * LOAD_AVG_MAX;
        /* when this task enqueue'ed, it will contribute to its cfs_rq's load_avg */
 }
index 4671761ae3c5938ddb7d37f114353cb536764fec..4457e107ec20027d380a3070edc6deb21c2837e7 100644 (file)
@@ -317,6 +317,13 @@ static struct ctl_table kern_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec,
        },
+       {
+               .procname       = "sched_initial_task_util",
+               .data           = &sysctl_sched_initial_task_util,
+               .maxlen         = sizeof(unsigned int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
        {
                .procname       = "sched_cstate_aware",
                .data           = &sysctl_sched_cstate_aware,