diff options
Diffstat (limited to 'Documentation/scheduler/sched-rt-group.txt')
| -rw-r--r-- | Documentation/scheduler/sched-rt-group.txt | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Documentation/scheduler/sched-rt-group.txt b/Documentation/scheduler/sched-rt-group.txt new file mode 100644 index 000000000000..1c6332f4543c --- /dev/null +++ b/Documentation/scheduler/sched-rt-group.txt | |||
| @@ -0,0 +1,59 @@ | |||
| 1 | |||
| 2 | |||
| 3 | Real-Time group scheduling. | ||
| 4 | |||
| 5 | The problem space: | ||
| 6 | |||
| 7 | In order to schedule multiple groups of realtime tasks each group must | ||
| 8 | be assigned a fixed portion of the CPU time available. Without a minimum | ||
| 9 | guarantee a realtime group can obviously fall short. A fuzzy upper limit | ||
| 10 | is of no use since it cannot be relied upon. Which leaves us with just | ||
| 11 | the single fixed portion. | ||
| 12 | |||
| 13 | CPU time is divided by means of specifying how much time can be spent | ||
| 14 | running in a given period. Say a frame fixed realtime renderer must | ||
| 15 | deliver 25 frames a second, which yields a period of 0.04s. Now say | ||
| 16 | it will also have to play some music and respond to input, leaving it | ||
| 17 | with around 80% for the graphics. We can then give this group a runtime | ||
| 18 | of 0.8 * 0.04s = 0.032s. | ||
| 19 | |||
| 20 | This way the graphics group will have a 0.04s period with a 0.032s runtime | ||
| 21 | limit. | ||
| 22 | |||
| 23 | Now if the audio thread needs to refill the DMA buffer every 0.005s, but | ||
| 24 | needs only about 3% CPU time to do so, it can do with a 0.03 * 0.005s | ||
| 25 | = 0.00015s. | ||
| 26 | |||
| 27 | |||
| 28 | The Interface: | ||
| 29 | |||
| 30 | system wide: | ||
| 31 | |||
| 32 | /proc/sys/kernel/sched_rt_period_ms | ||
| 33 | /proc/sys/kernel/sched_rt_runtime_us | ||
| 34 | |||
| 35 | CONFIG_FAIR_USER_SCHED | ||
| 36 | |||
| 37 | /sys/kernel/uids/<uid>/cpu_rt_runtime_us | ||
| 38 | |||
| 39 | or | ||
| 40 | |||
| 41 | CONFIG_FAIR_CGROUP_SCHED | ||
| 42 | |||
| 43 | /cgroup/<cgroup>/cpu.rt_runtime_us | ||
| 44 | |||
| 45 | [ time is specified in us because the interface is s32; this gives an | ||
| 46 | operating range of ~35m to 1us ] | ||
| 47 | |||
| 48 | The period takes values in [ 1, INT_MAX ], runtime in [ -1, INT_MAX - 1 ]. | ||
| 49 | |||
| 50 | A runtime of -1 specifies runtime == period, ie. no limit. | ||
| 51 | |||
| 52 | New groups get the period from /proc/sys/kernel/sched_rt_period_us and | ||
| 53 | a runtime of 0. | ||
| 54 | |||
| 55 | Settings are constrained to: | ||
| 56 | |||
| 57 | \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period | ||
| 58 | |||
| 59 | in order to keep the configuration schedulable. | ||
