cpufreq: cpu-boost: Force most/all tasks to big cluster on input event
Scheduler provides an API to force tasks to the big cluster. To improve performance, use this API to move most/all tasks to the big cluster for short duration on an input event. On the removal of frequency boost (after input_boost_ms), this scheduler boost is also deactivated. Change-Id: I9d643914ebc75266478cc22260a45862faad6236 Signed-off-by: Rohit Gupta <rohgup@codeaurora.org>
This commit is contained in:
parent
449517019b
commit
03b71555db
1 changed files with 27 additions and 2 deletions
|
@ -62,6 +62,11 @@ module_param(migration_load_threshold, uint, 0644);
|
|||
static bool load_based_syncs;
|
||||
module_param(load_based_syncs, bool, 0644);
|
||||
|
||||
static bool sched_boost_on_input;
|
||||
module_param(sched_boost_on_input, bool, 0644);
|
||||
|
||||
static bool sched_boost_active;
|
||||
|
||||
static struct delayed_work input_boost_rem;
|
||||
static u64 last_input_time;
|
||||
#define MIN_INPUT_INTERVAL (150 * USEC_PER_MSEC)
|
||||
|
@ -209,7 +214,7 @@ static void update_policy_online(void)
|
|||
|
||||
static void do_input_boost_rem(struct work_struct *work)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int i, ret;
|
||||
struct cpu_sync *i_sync_info;
|
||||
|
||||
/* Reset the input_boost_min for all CPUs in the system */
|
||||
|
@ -221,6 +226,13 @@ static void do_input_boost_rem(struct work_struct *work)
|
|||
|
||||
/* Update policies for all online CPUs */
|
||||
update_policy_online();
|
||||
|
||||
if (sched_boost_active) {
|
||||
ret = sched_set_boost(0);
|
||||
if (ret)
|
||||
pr_err("cpu-boost: HMP boost disable failed\n");
|
||||
sched_boost_active = false;
|
||||
}
|
||||
}
|
||||
|
||||
static int boost_mig_sync_thread(void *data)
|
||||
|
@ -326,10 +338,14 @@ static struct notifier_block boost_migration_nb = {
|
|||
|
||||
static void do_input_boost(struct work_struct *work)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int i, ret;
|
||||
struct cpu_sync *i_sync_info;
|
||||
|
||||
cancel_delayed_work_sync(&input_boost_rem);
|
||||
if (sched_boost_active) {
|
||||
sched_set_boost(0);
|
||||
sched_boost_active = false;
|
||||
}
|
||||
|
||||
/* Set the input_boost_min for all CPUs in the system */
|
||||
pr_debug("Setting input boost min for all CPUs\n");
|
||||
|
@ -341,6 +357,15 @@ static void do_input_boost(struct work_struct *work)
|
|||
/* Update policies for all online CPUs */
|
||||
update_policy_online();
|
||||
|
||||
/* Enable scheduler boost to migrate tasks to big cluster */
|
||||
if (sched_boost_on_input) {
|
||||
ret = sched_set_boost(1);
|
||||
if (ret)
|
||||
pr_err("cpu-boost: HMP boost enable failed\n");
|
||||
else
|
||||
sched_boost_active = true;
|
||||
}
|
||||
|
||||
queue_delayed_work(cpu_boost_wq, &input_boost_rem,
|
||||
msecs_to_jiffies(input_boost_ms));
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue