[PATCH 0/8] Improving latency of short slice tasks

From: Vincent Guittot

Date: Mon Sep 21 2026 - 11:40:44 EST


This is another round of scheduling latency improvements which fix
some remaining corner cases and start to fix somes cases when multi
short slice tasks are running simultaneously on the system.

I run my usual set of scheduling latency tests on dragonboard rb5
- cyclictest with a 3777us period and a 8ms slice alone
- cyclictest with a 3777us period and a 8ms slice. 2xNR_CPUS rt-app
tasks that run (8177us) and sleep (17777us) with a 16ms slice.
- cyclictest with a 3777us period and a 8ms slice. Hackbench with
1 group using thread and pipe and a 16ms slice.

NB: periods and run duration have been chosen to minimize alignment
with tick or other periodic activities.

Each test is 130 seconds long

scheduling latency (us) for cyclictest
tip/sched/core| this patchset
slice 8ms | 8ms
99th Percentile 91 | 90 (+ 1 %)
99.9th Percentile 126 | 108 (+14 %)
Maximum 2273 | 1018 (+55 %)

scheduling latency (us) for cyclictest and rt-app
tip/sched/core| this patchset
slice 8ms / 16ms | 8ms / 16 ms
99th Percentile 66 | 66 ( 0 %)
99.9th Percentile 1104 | 832 (+25 %)
Maximum 6165 | 3041 (+51 %)

scheduling latency (us) for cyclictest and hackbench
tip/sched/core| this patchset
slice 8ms / 16ms | 8ms / 16 ms
99th Percentile 75 | 75 ( 0 %)
99.9th Percentile 730 | 637 (+13 %)
Maximum 15996 | 8124 (+49 %)

Beside the results above I noticed significants performance improvements
for hackbench with pipe which were not expected.
"sched/eevdf: Decay positive lag of sleeping entities" is the patch that
provides most of the performance improvements

The test were run with the default 2.8ms slice to check for some
performance regressions

hackbench tip/sched/core this patchset
1 group process pipe 0,863(+/-2.6%) 0,764(+/-2.6%) (+11%)
4 group process pipe 0,721(+/-2.6%) 0,561(+/-2.1%) (+22%)
8 group process pipe 0,661(+/-2.3%) 0,496(+/-1.9%) (+25%)
16 group process pipe 0,630(+/-1.4%) 0,498(+/-1.6%) (+21%)
1 group thread pipe 0,925(+/-2.4%) 0,813(+/-2.2%) (+12%)
4 group thread pipe 0,846(+/-2.8%) 0,614(+/-4.4%) (+27%)
8 group thread pipe 0,750(+/-6.3%) 0,524(+/-0.9%) (+30%)
16 group thread pipe 0,640(+/-3.1%) 0,506(+/-0.9%) (+21%)

Those tests have been run with perf scheduler (Using schedutil and EAS
provides similar results)

Vincent Guittot (8):
sched/eevdf: Ensure that vprot will never go above a min slice
sched/eevdf: Align update_protect_slice to set_protect_slice
sched/eevdf: Handle more short slice waking cases
sched/eevdf: Decay positive lag of sleeping entities
sched/eevdf: Reset lag when waking up on idle cpu
sched/eevdf: Add per cpu cached min_slice
sched/eevdf: Compare min slice during wake_affine
sched/eevdf: Add min slice check when selecting CPU

kernel/sched/fair.c | 174 ++++++++++++++++++++++++++++++++++++++++----
1 file changed, 159 insertions(+), 15 deletions(-)

--
2.53.0