sched/deadline: Improve the tracking of active utilization
This patch implements a more theoretically sound algorithm for tracking active utilization: instead of decreasing it when a task blocks, use a timer (the "inactive timer", named after the "Inactive" task state of the GRUB algorithm) to decrease the active utilization at the so called "0-lag time". Tested-by: Claudio Scordino <claudio@evidence.eu.com> Tested-by: Daniel Bristot de Oliveira <bristot@redhat.com> Signed-off-by: Luca Abeni <luca.abeni@santannapisa.it> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Joel Fernandes <joelaf@google.com> Cc: Juri Lelli <juri.lelli@arm.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tommaso Cucinotta <tommaso.cucinotta@sssup.it> Link: http://lkml.kernel.org/r/1495138417-6203-3-git-send-email-luca.abeni@santannapisa.it Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -445,16 +445,33 @@ struct sched_dl_entity {
|
||||
*
|
||||
* @dl_yielded tells if task gave up the CPU before consuming
|
||||
* all its available runtime during the last job.
|
||||
*
|
||||
* @dl_non_contending tells if the task is inactive while still
|
||||
* contributing to the active utilization. In other words, it
|
||||
* indicates if the inactive timer has been armed and its handler
|
||||
* has not been executed yet. This flag is useful to avoid race
|
||||
* conditions between the inactive timer handler and the wakeup
|
||||
* code.
|
||||
*/
|
||||
int dl_throttled;
|
||||
int dl_boosted;
|
||||
int dl_yielded;
|
||||
int dl_non_contending;
|
||||
|
||||
/*
|
||||
* Bandwidth enforcement timer. Each -deadline task has its
|
||||
* own bandwidth to be enforced, thus we need one timer per task.
|
||||
*/
|
||||
struct hrtimer dl_timer;
|
||||
|
||||
/*
|
||||
* Inactive timer, responsible for decreasing the active utilization
|
||||
* at the "0-lag time". When a -deadline task blocks, it contributes
|
||||
* to GRUB's active utilization until the "0-lag time", hence a
|
||||
* timer is needed to decrease the active utilization at the correct
|
||||
* time.
|
||||
*/
|
||||
struct hrtimer inactive_timer;
|
||||
};
|
||||
|
||||
union rcu_special {
|
||||
|
Reference in New Issue
Block a user