diff options
author | Dario Faggioli <raistlin@linux.it> | 2013-11-07 08:43:45 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2014-01-13 07:46:42 -0500 |
commit | 332ac17ef5bfcff4766dfdfd3b4cdf10b8f8f155 (patch) | |
tree | 84c6663542da4310c5c555afaac88ac9b696fe4b /kernel/sysctl.c | |
parent | 2d3d891d3344159d5b452a645e355bbe29591e8b (diff) |
sched/deadline: Add bandwidth management for SCHED_DEADLINE tasks
In order of deadline scheduling to be effective and useful, it is
important that some method of having the allocation of the available
CPU bandwidth to tasks and task groups under control.
This is usually called "admission control" and if it is not performed
at all, no guarantee can be given on the actual scheduling of the
-deadline tasks.
Since when RT-throttling has been introduced each task group have a
bandwidth associated to itself, calculated as a certain amount of
runtime over a period. Moreover, to make it possible to manipulate
such bandwidth, readable/writable controls have been added to both
procfs (for system wide settings) and cgroupfs (for per-group
settings).
Therefore, the same interface is being used for controlling the
bandwidth distrubution to -deadline tasks and task groups, i.e.,
new controls but with similar names, equivalent meaning and with
the same usage paradigm are added.
However, more discussion is needed in order to figure out how
we want to manage SCHED_DEADLINE bandwidth at the task group level.
Therefore, this patch adds a less sophisticated, but actually
very sensible, mechanism to ensure that a certain utilization
cap is not overcome per each root_domain (the single rq for !SMP
configurations).
Another main difference between deadline bandwidth management and
RT-throttling is that -deadline tasks have bandwidth on their own
(while -rt ones doesn't!), and thus we don't need an higher level
throttling mechanism to enforce the desired bandwidth.
This patch, therefore:
- adds system wide deadline bandwidth management by means of:
* /proc/sys/kernel/sched_dl_runtime_us,
* /proc/sys/kernel/sched_dl_period_us,
that determine (i.e., runtime / period) the total bandwidth
available on each CPU of each root_domain for -deadline tasks;
- couples the RT and deadline bandwidth management, i.e., enforces
that the sum of how much bandwidth is being devoted to -rt
-deadline tasks to stay below 100%.
This means that, for a root_domain comprising M CPUs, -deadline tasks
can be created until the sum of their bandwidths stay below:
M * (sched_dl_runtime_us / sched_dl_period_us)
It is also possible to disable this bandwidth management logic, and
be thus free of oversubscribing the system up to any arbitrary level.
Signed-off-by: Dario Faggioli <raistlin@linux.it>
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-12-git-send-email-juri.lelli@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sysctl.c')
-rw-r--r-- | kernel/sysctl.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index c8da99f905cf..c7fb0790ac63 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -414,6 +414,20 @@ static struct ctl_table kern_table[] = { | |||
414 | .mode = 0644, | 414 | .mode = 0644, |
415 | .proc_handler = sched_rr_handler, | 415 | .proc_handler = sched_rr_handler, |
416 | }, | 416 | }, |
417 | { | ||
418 | .procname = "sched_dl_period_us", | ||
419 | .data = &sysctl_sched_dl_period, | ||
420 | .maxlen = sizeof(unsigned int), | ||
421 | .mode = 0644, | ||
422 | .proc_handler = sched_dl_handler, | ||
423 | }, | ||
424 | { | ||
425 | .procname = "sched_dl_runtime_us", | ||
426 | .data = &sysctl_sched_dl_runtime, | ||
427 | .maxlen = sizeof(int), | ||
428 | .mode = 0644, | ||
429 | .proc_handler = sched_dl_handler, | ||
430 | }, | ||
417 | #ifdef CONFIG_SCHED_AUTOGROUP | 431 | #ifdef CONFIG_SCHED_AUTOGROUP |
418 | { | 432 | { |
419 | .procname = "sched_autogroup_enabled", | 433 | .procname = "sched_autogroup_enabled", |