diff options
author | Juri Lelli <juri.lelli@gmail.com> | 2013-11-07 08:43:47 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-01-13 07:46:46 -0500 |
commit | 6bfd6d72f51c51177676f2b1ba113fe0a85fdae4 (patch) | |
tree | 8c3c4c49f18ba3218da4274623b50da0a317f2d6 /kernel/sched/sched.h | |
parent | 332ac17ef5bfcff4766dfdfd3b4cdf10b8f8f155 (diff) |
sched/deadline: speed up SCHED_DEADLINE pushes with a push-heap
Data from tests confirmed that the original active load balancing
logic didn't scale neither in the number of CPU nor in the number of
tasks (as sched_rt does).
Here we provide a global data structure to keep track of deadlines
of the running tasks in the system. The structure is composed by
a bitmask showing the free CPUs and a max-heap, needed when the system
is heavily loaded.
The implementation and concurrent access scheme are kept simple by
design. However, our measurements show that we can compete with sched_rt
on large multi-CPUs machines [1].
Only the push path is addressed, the extension to use this structure
also for pull decisions is straightforward. However, we are currently
evaluating different (in order to decrease/avoid contention) data
structures to solve possibly both problems. We are also going to re-run
tests considering recent changes inside cpupri [2].
[1] http://retis.sssup.it/~jlelli/papers/Ospert11Lelli.pdf
[2] http://www.spinics.net/lists/linux-rt-users/msg06778.html
Signed-off-by: Juri Lelli <juri.lelli@gmail.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1383831828-15501-14-git-send-email-juri.lelli@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/sched.h')
-rw-r--r-- | kernel/sched/sched.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index ad4f4fbd002e..2b7421db6c41 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/slab.h> | 10 | #include <linux/slab.h> |
11 | 11 | ||
12 | #include "cpupri.h" | 12 | #include "cpupri.h" |
13 | #include "cpudeadline.h" | ||
13 | #include "cpuacct.h" | 14 | #include "cpuacct.h" |
14 | 15 | ||
15 | struct rq; | 16 | struct rq; |
@@ -503,6 +504,7 @@ struct root_domain { | |||
503 | cpumask_var_t dlo_mask; | 504 | cpumask_var_t dlo_mask; |
504 | atomic_t dlo_count; | 505 | atomic_t dlo_count; |
505 | struct dl_bw dl_bw; | 506 | struct dl_bw dl_bw; |
507 | struct cpudl cpudl; | ||
506 | 508 | ||
507 | /* | 509 | /* |
508 | * The "RT overload" flag: it gets set if a CPU has more than | 510 | * The "RT overload" flag: it gets set if a CPU has more than |