sched: Call the notify_on_migrate notifier chain for wakeups as well

Add a change to send notify_on_migrate hints on wakeups of
foreground tasks from scheduler if their load is above
wakeup_load_thresholds (default value is 60).
These hints can be used to choose an appropriate CPU frequency
corresponding to the load of the task being woken up.

By default sched_wakeup_load_threshold is set to 60 and therefore
wakeup hints are sent out for those tasks whose loads are higher
that value. This might cause unnecessary wakeup boosts to happen
when load based syncing is turned ON for cpu-boost.
Disable the wake up hints by setting the sched_wakeup_load_threshold
to a value higher than 100 so that wakeup boost doesnt happen unless
it is explicitly turned ON from adb shell.

Change-Id: Ieca413c1a8bd2b14a15a7591e8e15d22925c42ca
Signed-off-by: Rohit Gupta <rohgup@codeaurora.org>
[rameezmustafa@codeaurora.org: Squash "a26fcce sched: Disable wakeup
			hints for foreground tasks by default" into
			this patch and update commit text.]
Signed-off-by: Syed Rameez Mustafa <rameezmustafa@codeaurora.org>
This commit is contained in:
Rohit Gupta 2014-03-13 20:54:47 -07:00 committed by David Keitel
parent 624f7a0869
commit e3fe80da05
3 changed files with 20 additions and 2 deletions

View 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_wake_to_idle;
extern unsigned int sysctl_sched_ravg_window;
extern unsigned int sysctl_sched_wakeup_load_threshold;
enum sched_tunable_scaling {
SCHED_TUNABLESCALING_NONE,

View file

@ -2058,6 +2058,7 @@ static void ttwu_queue(struct task_struct *p, int cpu)
raw_spin_unlock(&rq->lock);
}
__read_mostly unsigned int sysctl_sched_wakeup_load_threshold = 110;
/**
* try_to_wake_up - wake up a thread
* @p: the thread to be awakened
@ -2156,7 +2157,7 @@ stat:
out:
raw_spin_unlock_irqrestore(&p->pi_lock, flags);
if (src_cpu != cpu && task_notify_on_migrate(p)) {
if (task_notify_on_migrate(p)) {
struct migration_notify_data mnd;
mnd.src_cpu = src_cpu;
@ -2166,6 +2167,15 @@ out:
(u64)(sysctl_sched_ravg_window));
else
mnd.load = 0;
/*
* Call the migration notifier with mnd for foreground task
* migrations as well as for wakeups if their load is above
* sysctl_sched_wakeup_load_threshold. This would prompt the
* cpu-boost to boost the CPU frequency on wake up of a heavy
* weight foreground task
*/
if ((src_cpu != cpu) || (mnd.load >
sysctl_sched_wakeup_load_threshold))
atomic_notifier_call_chain(&migration_notifier_head,
0, (void *)&mnd);
}

View file

@ -299,6 +299,13 @@ static struct ctl_table kern_table[] = {
.mode = 0644,
.proc_handler = proc_dointvec,
},
{
.procname = "sched_wakeup_load_threshold",
.data = &sysctl_sched_wakeup_load_threshold,
.maxlen = sizeof(unsigned int),
.mode = 0644,
.proc_handler = proc_dointvec,
},
#ifdef CONFIG_SCHED_DEBUG
{
.procname = "sched_min_granularity_ns",