summaryrefslogtreecommitdiff
path: root/kernel/sched
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-20 23:45:19 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-20 23:45:19 -0800
commitdba91385de4b65fe8c69e557ba409b7c823dc46c (patch)
tree1bc5b0e8e51b15aa8df134fc7487b11052d2659e /kernel/sched
parent7d4b9fcecb56e0465101fe14f8154914f11c166d (diff)
parentf3e2e2863a2a7eaca13d6051cb36ca28f100a754 (diff)
Merge "sched: Avoid packing tasks with low sleep time"
Diffstat (limited to 'kernel/sched')
-rw-r--r--kernel/sched/hmp.c5
-rw-r--r--kernel/sched/sched.h3
2 files changed, 6 insertions, 2 deletions
diff --git a/kernel/sched/hmp.c b/kernel/sched/hmp.c
index 158fc748873b..652e19ea7bb0 100644
--- a/kernel/sched/hmp.c
+++ b/kernel/sched/hmp.c
@@ -959,9 +959,12 @@ unsigned int __read_mostly sysctl_sched_restrict_cluster_spill;
/*
* Scheduler tries to avoid waking up idle CPUs for tasks running
* in short bursts. If the task average burst is less than
- * sysctl_sched_short_burst nanoseconds, it is eligible for packing.
+ * sysctl_sched_short_burst nanoseconds and it sleeps on an average
+ * for more than sysctl_sched_short_sleep nanoseconds, then the
+ * task is eligible for packing.
*/
unsigned int __read_mostly sysctl_sched_short_burst;
+unsigned int __read_mostly sysctl_sched_short_sleep = 1 * NSEC_PER_MSEC;
static void
_update_up_down_migrate(unsigned int *up_migrate, unsigned int *down_migrate)
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 5f23462f3a60..afccfd0878b1 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1420,7 +1420,8 @@ static inline u64 cpu_cravg_sync(int cpu, int sync)
static inline bool is_short_burst_task(struct task_struct *p)
{
- return p->ravg.avg_burst < sysctl_sched_short_burst;
+ return p->ravg.avg_burst < sysctl_sched_short_burst &&
+ p->ravg.avg_sleep_time > sysctl_sched_short_sleep;
}
extern void check_for_migration(struct rq *rq, struct task_struct *p);