While reading sched deadline code, I find out that a constrained deadline task could be replenished before the next period if activated after the deadline, opening the window to run for more than Q/P. The patch [2] explains and fixes this problem.
Furthermore, while fixing this issue, I found that the replenishment timer was being fired at the deadline of the task. This works fine for implicit deadline tasks (deadline == period) because the deadline is at the same point in time of the next period. But that is not true for constrained deadline tasks (deadline < period). This problem is not as visible as the first because the runtime leakage takes place only in the second activation. Next activations receive the correct bandwidth. However, after the 2nd activation, tasks are activated in the (period - dl_deadline) instant, which is before the expected activation. This problem is explained in the fix description as well. Changes from V1: - Fix a broken comment style. - Fixes dl_is_constrained(): A constrained deadline task has dl_deadline < dl_period; so "dl_runtime < dl_period"; s/runtime/deadline/ Daniel Bristot de Oliveira (2): sched/deadline: Replenishment timer should fire in the next period sched/deadline: Throttle a constrained deadline task activated after the deadline kernel/sched/deadline.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) -- 2.9.3