aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2007-10-07 02:35:38 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2007-10-07 02:35:38 -0400
commit158a44baec2e855f6a4f0359a87e2b88c348a955 (patch)
tree68dd8d74908e97a50ed84e5a7b36aa40ffddfbb5 /kernel
parent9fb6f8ad40d1ba1cd946adb930a3dafc230f4dc6 (diff)
adaptive: fix weight change metric
It does not depend on absolute error, but on relative change.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched_adaptive.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/sched_adaptive.c b/kernel/sched_adaptive.c
index 8ccb7a006e..54d707b880 100644
--- a/kernel/sched_adaptive.c
+++ b/kernel/sched_adaptive.c
@@ -141,6 +141,7 @@ static void set_service_level(struct task_struct* t, unsigned int level)
141 141
142void adaptive_optimize(void) 142void adaptive_optimize(void)
143{ 143{
144 TRACE("running adaptive optimizer\n");
144 last_optimizer_run = jiffies; 145 last_optimizer_run = jiffies;
145} 146}
146 147
@@ -394,7 +395,7 @@ static reschedule_check_t adaptive_scheduler_tick(void)
394static noinline void job_completion(struct task_struct *t) 395static noinline void job_completion(struct task_struct *t)
395{ 396{
396 long delta; 397 long delta;
397 fp_t actual_weight; 398 fp_t actual_weight, old_estimate;
398 BUG_ON(!t); 399 BUG_ON(!t);
399 400
400 sched_trace_job_completion(t); 401 sched_trace_job_completion(t);
@@ -403,9 +404,12 @@ static noinline void job_completion(struct task_struct *t)
403 404
404 actual_weight = _frac(t->rt_param.times.exec_time, 405 actual_weight = _frac(t->rt_param.times.exec_time,
405 t->rt_param.basic_params.period); 406 t->rt_param.basic_params.period);
407 old_estimate = get_estimated_weight(t);
406 update_estimate(&t->rt_param.predictor_state, actual_weight, 408 update_estimate(&t->rt_param.predictor_state, actual_weight,
407 fc_a, fc_b, fc_c); 409 fc_a, fc_b, fc_c);
408 if (_gt(_abs(t->rt_param.predictor_state.error), task_error_threshold)) 410 if (_gt(_div(_abs(get_estimated_weight(t) - old_estimate),
411 get_estimate_weight(t)),
412 task_error_threshold))
409 adaptive_optimize(); 413 adaptive_optimize();
410 414
411 TRACE_TASK(t, "job %d completes, delta WCET = %d\n", 415 TRACE_TASK(t, "job %d completes, delta WCET = %d\n",