* Re: sched/deadline: Use revised wakeup rule for dl_server
@ 2026-05-08 8:09 Andreas Ziegler
2026-05-08 9:20 ` Christian Loehle
2026-05-11 12:46 ` Juri Lelli
0 siblings, 2 replies; 9+ messages in thread
From: Andreas Ziegler @ 2026-05-08 8:09 UTC (permalink / raw)
To: Peter Zijlstra, Juri Lelli; +Cc: linux-kernel
Linux kernel version: 6.12
CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
Architecture: aarch64
Platform: Raspberry Pi 4
Hi everyone,
Commit d66792919d4f (sched/deadline: Use revised wakeup rule for
dl_server) [1] introduced a marked degradation in scheduling latency for
real-time tasks in the presence of heavy I/O load.
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -1079,7 +1079,7 @@ static void update_dl_entity(struct
sched_dl_entity *dl_se)
if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
dl_entity_overflow(dl_se, rq_clock(rq))) {
- if (unlikely(!dl_is_implicit(dl_se) &&
+ if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
!dl_time_before(dl_se->deadline, rq_clock(rq)) &&
!is_dl_boosted(dl_se))) {
update_dl_revised_wakeup(dl_se, rq);
This was observed using a modified version of Con Kolivas' interactivity
benchmark [2]; kernel bisection eventually pointed to the above
mentioned commit.
Benchmark results before d66792919d4f:
--- Benchmarking simulated cpu of Audio real time in the presence of
simulated ---
Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
None 76.6 +/- 8.3654 76 166
Video 78.5 +/- 3.9433 78 107
X 76.4 +/- 8.123 75 157
Burn 72.0 +/- 6.4733 71 127
Write 255.3 +/- 26.627 252 331
Read 226.6 +/- 12.38 227 262
Ring 84.2 +/- 6.6207 83 125
Compile 225.3 +/- 23.949 222 328
136.8 +/- 78.462 331
Benchmark results after d66792919d4f:
--- Benchmarking simulated cpu of Audio real time in the presence of
simulated ---
Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
None 68.4 +/- 9.7864 67 169
Video 74.4 +/- 3.724 74 97
X 72.0 +/- 6.5681 71 129
Burn 66.9 +/- 5.9059 66 117
Write 9576.9 +/- 67639 250500418 98.1 98.1
Read 209.3 +/- 11.018 209 267
Ring 80.5 +/- 8.0993 78 125
Compile 239.0 +/- 29.447 234 372
1298.4 +/- 24118 500418
Reverting this commit obviously solves the issue for me. I have no idea
why this issue appears exclusively with heavy write loads in the
background.
Is this a scheduler issue, or rather something in the background?
Kind regards,
Andreas
[1]
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.86&id=d66792919d4f7bd326dfd8c21d019f7c5d4ef05c
[2] https://github.com/ckolivas/interbench
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-08 8:09 sched/deadline: Use revised wakeup rule for dl_server Andreas Ziegler
@ 2026-05-08 9:20 ` Christian Loehle
2026-05-08 12:06 ` Andreas Ziegler
2026-05-11 12:46 ` Juri Lelli
1 sibling, 1 reply; 9+ messages in thread
From: Christian Loehle @ 2026-05-08 9:20 UTC (permalink / raw)
To: Andreas Ziegler, Peter Zijlstra, Juri Lelli
Cc: linux-kernel, Dietmar Eggemann
On 5/8/26 09:09, Andreas Ziegler wrote:
> Linux kernel version: 6.12
> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
> Architecture: aarch64
> Platform: Raspberry Pi 4
>
> Hi everyone,
>
> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for dl_server) [1] introduced a marked degradation in scheduling latency for real-time tasks in the presence of heavy I/O load.
>
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -1079,7 +1079,7 @@ static void update_dl_entity(struct sched_dl_entity *dl_se)
> if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
> dl_entity_overflow(dl_se, rq_clock(rq))) {
>
> - if (unlikely(!dl_is_implicit(dl_se) &&
> + if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
> !dl_time_before(dl_se->deadline, rq_clock(rq)) &&
> !is_dl_boosted(dl_se))) {
> update_dl_revised_wakeup(dl_se, rq);
>
> This was observed using a modified version of Con Kolivas' interactivity benchmark [2]; kernel bisection eventually pointed to the above mentioned commit.
>
> Benchmark results before d66792919d4f:
>
> --- Benchmarking simulated cpu of Audio real time in the presence of simulated ---
> Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
> None 76.6 +/- 8.3654 76 166
> Video 78.5 +/- 3.9433 78 107
> X 76.4 +/- 8.123 75 157
> Burn 72.0 +/- 6.4733 71 127
> Write 255.3 +/- 26.627 252 331
> Read 226.6 +/- 12.38 227 262
> Ring 84.2 +/- 6.6207 83 125
> Compile 225.3 +/- 23.949 222 328
>
> 136.8 +/- 78.462 331
>
> Benchmark results after d66792919d4f:
>
> --- Benchmarking simulated cpu of Audio real time in the presence of simulated ---
> Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
> None 68.4 +/- 9.7864 67 169
> Video 74.4 +/- 3.724 74 97
> X 72.0 +/- 6.5681 71 129
> Burn 66.9 +/- 5.9059 66 117
> Write 9576.9 +/- 67639 250500418 98.1 98.1
> Read 209.3 +/- 11.018 209 267
> Ring 80.5 +/- 8.0993 78 125
> Compile 239.0 +/- 29.447 234 372
>
> 1298.4 +/- 24118 500418
>
> Reverting this commit obviously solves the issue for me. I have no idea why this issue appears exclusively with heavy write loads in the background.
>
> Is this a scheduler issue, or rather something in the background?
>
Hi Andreas,
You're using cpufreq schedutil for your tests I'm assuming?
Is there a difference in cpufreq behavior (avg cpufreq or OPP residencies?)
Does the regression also happen on powersave/performance governor?
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-08 9:20 ` Christian Loehle
@ 2026-05-08 12:06 ` Andreas Ziegler
2026-05-08 14:13 ` Christian Loehle
0 siblings, 1 reply; 9+ messages in thread
From: Andreas Ziegler @ 2026-05-08 12:06 UTC (permalink / raw)
To: Christian Loehle
Cc: Peter Zijlstra, Juri Lelli, linux-kernel, Dietmar Eggemann
Hi Christian,
On 2026-05-08 09:20, Christian Loehle wrote:
> On 5/8/26 09:09, Andreas Ziegler wrote:
>> Linux kernel version: 6.12
>> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
>> Architecture: aarch64
>> Platform: Raspberry Pi 4
>>
>> Hi everyone,
>>
>> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for
>> dl_server) [1] introduced a marked degradation in scheduling latency
>> for real-time tasks in the presence of heavy I/O load.
>>
>> --- a/kernel/sched/deadline.c
>> +++ b/kernel/sched/deadline.c
>> @@ -1079,7 +1079,7 @@ static void update_dl_entity(struct
>> sched_dl_entity *dl_se)
>> if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
>> dl_entity_overflow(dl_se, rq_clock(rq))) {
>>
>> - if (unlikely(!dl_is_implicit(dl_se) &&
>> + if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
>> !dl_time_before(dl_se->deadline, rq_clock(rq)) &&
>> !is_dl_boosted(dl_se))) {
>> update_dl_revised_wakeup(dl_se, rq);
>>
>> This was observed using a modified version of Con Kolivas'
>> interactivity benchmark [2]; kernel bisection eventually pointed to
>> the above mentioned commit.
>>
>> Benchmark results before d66792919d4f:
>>
>> --- Benchmarking simulated cpu of Audio real time in the presence of
>> simulated ---
>> Load Latency +/- SD median max [100n] Desired CPU Deadlines
>> met [%]
>> None 76.6 +/- 8.3654 76 166
>> Video 78.5 +/- 3.9433 78 107
>> X 76.4 +/- 8.123 75 157
>> Burn 72.0 +/- 6.4733 71 127
>> Write 255.3 +/- 26.627 252 331
>> Read 226.6 +/- 12.38 227 262
>> Ring 84.2 +/- 6.6207 83 125
>> Compile 225.3 +/- 23.949 222 328
>>
>> 136.8 +/- 78.462 331
>>
>> Benchmark results after d66792919d4f:
>>
>> --- Benchmarking simulated cpu of Audio real time in the presence of
>> simulated ---
>> Load Latency +/- SD median max [100n] Desired CPU Deadlines
>> met [%]
>> None 68.4 +/- 9.7864 67 169
>> Video 74.4 +/- 3.724 74 97
>> X 72.0 +/- 6.5681 71 129
>> Burn 66.9 +/- 5.9059 66 117
>> Write 9576.9 +/- 67639 250500418 98.1 98.1
>> Read 209.3 +/- 11.018 209 267
>> Ring 80.5 +/- 8.0993 78 125
>> Compile 239.0 +/- 29.447 234 372
>>
>> 1298.4 +/- 24118 500418
>>
>> Reverting this commit obviously solves the issue for me. I have no
>> idea why this issue appears exclusively with heavy write loads in the
>> background.
>>
>> Is this a scheduler issue, or rather something in the background?
>>
>
> Hi Andreas,
> You're using cpufreq schedutil for your tests I'm assuming?
> Is there a difference in cpufreq behavior (avg cpufreq or OPP
> residencies?)
> Does the regression also happen on powersave/performance governor?
Actually this is a very stripped-down system. The 'performance' cpufreq
governor is the only one compiled in, the processor cores run on a fixed
frequency. CONFIG_PM_OPP is not set.
Removing the frequency constraint and using 'powersave' governor lets
the latency values rise generally, but the anomaly under write loads
persists. The cpu frequency does not change, but remains stuck on the
lowest level.
--- Benchmarking simulated cpu of Audio real time in the presence of
simulated ---
Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
None 238.7 +/- 31.416 229 405
Video 228.6 +/- 13.668 226 291
X 247.8 +/- 29.196 239 425
Burn 222.6 +/- 30.631 215 348
Write 1214.8 +/- 20397 369500411 99.8 99.8
Read 393.9 +/- 21.375 394 476
Ring 250.3 +/- 27.59 241 365
Compile 411.2 +/- 23.41 411 474
401.0 +/- 7218.2 500411
Same with 'schedutil' governor; the cpu frequency adjusts with the load.
--- Benchmarking simulated cpu of Audio real time in the presence of
simulated ---
Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
None 200.9 +/- 57.332 208 431
Video 136.2 +/- 23.784 136 250
X 172.3 +/- 59.286 174 404
Burn 104.1 +/- 22.847 97 247
Write 5337.5 +/- 49960 286500394 99 99
Read 300.5 +/- 18.65 301 359
Ring 119.8 +/- 15.8 115 196
Compile 282.7 +/- 25.056 280 469
831.7 +/- 17746 500394
Kind regards,
Andreas
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-08 12:06 ` Andreas Ziegler
@ 2026-05-08 14:13 ` Christian Loehle
2026-05-09 11:42 ` Andreas Ziegler
0 siblings, 1 reply; 9+ messages in thread
From: Christian Loehle @ 2026-05-08 14:13 UTC (permalink / raw)
To: Andreas Ziegler
Cc: Peter Zijlstra, Juri Lelli, linux-kernel, Dietmar Eggemann,
John Stultz
On 5/8/26 13:06, Andreas Ziegler wrote:
> Hi Christian,
>
> On 2026-05-08 09:20, Christian Loehle wrote:
>> On 5/8/26 09:09, Andreas Ziegler wrote:
>>> Linux kernel version: 6.12
>>> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
>>> Architecture: aarch64
>>> Platform: Raspberry Pi 4
>>>
>>> Hi everyone,
>>>
>>> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for dl_server) [1] introduced a marked degradation in scheduling latency for real-time tasks in the presence of heavy I/O load.
>>>
>>> --- a/kernel/sched/deadline.c
>>> +++ b/kernel/sched/deadline.c
>>> @@ -1079,7 +1079,7 @@ static void update_dl_entity(struct sched_dl_entity *dl_se)
>>> if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
>>> dl_entity_overflow(dl_se, rq_clock(rq))) {
>>>
>>> - if (unlikely(!dl_is_implicit(dl_se) &&
>>> + if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
>>> !dl_time_before(dl_se->deadline, rq_clock(rq)) &&
>>> !is_dl_boosted(dl_se))) {
>>> update_dl_revised_wakeup(dl_se, rq);
>>>
>>> This was observed using a modified version of Con Kolivas' interactivity benchmark [2]; kernel bisection eventually pointed to the above mentioned commit.
>>>
>>> Benchmark results before d66792919d4f:
>>>
>>> --- Benchmarking simulated cpu of Audio real time in the presence of simulated ---
>>> Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
>>> None 76.6 +/- 8.3654 76 166
>>> Video 78.5 +/- 3.9433 78 107
>>> X 76.4 +/- 8.123 75 157
>>> Burn 72.0 +/- 6.4733 71 127
>>> Write 255.3 +/- 26.627 252 331
>>> Read 226.6 +/- 12.38 227 262
>>> Ring 84.2 +/- 6.6207 83 125
>>> Compile 225.3 +/- 23.949 222 328
>>>
>>> 136.8 +/- 78.462 331
>>>
>>> Benchmark results after d66792919d4f:
>>>
>>> --- Benchmarking simulated cpu of Audio real time in the presence of simulated ---
>>> Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
>>> None 68.4 +/- 9.7864 67 169
>>> Video 74.4 +/- 3.724 74 97
>>> X 72.0 +/- 6.5681 71 129
>>> Burn 66.9 +/- 5.9059 66 117
>>> Write 9576.9 +/- 67639 250500418 98.1 98.1
>>> Read 209.3 +/- 11.018 209 267
>>> Ring 80.5 +/- 8.0993 78 125
>>> Compile 239.0 +/- 29.447 234 372
>>>
>>> 1298.4 +/- 24118 500418
>>>
>>> Reverting this commit obviously solves the issue for me. I have no idea why this issue appears exclusively with heavy write loads in the background.
>>>
>>> Is this a scheduler issue, or rather something in the background?
>>>
>>
>> Hi Andreas,
>> You're using cpufreq schedutil for your tests I'm assuming?
>> Is there a difference in cpufreq behavior (avg cpufreq or OPP residencies?)
>> Does the regression also happen on powersave/performance governor?
>
> Actually this is a very stripped-down system. The 'performance' cpufreq governor is the only one compiled in, the processor cores run on a fixed frequency. CONFIG_PM_OPP is not set.
That certainly makes the analysis easier.
I couldn't reproduce the issue so far on my system but it does seem like the dl server
would get potentially unbounded running time with very frequent
starting and stopping of the dlserver (which presumably happens because of
the writeback) reset the runtime, which then leads to your 25s observed latency.
Peter, how is the revised wakeup rule supposed to behave here?
> [snip]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-08 14:13 ` Christian Loehle
@ 2026-05-09 11:42 ` Andreas Ziegler
2026-05-11 9:47 ` Christian Loehle
0 siblings, 1 reply; 9+ messages in thread
From: Andreas Ziegler @ 2026-05-09 11:42 UTC (permalink / raw)
To: Christian Loehle
Cc: Peter Zijlstra, Juri Lelli, linux-kernel, Dietmar Eggemann,
John Stultz
Hi Christian, Everyone,
On 2026-05-08 14:13, Christian Loehle wrote:
> On 5/8/26 13:06, Andreas Ziegler wrote:
>> Hi Christian,
>>
>> On 2026-05-08 09:20, Christian Loehle wrote:
>>> On 5/8/26 09:09, Andreas Ziegler wrote:
>>>> Linux kernel version: 6.12
>>>> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
>>>> Architecture: aarch64
>>>> Platform: Raspberry Pi 4
>>>>
>>>> Hi everyone,
>>>>
>>>> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for
>>>> dl_server) [1] introduced a marked degradation in scheduling latency
>>>> for real-time tasks in the presence of heavy I/O load.
>>>>
>>>> --- a/kernel/sched/deadline.c
>>>> +++ b/kernel/sched/deadline.c
>>>> @@ -1079,7 +1079,7 @@ static void update_dl_entity(struct
>>>> sched_dl_entity *dl_se)
>>>> if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
>>>> dl_entity_overflow(dl_se, rq_clock(rq))) {
>>>>
>>>> - if (unlikely(!dl_is_implicit(dl_se) &&
>>>> + if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
>>>> !dl_time_before(dl_se->deadline, rq_clock(rq)) &&
>>>> !is_dl_boosted(dl_se))) {
>>>> update_dl_revised_wakeup(dl_se, rq);
>>>>
>>>> This was observed using a modified version of Con Kolivas'
>>>> interactivity benchmark [2]; kernel bisection eventually pointed to
>>>> the above mentioned commit.
>>>>
>>>> Benchmark results before d66792919d4f:
>>>>
>>>> --- Benchmarking simulated cpu of Audio real time in the presence of
>>>> simulated ---
>>>> Load Latency +/- SD median max [100n] Desired CPU
>>>> Deadlines met [%]
>>>> None 76.6 +/- 8.3654 76 166
>>>> Video 78.5 +/- 3.9433 78 107
>>>> X 76.4 +/- 8.123 75 157
>>>> Burn 72.0 +/- 6.4733 71 127
>>>> Write 255.3 +/- 26.627 252 331
>>>> Read 226.6 +/- 12.38 227 262
>>>> Ring 84.2 +/- 6.6207 83 125
>>>> Compile 225.3 +/- 23.949 222 328
>>>>
>>>> 136.8 +/- 78.462 331
>>>>
>>>> Benchmark results after d66792919d4f:
>>>>
>>>> --- Benchmarking simulated cpu of Audio real time in the presence of
>>>> simulated ---
>>>> Load Latency +/- SD median max [100n] Desired CPU
>>>> Deadlines met [%]
>>>> None 68.4 +/- 9.7864 67 169
>>>> Video 74.4 +/- 3.724 74 97
>>>> X 72.0 +/- 6.5681 71 129
>>>> Burn 66.9 +/- 5.9059 66 117
>>>> Write 9576.9 +/- 67639 250500418 98.1 98.1
>>>> Read 209.3 +/- 11.018 209 267
>>>> Ring 80.5 +/- 8.0993 78 125
>>>> Compile 239.0 +/- 29.447 234 372
>>>>
>>>> 1298.4 +/- 24118 500418
>>>>
>>>> Reverting this commit obviously solves the issue for me. I have no
>>>> idea why this issue appears exclusively with heavy write loads in
>>>> the background.
>>>>
>>>> Is this a scheduler issue, or rather something in the background?
>>>>
>>>
>>> Hi Andreas,
>>> You're using cpufreq schedutil for your tests I'm assuming?
>>> Is there a difference in cpufreq behavior (avg cpufreq or OPP
>>> residencies?)
>>> Does the regression also happen on powersave/performance governor?
>>
>> Actually this is a very stripped-down system. The 'performance'
>> cpufreq governor is the only one compiled in, the processor cores run
>> on a fixed frequency. CONFIG_PM_OPP is not set.
>
> That certainly makes the analysis easier.
> I couldn't reproduce the issue so far on my system but it does seem
> like the dl server
> would get potentially unbounded running time with very frequent
> starting and stopping of the dlserver (which presumably happens because
> of
> the writeback) reset the runtime, which then leads to your 25s observed
> latency.
> Peter, how is the revised wakeup rule supposed to behave here?
>
>> [snip]
This seems to be a case of runtime starvation. If I change
sched_rt_runtime_us to a smaller value, the benchmark returns reasonable
latency values.
# echo "980000" > /proc/sys/kernel/sched_rt_runtime_us
I could live with this workaround, since it seems not to impact overall
latency values in a noticeable way.
Kind regards,
Andreas
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-09 11:42 ` Andreas Ziegler
@ 2026-05-11 9:47 ` Christian Loehle
2026-05-11 12:37 ` Andreas Ziegler
0 siblings, 1 reply; 9+ messages in thread
From: Christian Loehle @ 2026-05-11 9:47 UTC (permalink / raw)
To: Andreas Ziegler
Cc: Peter Zijlstra, Juri Lelli, linux-kernel, Dietmar Eggemann,
John Stultz
On 5/9/26 12:42, Andreas Ziegler wrote:
> Hi Christian, Everyone,
>
> On 2026-05-08 14:13, Christian Loehle wrote:
>> On 5/8/26 13:06, Andreas Ziegler wrote:
>>> Hi Christian,
>>>
>>> On 2026-05-08 09:20, Christian Loehle wrote:
>>>> On 5/8/26 09:09, Andreas Ziegler wrote:
>>>>> Linux kernel version: 6.12
>>>>> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
>>>>> Architecture: aarch64
>>>>> Platform: Raspberry Pi 4
>>>>>
>>>>> Hi everyone,
>>>>>
>>>>> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for dl_server) [1] introduced a marked degradation in scheduling latency for real-time tasks in the presence of heavy I/O load.
>>>>>
>>>>> --- a/kernel/sched/deadline.c
>>>>> +++ b/kernel/sched/deadline.c
>>>>> @@ -1079,7 +1079,7 @@ static void update_dl_entity(struct sched_dl_entity *dl_se)
>>>>> if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
>>>>> dl_entity_overflow(dl_se, rq_clock(rq))) {
>>>>>
>>>>> - if (unlikely(!dl_is_implicit(dl_se) &&
>>>>> + if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
>>>>> !dl_time_before(dl_se->deadline, rq_clock(rq)) &&
>>>>> !is_dl_boosted(dl_se))) {
>>>>> update_dl_revised_wakeup(dl_se, rq);
>>>>>
>>>>> This was observed using a modified version of Con Kolivas' interactivity benchmark [2]; kernel bisection eventually pointed to the above mentioned commit.
>>>>>
>>>>> Benchmark results before d66792919d4f:
>>>>>
>>>>> --- Benchmarking simulated cpu of Audio real time in the presence of simulated ---
>>>>> Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
>>>>> None 76.6 +/- 8.3654 76 166
>>>>> Video 78.5 +/- 3.9433 78 107
>>>>> X 76.4 +/- 8.123 75 157
>>>>> Burn 72.0 +/- 6.4733 71 127
>>>>> Write 255.3 +/- 26.627 252 331
>>>>> Read 226.6 +/- 12.38 227 262
>>>>> Ring 84.2 +/- 6.6207 83 125
>>>>> Compile 225.3 +/- 23.949 222 328
>>>>>
>>>>> 136.8 +/- 78.462 331
>>>>>
>>>>> Benchmark results after d66792919d4f:
>>>>>
>>>>> --- Benchmarking simulated cpu of Audio real time in the presence of simulated ---
>>>>> Load Latency +/- SD median max [100n] Desired CPU Deadlines met [%]
>>>>> None 68.4 +/- 9.7864 67 169
>>>>> Video 74.4 +/- 3.724 74 97
>>>>> X 72.0 +/- 6.5681 71 129
>>>>> Burn 66.9 +/- 5.9059 66 117
>>>>> Write 9576.9 +/- 67639 250500418 98.1 98.1
>>>>> Read 209.3 +/- 11.018 209 267
>>>>> Ring 80.5 +/- 8.0993 78 125
>>>>> Compile 239.0 +/- 29.447 234 372
>>>>>
>>>>> 1298.4 +/- 24118 500418
>>>>>
>>>>> Reverting this commit obviously solves the issue for me. I have no idea why this issue appears exclusively with heavy write loads in the background.
>>>>>
>>>>> Is this a scheduler issue, or rather something in the background?
>>>>>
>>>>
>>>> Hi Andreas,
>>>> You're using cpufreq schedutil for your tests I'm assuming?
>>>> Is there a difference in cpufreq behavior (avg cpufreq or OPP residencies?)
>>>> Does the regression also happen on powersave/performance governor?
>>>
>>> Actually this is a very stripped-down system. The 'performance' cpufreq governor is the only one compiled in, the processor cores run on a fixed frequency. CONFIG_PM_OPP is not set.
>>
>> That certainly makes the analysis easier.
>> I couldn't reproduce the issue so far on my system but it does seem like the dl server
>> would get potentially unbounded running time with very frequent
>> starting and stopping of the dlserver (which presumably happens because of
>> the writeback) reset the runtime, which then leads to your 25s observed latency.
>> Peter, how is the revised wakeup rule supposed to behave here?
>>
>>> [snip]
>
> This seems to be a case of runtime starvation. If I change sched_rt_runtime_us to a smaller value, the benchmark returns reasonable latency values.
>
> # echo "980000" > /proc/sys/kernel/sched_rt_runtime_us
>
> I could live with this workaround, since it seems not to impact overall latency values in a noticeable way.
>
Not a very stable workaround unfortunately :/
While I try to reproduce this, what you're observing should imply that the
background SCHED_NORMAL work is enough to fully utilize the system, right?
interbench Write does 4k (buffered) writes of a 1GB file and then close+open
and repeat, nothing fancy really. Does this actually produce significant CPU
utilization for you? Can you just run the background work and see what that
looks like?
(What you're seeing looks like a bug in any case, just so I'm not going down
a wrong path when trying to reproduce here).
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-11 9:47 ` Christian Loehle
@ 2026-05-11 12:37 ` Andreas Ziegler
0 siblings, 0 replies; 9+ messages in thread
From: Andreas Ziegler @ 2026-05-11 12:37 UTC (permalink / raw)
To: Christian Loehle
Cc: Peter Zijlstra, Juri Lelli, linux-kernel, Dietmar Eggemann,
John Stultz
On 2026-05-11 09:47, Christian Loehle wrote:
> On 5/9/26 12:42, Andreas Ziegler wrote:
>> Hi Christian, Everyone,
>>
>> On 2026-05-08 14:13, Christian Loehle wrote:
>>> On 5/8/26 13:06, Andreas Ziegler wrote:
>>>> Hi Christian,
>>>>
>>>> On 2026-05-08 09:20, Christian Loehle wrote:
>>>>> On 5/8/26 09:09, Andreas Ziegler wrote:
>>>>>> Linux kernel version: 6.12
>>>>>> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
>>>>>> Architecture: aarch64
>>>>>> Platform: Raspberry Pi 4
>>>>>>
>>>>>> Hi everyone,
>>>>>>
>>>>>> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for
>>>>>> dl_server) [1] introduced a marked degradation in scheduling
>>>>>> latency for real-time tasks in the presence of heavy I/O load.
>>>>>>
>>>>>> --- a/kernel/sched/deadline.c
>>>>>> +++ b/kernel/sched/deadline.c
>>>>>> @@ -1079,7 +1079,7 @@ static void update_dl_entity(struct
>>>>>> sched_dl_entity *dl_se)
>>>>>> if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
>>>>>> dl_entity_overflow(dl_se, rq_clock(rq))) {
>>>>>>
>>>>>> - if (unlikely(!dl_is_implicit(dl_se) &&
>>>>>> + if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer)
>>>>>> &&
>>>>>> !dl_time_before(dl_se->deadline, rq_clock(rq))
>>>>>> &&
>>>>>> !is_dl_boosted(dl_se))) {
>>>>>> update_dl_revised_wakeup(dl_se, rq);
>>>>>>
>>>>>> This was observed using a modified version of Con Kolivas'
>>>>>> interactivity benchmark [2]; kernel bisection eventually pointed
>>>>>> to the above mentioned commit.
>>>>>>
>>>>>> Benchmark results before d66792919d4f:
>>>>>>
>>>>>> --- Benchmarking simulated cpu of Audio real time in the presence
>>>>>> of simulated ---
>>>>>> Load Latency +/- SD median max [100n] Desired CPU
>>>>>> Deadlines met [%]
>>>>>> None 76.6 +/- 8.3654 76 166
>>>>>> Video 78.5 +/- 3.9433 78 107
>>>>>> X 76.4 +/- 8.123 75 157
>>>>>> Burn 72.0 +/- 6.4733 71 127
>>>>>> Write 255.3 +/- 26.627 252 331
>>>>>> Read 226.6 +/- 12.38 227 262
>>>>>> Ring 84.2 +/- 6.6207 83 125
>>>>>> Compile 225.3 +/- 23.949 222 328
>>>>>>
>>>>>> 136.8 +/- 78.462 331
>>>>>>
>>>>>> Benchmark results after d66792919d4f:
>>>>>>
>>>>>> --- Benchmarking simulated cpu of Audio real time in the presence
>>>>>> of simulated ---
>>>>>> Load Latency +/- SD median max [100n] Desired CPU
>>>>>> Deadlines met [%]
>>>>>> None 68.4 +/- 9.7864 67 169
>>>>>> Video 74.4 +/- 3.724 74 97
>>>>>> X 72.0 +/- 6.5681 71 129
>>>>>> Burn 66.9 +/- 5.9059 66 117
>>>>>> Write 9576.9 +/- 67639 250500418 98.1 98.1
>>>>>> Read 209.3 +/- 11.018 209 267
>>>>>> Ring 80.5 +/- 8.0993 78 125
>>>>>> Compile 239.0 +/- 29.447 234 372
>>>>>>
>>>>>> 1298.4 +/- 24118 500418
>>>>>>
>>>>>> Reverting this commit obviously solves the issue for me. I have no
>>>>>> idea why this issue appears exclusively with heavy write loads in
>>>>>> the background.
>>>>>>
>>>>>> Is this a scheduler issue, or rather something in the background?
>>>>>>
>>>>>
>>>>> Hi Andreas,
>>>>> You're using cpufreq schedutil for your tests I'm assuming?
>>>>> Is there a difference in cpufreq behavior (avg cpufreq or OPP
>>>>> residencies?)
>>>>> Does the regression also happen on powersave/performance governor?
>>>>
>>>> Actually this is a very stripped-down system. The 'performance'
>>>> cpufreq governor is the only one compiled in, the processor cores
>>>> run on a fixed frequency. CONFIG_PM_OPP is not set.
>>>
>>> That certainly makes the analysis easier.
>>> I couldn't reproduce the issue so far on my system but it does seem
>>> like the dl server
>>> would get potentially unbounded running time with very frequent
>>> starting and stopping of the dlserver (which presumably happens
>>> because of
>>> the writeback) reset the runtime, which then leads to your 25s
>>> observed latency.
>>> Peter, how is the revised wakeup rule supposed to behave here?
>>>
>>>> [snip]
>>
>> This seems to be a case of runtime starvation. If I change
>> sched_rt_runtime_us to a smaller value, the benchmark returns
>> reasonable latency values.
>>
>> # echo "980000" > /proc/sys/kernel/sched_rt_runtime_us
>>
>> I could live with this workaround, since it seems not to impact
>> overall latency values in a noticeable way.
>>
>
> Not a very stable workaround unfortunately :/
> While I try to reproduce this, what you're observing should imply that
> the
> background SCHED_NORMAL work is enough to fully utilize the system,
> right?
> interbench Write does 4k (buffered) writes of a 1GB file and then
> close+open
> and repeat, nothing fancy really. Does this actually produce
> significant CPU
> utilization for you? Can you just run the background work and see what
> that
> looks like?
> (What you're seeing looks like a bug in any case, just so I'm not going
> down
> a wrong path when trying to reproduce here).
You are right, and this was a false positive; the problem seems to be
intermittent (maybe 1/20) and I just got lucky for one session.
Some background information about the current state of the system:
/* CONFIG_CPU_FREQ is not set */
Root filesystem in RAM (initrd)
Cpu 3 is isolated: boot parameters: console=tty1
console=ttyAMA0,115200 isolcpus=nohz,domain,managed_irq,3 nohz_full=3
rcu_nocbs=3
Background load is normally near 100% idle; this is from top after
reboot:
Mem: 95724K used, 853524K free, 42408K shrd, 72K buff, 43352K cached
CPU: 0.0% usr 0.0% sys 0.0% nic 100% idle 0.0% io 0.0% irq 0.0%
sirq
Load average: 0.21 0.17 0.07 3/126 702
The file size used by interbench is even less than 1GB, due to the
limits of the rootfs. Typical values are around 100-200 MiB. It is
written in an infinite loop until receiving the stop message (via pipe)
from the controlling process. The check for the abort signal occurs
after a completed write, not on block level.
I just noticed that interbench seems to have a bug itself: it uses only
one processor - looks like a mangled cpu mask. Top output during the
write benchmark:
Mem: 358024K used, 591224K free, 298516K shrd, 2504K buff, 299464K
cached
CPU: 1.8% usr 23.1% sys 0.0% nic 74.9% idle 0.0% io 0.0% irq 0.0%
sirq
Load average: 1.21 0.46 0.29 5/129 2116
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
2106 2105 root S 1228 0.1 0 23.6 interbench -r -t 60 -u -w
Write -W
2109 2105 root S 1228 0.1 0 1.2 interbench -r -t 60 -u -w
Write -W
1829 1274 root R 1600 0.1 2 0.0 top -d 5
22 2 root SW 0 0.0 0 0.0 [rcuc/0]
1270 2 root IW 0 0.0 0 0.0 [kworker/0:0-eve]
652 1 mpd S 27632 2.9 0 0.0 /usr/bin/mpd
2023 2021 root S 4476 0.4 0 0.0 sshd-session: root@notty
675 673 root S 4448 0.4 1 0.0 sshd-session: root@pts/0
673 601 root S 4140 0.4 0 0.0 sshd-session: root [priv]
2021 601 root S 4140 0.4 0 0.0 sshd-session: root [priv]
601 1 root S 3736 0.3 1 0.0 sshd: /usr/sbin/sshd
[listener] 0
2024 2023 root S 3224 0.3 1 0.0 /usr/libexec/sftp-server
2025 2023 root S 3188 0.3 2 0.0 /usr/libexec/sftp-server
501 1 root S 1884 0.2 1 0.0 /usr/sbin/wpa_supplicant
-B -P /va
131 1 root S 1672 0.1 0 0.0 /sbin/mdev -df
676 675 root S 1636 0.1 1 0.0 -sh
1274 605 root S 1636 0.1 1 0.0 -sh
605 1 root S 1592 0.1 1 0.0 /usr/sbin/telnetd -F
527 1 root S 1576 0.1 2 0.0 udhcpc -t1 -A2 -b -R -O
search -O
1 0 root S 1576 0.1 0 0.0 init
I tried limiting interbench's rather excessive SCHED_FIFO priorities to
values normal for the system, but without success.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-08 8:09 sched/deadline: Use revised wakeup rule for dl_server Andreas Ziegler
2026-05-08 9:20 ` Christian Loehle
@ 2026-05-11 12:46 ` Juri Lelli
2026-05-11 14:13 ` Andreas Ziegler
1 sibling, 1 reply; 9+ messages in thread
From: Juri Lelli @ 2026-05-11 12:46 UTC (permalink / raw)
To: Andreas Ziegler; +Cc: Peter Zijlstra, linux-kernel
Hello,
On 08/05/26 08:09, Andreas Ziegler wrote:
> Linux kernel version: 6.12
> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
> Architecture: aarch64
> Platform: Raspberry Pi 4
>
> Hi everyone,
>
> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for dl_server)
> [1] introduced a marked degradation in scheduling latency for real-time
> tasks in the presence of heavy I/O load.
Can this be the same regression reported here?
https://marc.info/?l=linux-rt-users&m=177844667227991
Please notice the list of missing subsequent fixes Mike is suggesting to
test with.
https://marc.info/?l=linux-rt-users&m=177847863710263&w=2
Thanks,
Juri
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: sched/deadline: Use revised wakeup rule for dl_server
2026-05-11 12:46 ` Juri Lelli
@ 2026-05-11 14:13 ` Andreas Ziegler
0 siblings, 0 replies; 9+ messages in thread
From: Andreas Ziegler @ 2026-05-11 14:13 UTC (permalink / raw)
To: Juri Lelli; +Cc: Peter Zijlstra, linux-kernel
Hi Juri,
On 2026-05-11 12:46, Juri Lelli wrote:
> Hello,
>
> On 08/05/26 08:09, Andreas Ziegler wrote:
>> Linux kernel version: 6.12
>> CONFIG_PREEMPT_RT (w/ PREEMPT_RT patch applied)
>> Architecture: aarch64
>> Platform: Raspberry Pi 4
>>
>> Hi everyone,
>>
>> Commit d66792919d4f (sched/deadline: Use revised wakeup rule for
>> dl_server)
>> [1] introduced a marked degradation in scheduling latency for
>> real-time
>> tasks in the presence of heavy I/O load.
>
> Can this be the same regression reported here?
>
> https://marc.info/?l=linux-rt-users&m=177844667227991
Yes, this is the same issue. I wonder where the 50 ms are coming from
... The value is fairly consistent also in my results.
> Please notice the list of missing subsequent fixes Mike is suggesting
> to
> test with.
>
> https://marc.info/?l=linux-rt-users&m=177847863710263&w=2
I will take a look at the mentioned patches.
> Thanks,
> Juri
Thank you for the update,
Andreas
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-05-11 14:13 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-08 8:09 sched/deadline: Use revised wakeup rule for dl_server Andreas Ziegler
2026-05-08 9:20 ` Christian Loehle
2026-05-08 12:06 ` Andreas Ziegler
2026-05-08 14:13 ` Christian Loehle
2026-05-09 11:42 ` Andreas Ziegler
2026-05-11 9:47 ` Christian Loehle
2026-05-11 12:37 ` Andreas Ziegler
2026-05-11 12:46 ` Juri Lelli
2026-05-11 14:13 ` Andreas Ziegler
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox