summaryrefslogtreecommitdiffstats
path: root/kernel/sched/features.h
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2023-05-31 13:58:44 +0200
committerIngo Molnar <mingo@kernel.org>2023-07-19 09:43:58 +0200
commit147f3efaa24182a21706bca15eab2f3f4630b5fe (patch)
tree555ff76e8d3aabc2e62f43856e50ebff7e3bfbd9 /kernel/sched/features.h
parent99d4d26551b56f4e523dd04e4970b94aa796a64e (diff)
downloadlinux-147f3efaa24182a21706bca15eab2f3f4630b5fe.tar.gz
linux-147f3efaa24182a21706bca15eab2f3f4630b5fe.tar.bz2
linux-147f3efaa24182a21706bca15eab2f3f4630b5fe.zip
sched/fair: Implement an EEVDF-like scheduling policy
Where CFS is currently a WFQ based scheduler with only a single knob, the weight. The addition of a second, latency oriented parameter, makes something like WF2Q or EEVDF based a much better fit. Specifically, EEVDF does EDF like scheduling in the left half of the tree -- those entities that are owed service. Except because this is a virtual time scheduler, the deadlines are in virtual time as well, which is what allows over-subscription. EEVDF has two parameters: - weight, or time-slope: which is mapped to nice just as before - request size, or slice length: which is used to compute the virtual deadline as: vd_i = ve_i + r_i/w_i Basically, by setting a smaller slice, the deadline will be earlier and the task will be more eligible and ran earlier. Tick driven preemption is driven by request/slice completion; while wakeup preemption is driven by the deadline. Because the tree is now effectively an interval tree, and the selection is no longer 'leftmost', over-scheduling is less of a problem. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20230531124603.931005524@infradead.org
Diffstat (limited to 'kernel/sched/features.h')
-rw-r--r--kernel/sched/features.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
index 7958a10fe23b..60cce1e6f37b 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
@@ -13,6 +13,7 @@ SCHED_FEAT(GENTLE_FAIR_SLEEPERS, true)
* sleep+wake cycles. EEVDF placement strategy #1, #2 if disabled.
*/
SCHED_FEAT(PLACE_LAG, true)
+SCHED_FEAT(PLACE_DEADLINE_INITIAL, true)
/*
* Prefer to schedule the task we woke last (assuming it failed
@@ -103,3 +104,5 @@ SCHED_FEAT(LATENCY_WARN, false)
SCHED_FEAT(ALT_PERIOD, true)
SCHED_FEAT(BASE_SLICE, true)
+
+SCHED_FEAT(EEVDF, true)