aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus/rt_param.h
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-09-20 18:57:20 -0400
committerGlenn Elliott <gelliott@cs.unc.edu>2012-09-20 18:57:20 -0400
commit150c1d5ed8541f3a2bfcde3d5f3174b9af4ab4fc (patch)
tree7970735e676afc237e40e0971119001429bf56ae /include/litmus/rt_param.h
parent33cb64c787070d6b60a02ea40064d717d3b9dc07 (diff)
Generalized GPU cost predictors + EWMA. (untested)wip-gpu-rtas12
Diffstat (limited to 'include/litmus/rt_param.h')
-rw-r--r--include/litmus/rt_param.h77
1 files changed, 67 insertions, 10 deletions
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h
index 44f85a366574..6da36f50240d 100644
--- a/include/litmus/rt_param.h
+++ b/include/litmus/rt_param.h
@@ -41,6 +41,32 @@ typedef enum {
41 PRECISE_SIGNALS, /* budget signals are triggered with hrtimers */ 41 PRECISE_SIGNALS, /* budget signals are triggered with hrtimers */
42} budget_signal_policy_t; 42} budget_signal_policy_t;
43 43
44typedef enum
45{
46 /* simple - all observations counted */
47 SIMPLE_AVG = 1,
48 SIMPLE_EWMA,
49
50 /* control chart, brute - std deviation fully calculated */
51 CC_BRUTE_AVG,
52 CC_BRUTE_EWMA,
53
54 /* control chart, moving range - std deviation est. from moving range */
55 CC_MR_AVG,
56 CC_MR_EWMA,
57} predictor_type;
58
59typedef struct predictor
60{
61 predictor_type type;
62 uint16_t window_size;
63
64 uint8_t sigmas;
65 uint16_t alpha_num;
66 uint16_t alpha_denom;
67} predictor_t;
68
69
44/* We use the common priority interpretation "lower index == higher priority", 70/* We use the common priority interpretation "lower index == higher priority",
45 * which is commonly used in fixed-priority schedulability analysis papers. 71 * which is commonly used in fixed-priority schedulability analysis papers.
46 * So, a numerically lower priority value implies higher scheduling priority, 72 * So, a numerically lower priority value implies higher scheduling priority,
@@ -180,23 +206,48 @@ typedef enum gpu_migration_dist
180 MIG_LAST = MIG_NONE 206 MIG_LAST = MIG_NONE
181} gpu_migration_dist_t; 207} gpu_migration_dist_t;
182 208
183typedef struct feedback_est{
184 fp_t est;
185 fp_t accum_err;
186} feedback_est_t;
187
188
189#define AVG_EST_WINDOW_SIZE 20 209#define AVG_EST_WINDOW_SIZE 20
190 210
191typedef struct avg_est{ 211typedef struct obs_history
192 lt_t history[AVG_EST_WINDOW_SIZE]; 212{
213 uint16_t window_size;
193 uint16_t count; 214 uint16_t count;
194 uint16_t idx; 215 uint16_t idx;
216 uint16_t ridx;
217
218 lt_t last_observed;
219 lt_t *observations;
220 lt_t *range;
221} obs_history_t;
222
223typedef struct avg_est {
224 uint8_t sigmas;
225
226 obs_history_t history;
227
195 lt_t sum; 228 lt_t sum;
229 lt_t rsum;
230
196 lt_t std; 231 lt_t std;
197 lt_t avg; 232 lt_t center_line;
198} avg_est_t; 233} avg_est_t;
199 234
235
236typedef struct ewma_est {
237 uint8_t sigmas;
238 uint16_t alpha_num;
239 uint16_t alpha_denom;
240
241 obs_history_t history;
242
243 lt_t rsum;
244
245 lt_t std;
246 lt_t center_line;
247} ewma_est_t;
248
249
250
200/* RT task parameters for scheduling extensions 251/* RT task parameters for scheduling extensions
201 * These parameters are inherited during clone and therefore must 252 * These parameters are inherited during clone and therefore must
202 * be explicitly set up before the task set is launched. 253 * be explicitly set up before the task set is launched.
@@ -243,7 +294,13 @@ struct rt_param {
243 long unsigned int held_gpus; // bitmap of held GPUs. 294 long unsigned int held_gpus; // bitmap of held GPUs.
244 295
245#ifdef CONFIG_LITMUS_AFFINITY_LOCKING 296#ifdef CONFIG_LITMUS_AFFINITY_LOCKING
246 avg_est_t gpu_migration_est[MIG_LAST+1]; 297// avg_est_t gpu_migration_est[MIG_LAST+1];
298 predictor_type prediction_mode;
299 union
300 {
301 avg_est_t gpu_avg_est[MIG_LAST+1];
302 ewma_est_t gpu_ewma_est[MIG_LAST+1];
303 };
247 304
248 gpu_migration_dist_t gpu_migration; 305 gpu_migration_dist_t gpu_migration;
249 int last_gpu; 306 int last_gpu;