diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-08-20 17:28:55 -0400 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-08-27 15:07:17 -0400 |
commit | 077aaecac31331b65442275843932314049a2ceb (patch) | |
tree | 6b24a59521a0f5e3853b7667669b54211b03b272 /litmus/Kconfig | |
parent | 9a19f35c9c287cb8abd5bcf276ae8d1a3e876907 (diff) |
EDF priority tie-breaks.wip-robust-tie-break
Instead of tie-breaking by PID (which is a static
priority tie-break), we can tie-break by other
job-level-unique parameters. This is desirable
because tasks are equaly affected by tardiness
since static priority tie-breaks cause tasks
with greater PID values to experience the most
tardiness.
There are four tie-break methods:
1) Lateness. If two jobs, J_{1,i} and J_{2,j} of
tasks T_1 and T_2, respectively, have equal
deadlines, we favor the job of the task that
had the worst lateness for jobs J_{1,i-1} and
J_{2,j-1}.
Note: Unlike tardiness, lateness may be less than
zero. This occurs when a job finishes before its
deadline.
2) Normalized Lateness. The same as #1, except
lateness is first normalized by each task's
relative deadline. This prevents tasks with short
relative deadlines and small execution requirements
from always losing tie-breaks.
3) Hash. The job tuple (PID, Job#) is used to
generate a hash. Hash values are then compared.
A job has ~50% chance of winning a tie-break
with respect to another job.
Note: Emperical testing shows that some jobs
can have +/- ~1.5% advantage in tie-breaks.
Linux's built-in hash function is not totally
a uniform hash.
4) PIDs. PID-based tie-break used in prior
versions of Litmus.
Conflicts:
litmus/edf_common.c
Diffstat (limited to 'litmus/Kconfig')
-rw-r--r-- | litmus/Kconfig | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/litmus/Kconfig b/litmus/Kconfig index 68459d4dca41..48ff3e3c657c 100644 --- a/litmus/Kconfig +++ b/litmus/Kconfig | |||
@@ -79,6 +79,52 @@ config SCHED_CPU_AFFINITY | |||
79 | 79 | ||
80 | Say Yes if unsure. | 80 | Say Yes if unsure. |
81 | 81 | ||
82 | choice | ||
83 | prompt "EDF Tie-Break Behavior" | ||
84 | default EDF_TIE_BREAK_LATENESS_NORM | ||
85 | help | ||
86 | Allows the configuration of tie-breaking behavior when the deadlines | ||
87 | of two EDF-scheduled tasks are equal. | ||
88 | |||
89 | config EDF_TIE_BREAK_LATENESS | ||
90 | bool "Lateness-based Tie Break" | ||
91 | help | ||
92 | Break ties between to jobs, A and B, based upon the lateness of their | ||
93 | prior jobs. The job with the greatest lateness has priority. Note that | ||
94 | lateness has a negative value if the prior job finished before its | ||
95 | deadline. | ||
96 | |||
97 | config EDF_TIE_BREAK_LATENESS_NORM | ||
98 | bool "Normalized Lateness-based Tie Break" | ||
99 | help | ||
100 | Break ties between to jobs, A and B, based upon the lateness, normalized | ||
101 | by relative deadline, their prior jobs. The job with the greatest | ||
102 | normalized lateness has priority. Note that lateness has a negative value | ||
103 | if the prior job finished before its deadline. | ||
104 | |||
105 | Normalized lateness tie-breaks are likely desireable over non-normalized | ||
106 | tie-breaks if the execution times and/or relative deadlines of tasks in a | ||
107 | task set vary greatly. | ||
108 | |||
109 | config EDF_TIE_BREAK_HASH | ||
110 | bool "Hash-based Tie Breaks" | ||
111 | help | ||
112 | Break ties between two jobs, A and B, with equal deadlines by using a | ||
113 | uniform hash; i.e.: hash(A.pid, A.job_num) < hash(B.pid, B.job_num). Job | ||
114 | A has ~50% of winning a given tie-break. | ||
115 | |||
116 | config EDF_PID_TIE_BREAK | ||
117 | bool "PID-based Tie Breaks" | ||
118 | help | ||
119 | Break ties based upon OS-assigned process IDs. Use this option if | ||
120 | required by algorithm's real-time analysis or per-task response-time | ||
121 | jitter must be minimized in overload conditions. | ||
122 | |||
123 | NOTES: | ||
124 | * This tie-breaking method was default in Litmus 2012.2 and before. | ||
125 | |||
126 | endchoice | ||
127 | |||
82 | endmenu | 128 | endmenu |
83 | 129 | ||
84 | menu "Tracing" | 130 | menu "Tracing" |