diff options
Diffstat (limited to 'litmus/Kconfig')
-rw-r--r-- | litmus/Kconfig | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/litmus/Kconfig b/litmus/Kconfig index 5408ef6b159b..fdf31f3dd6c2 100644 --- a/litmus/Kconfig +++ b/litmus/Kconfig | |||
@@ -1,5 +1,184 @@ | |||
1 | menu "LITMUS^RT" | 1 | menu "LITMUS^RT" |
2 | 2 | ||
3 | menu "Scheduling" | ||
4 | |||
5 | config RELEASE_MASTER | ||
6 | bool "Release-master Support" | ||
7 | depends on ARCH_HAS_SEND_PULL_TIMERS && SMP | ||
8 | default n | ||
9 | help | ||
10 | Allow one processor to act as a dedicated interrupt processor | ||
11 | that services all timer interrupts, but that does not schedule | ||
12 | real-time tasks. See RTSS'09 paper for details | ||
13 | (http://www.cs.unc.edu/~anderson/papers.html). | ||
14 | |||
15 | config PREFER_LOCAL_LINKING | ||
16 | bool "Link newly arrived tasks locally if possible" | ||
17 | depends on SMP | ||
18 | default y | ||
19 | help | ||
20 | In linking-based schedulers such as GSN-EDF, if an idle CPU processes | ||
21 | a job arrival (i.e., when a job resumed or was released), it can | ||
22 | either link the task to itself and schedule it immediately (to avoid | ||
23 | unnecessary scheduling latency) or it can try to link it to the CPU | ||
24 | where it executed previously (to maximize cache affinity, at the | ||
25 | expense of increased latency due to the need to send an IPI). | ||
26 | |||
27 | In lightly loaded systems, this option can significantly reduce | ||
28 | scheduling latencies. In heavily loaded systems (where CPUs are | ||
29 | rarely idle), it will likely make hardly a difference. | ||
30 | |||
31 | If unsure, say yes. | ||
32 | |||
33 | config LITMUS_QUANTUM_LENGTH_US | ||
34 | int "quantum length (in us)" | ||
35 | default 1000 | ||
36 | range 500 10000 | ||
37 | help | ||
38 | Determine the desired quantum length, in microseconds, which | ||
39 | is used to determine the granularity of scheduling in | ||
40 | quantum-driven plugins (primarily PFAIR). This parameter does not | ||
41 | affect event-driven plugins (such as the EDF-based plugins and P-FP). | ||
42 | Default: 1000us = 1ms. | ||
43 | |||
44 | config BUG_ON_MIGRATION_DEADLOCK | ||
45 | bool "Panic on suspected migration deadlock" | ||
46 | default y | ||
47 | help | ||
48 | This is a debugging option. The LITMUS^RT migration support code for | ||
49 | global scheduling contains a simple heuristic to detect when the | ||
50 | system deadlocks due to circular stack dependencies. | ||
51 | |||
52 | For example, such a deadlock exists if CPU 0 waits for task A's stack | ||
53 | to become available while using task B's stack, and CPU 1 waits for | ||
54 | task B's stack to become available while using task A's stack. Such | ||
55 | a situation can arise in (buggy) global scheduling plugins. | ||
56 | |||
57 | With this option enabled, such a scenario with result in a BUG(). | ||
58 | You can turn off this option when debugging on real hardware (e.g., | ||
59 | to rescue traces, etc. that would be hard to get after a panic). | ||
60 | |||
61 | Only turn this off if you really know what you are doing. If this | ||
62 | BUG() triggers, the scheduler is broken and turning off this option | ||
63 | won't fix it. | ||
64 | |||
65 | |||
66 | endmenu | ||
67 | |||
68 | menu "Real-Time Synchronization" | ||
69 | |||
70 | config NP_SECTION | ||
71 | bool "Non-preemptive section support" | ||
72 | default y | ||
73 | help | ||
74 | Allow tasks to become non-preemptable. | ||
75 | Note that plugins still need to explicitly support non-preemptivity. | ||
76 | Currently, only the GSN-EDF, PSN-EDF, and P-FP plugins have such support. | ||
77 | |||
78 | This is required to support locking protocols such as the FMLP. | ||
79 | If disabled, all tasks will be considered preemptable at all times. | ||
80 | |||
81 | config LITMUS_LOCKING | ||
82 | bool "Support for real-time locking protocols" | ||
83 | depends on NP_SECTION | ||
84 | default y | ||
85 | help | ||
86 | Enable LITMUS^RT's multiprocessor real-time locking protocols with | ||
87 | predicable maximum blocking times. | ||
88 | |||
89 | Say Yes if you want to include locking protocols such as the FMLP and | ||
90 | Baker's SRP. | ||
91 | |||
92 | endmenu | ||
93 | |||
94 | menu "Performance Enhancements" | ||
95 | |||
96 | config SCHED_CPU_AFFINITY | ||
97 | bool "Local Migration Affinity" | ||
98 | depends on X86 && SYSFS | ||
99 | default y | ||
100 | help | ||
101 | Rescheduled tasks prefer CPUs near to their previously used CPU. | ||
102 | This may improve cache performance through possible preservation of | ||
103 | cache affinity, at the expense of (slightly) more involved scheduling | ||
104 | logic. | ||
105 | |||
106 | Warning: May make bugs harder to find since tasks may migrate less often. | ||
107 | |||
108 | NOTES: | ||
109 | * Feature is not utilized by PFair/PD^2. | ||
110 | |||
111 | Say Yes if unsure. | ||
112 | |||
113 | config ALLOW_EARLY_RELEASE | ||
114 | bool "Allow Early Releasing" | ||
115 | default y | ||
116 | help | ||
117 | Allow tasks to release jobs early (while still maintaining job | ||
118 | precedence constraints). Only supported by EDF schedulers. Early | ||
119 | releasing must be explicitly requested by real-time tasks via | ||
120 | the task_params passed to sys_set_task_rt_param(). | ||
121 | |||
122 | Early releasing can improve job response times while maintaining | ||
123 | real-time correctness. However, it can easily peg your CPUs | ||
124 | since tasks never suspend to wait for their next job. As such, early | ||
125 | releasing is really only useful in the context of implementing | ||
126 | bandwidth servers, interrupt handling threads, or short-lived | ||
127 | computations. | ||
128 | |||
129 | Beware that early releasing may affect real-time analysis | ||
130 | if using locking protocols or I/O. | ||
131 | |||
132 | Say Yes if unsure. | ||
133 | |||
134 | choice | ||
135 | prompt "EDF Tie-Break Behavior" | ||
136 | default EDF_TIE_BREAK_LATENESS_NORM | ||
137 | help | ||
138 | Allows the configuration of tie-breaking behavior when the deadlines | ||
139 | of two EDF-scheduled tasks are equal. | ||
140 | |||
141 | config EDF_TIE_BREAK_LATENESS | ||
142 | bool "Lateness-based Tie Break" | ||
143 | help | ||
144 | Break ties between two jobs, A and B, based upon the lateness of their | ||
145 | prior jobs. The job with the greatest lateness has priority. Note that | ||
146 | lateness has a negative value if the prior job finished before its | ||
147 | deadline. | ||
148 | |||
149 | config EDF_TIE_BREAK_LATENESS_NORM | ||
150 | bool "Normalized Lateness-based Tie Break" | ||
151 | help | ||
152 | Break ties between two jobs, A and B, based upon the lateness, normalized | ||
153 | by relative deadline, of their prior jobs. The job with the greatest | ||
154 | normalized lateness has priority. Note that lateness has a negative value | ||
155 | if the prior job finished before its deadline. | ||
156 | |||
157 | Normalized lateness tie-breaks are likely desireable over non-normalized | ||
158 | tie-breaks if the execution times and/or relative deadlines of tasks in a | ||
159 | task set vary greatly. | ||
160 | |||
161 | config EDF_TIE_BREAK_HASH | ||
162 | bool "Hash-based Tie Breaks" | ||
163 | help | ||
164 | Break ties between two jobs, A and B, with equal deadlines by using a | ||
165 | uniform hash; i.e.: hash(A.pid, A.job_num) < hash(B.pid, B.job_num). Job | ||
166 | A has ~50% of winning a given tie-break. | ||
167 | |||
168 | config EDF_PID_TIE_BREAK | ||
169 | bool "PID-based Tie Breaks" | ||
170 | help | ||
171 | Break ties based upon OS-assigned thread IDs. Use this option if | ||
172 | required by algorithm's real-time analysis or per-task response-time | ||
173 | jitter must be minimized. | ||
174 | |||
175 | NOTES: | ||
176 | * This tie-breaking method was default in Litmus 2012.2 and before. | ||
177 | |||
178 | endchoice | ||
179 | |||
180 | endmenu | ||
181 | |||
3 | menu "Tracing" | 182 | menu "Tracing" |
4 | 183 | ||
5 | config FEATHER_TRACE | 184 | config FEATHER_TRACE |
@@ -154,6 +333,20 @@ config SCHED_DEBUG_TRACE_CALLER | |||
154 | 333 | ||
155 | If unsure, say No. | 334 | If unsure, say No. |
156 | 335 | ||
336 | config PREEMPT_STATE_TRACE | ||
337 | bool "Trace preemption state machine transitions" | ||
338 | depends on SCHED_DEBUG_TRACE && DEBUG_KERNEL | ||
339 | default n | ||
340 | help | ||
341 | With this option enabled, each CPU will log when it transitions | ||
342 | states in the preemption state machine. This state machine is | ||
343 | used to determine how to react to IPIs (avoid races with in-flight IPIs). | ||
344 | |||
345 | Warning: this creates a lot of information in the debug trace. Only | ||
346 | recommended when you are debugging preemption-related races. | ||
347 | |||
348 | If unsure, say No. | ||
349 | |||
157 | endmenu | 350 | endmenu |
158 | 351 | ||
159 | endmenu | 352 | endmenu |