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:
parent
624f7a0869
commit
e3fe80da05
3 changed files with 20 additions and 2 deletions
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Add table
Reference in a new issue