The following commit has been merged into the sched/core branch of tip: Commit-ID: bb1fc3bc521782d018902143c8301ab4a5e53557 Gitweb: https://git.kernel.org/tip/bb1fc3bc521782d018902143c8301ab4a5e53557 Author: Josh Don <joshdon@xxxxxxxxxx> AuthorDate: Thu, 19 Aug 2021 18:04:03 -07:00 Committer: Peter Zijlstra <peterz@xxxxxxxxxxxxx> CommitterDate: Thu, 09 Sep 2021 11:27:31 +02:00 sched: adjust sleeper credit for SCHED_IDLE entities Give reduced sleeper credit to SCHED_IDLE entities. As a result, woken SCHED_IDLE entities will take longer to preempt normal entities. The benefit of this change is to make it less likely that a newly woken SCHED_IDLE entity will preempt a short-running normal entity before it blocks. We still give a small sleeper credit to SCHED_IDLE entities, so that idle<->idle competition retains some fairness. Example: With HZ=1000, spawned four threads affined to one cpu, one of which was set to SCHED_IDLE. Without this patch, wakeup latency for the SCHED_IDLE thread was ~1-2ms, with the patch the wakeup latency was ~5ms. Signed-off-by: Josh Don <joshdon@xxxxxxxxxx> Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> Reviewed-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx> Reviewed-by: Jiang Biao <benbjiang@xxxxxxxxxxx> Link: https://lore.kernel.org/r/20210820010403.946838-5-joshdon@xxxxxxxxxx --- kernel/sched/fair.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 7330a77..b27ed8b 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4201,7 +4201,12 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) /* sleeps up to a single latency don't count. */ if (!initial) { - unsigned long thresh = sysctl_sched_latency; + unsigned long thresh; + + if (se_is_idle(se)) + thresh = sysctl_sched_min_granularity; + else + thresh = sysctl_sched_latency; /* * Halve their sleep time's effect, to allow