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;
|
static bool load_based_syncs;
|
||||||
module_param(load_based_syncs, bool, 0644);
|
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 struct delayed_work input_boost_rem;
|
||||||
static u64 last_input_time;
|
static u64 last_input_time;
|
||||||
#define MIN_INPUT_INTERVAL (150 * USEC_PER_MSEC)
|
#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)
|
static void do_input_boost_rem(struct work_struct *work)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i, ret;
|
||||||
struct cpu_sync *i_sync_info;
|
struct cpu_sync *i_sync_info;
|
||||||
|
|
||||||
/* Reset the input_boost_min for all CPUs in the system */
|
/* 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 policies for all online CPUs */
|
||||||
update_policy_online();
|
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)
|
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)
|
static void do_input_boost(struct work_struct *work)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i, ret;
|
||||||
struct cpu_sync *i_sync_info;
|
struct cpu_sync *i_sync_info;
|
||||||
|
|
||||||
cancel_delayed_work_sync(&input_boost_rem);
|
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 */
|
/* Set the input_boost_min for all CPUs in the system */
|
||||||
pr_debug("Setting input boost min for all CPUs\n");
|
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 policies for all online CPUs */
|
||||||
update_policy_online();
|
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,
|
queue_delayed_work(cpu_boost_wq, &input_boost_rem,
|
||||||
msecs_to_jiffies(input_boost_ms));
|
msecs_to_jiffies(input_boost_ms));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue