diff options
Diffstat (limited to 'src/litmus.c')
-rw-r--r-- | src/litmus.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/litmus.c b/src/litmus.c index b0416c4..f7c91de 100644 --- a/src/litmus.c +++ b/src/litmus.c | |||
@@ -39,6 +39,33 @@ int be_migrate_to(int target_cpu) | |||
39 | return sched_setaffinity(0, sizeof(cpu_set_t), &cpu_set); | 39 | return sched_setaffinity(0, sizeof(cpu_set_t), &cpu_set); |
40 | } | 40 | } |
41 | 41 | ||
42 | static unsigned int compute_pfair_deadline(lt_t wt_num, lt_t wt_den) | ||
43 | { | ||
44 | int dead; | ||
45 | dead = wt_den / wt_num; | ||
46 | if (wt_den % wt_num > 0) | ||
47 | dead++; | ||
48 | return dead; | ||
49 | } | ||
50 | |||
51 | unsigned int compute_initial_cpu_edfos(lt_t fracs[][2]) | ||
52 | { | ||
53 | int initial_cpu = -1; | ||
54 | int lowest_deadline = UINT_MAX; | ||
55 | int current_deadline, i; | ||
56 | for (i = 0; i < NR_CPUS_EDF_OS; i++) { | ||
57 | if (fracs[i][0] > 0) { | ||
58 | current_deadline = compute_pfair_deadline(fracs[i][0], | ||
59 | fracs[i][1]); | ||
60 | if (current_deadline < lowest_deadline) { | ||
61 | lowest_deadline = current_deadline; | ||
62 | initial_cpu = i; | ||
63 | } | ||
64 | } | ||
65 | } | ||
66 | return initial_cpu; | ||
67 | } | ||
68 | |||
42 | int sporadic_task(lt_t e, lt_t p, lt_t phase, | 69 | int sporadic_task(lt_t e, lt_t p, lt_t phase, |
43 | int cpu, task_class_t cls, | 70 | int cpu, task_class_t cls, |
44 | budget_policy_t budget_policy, int set_cpu_set) | 71 | budget_policy_t budget_policy, int set_cpu_set) |
@@ -107,7 +134,7 @@ int sporadic_task_ns_edffm(lt_t e, lt_t p, lt_t phase, int cpu, | |||
107 | return set_rt_task_param(gettid(), ¶m); | 134 | return set_rt_task_param(gettid(), ¶m); |
108 | } | 135 | } |
109 | 136 | ||
110 | int sporadic_task_ns_edfos(lt_t e, lt_t p, lt_t phase, | 137 | int sporadic_task_ns_edfos(lt_t e, lt_t p, lt_t phase, int cpu, |
111 | lt_t fracs[][2], task_class_t cls, | 138 | lt_t fracs[][2], task_class_t cls, |
112 | budget_policy_t budget_policy) | 139 | budget_policy_t budget_policy) |
113 | { | 140 | { |
@@ -118,7 +145,8 @@ int sporadic_task_ns_edfos(lt_t e, lt_t p, lt_t phase, | |||
118 | os.first_cpu = UINT_MAX; | 145 | os.first_cpu = UINT_MAX; |
119 | param.exec_cost = e; | 146 | param.exec_cost = e; |
120 | param.period = p; | 147 | param.period = p; |
121 | for (i = 0; i < NR_CPUS; i++) { | 148 | param.cpu = cpu; |
149 | for (i = 0; i < NR_CPUS_EDF_OS; i++) { | ||
122 | if (fracs[i][0] > 0) { | 150 | if (fracs[i][0] > 0) { |
123 | os.migrat++; | 151 | os.migrat++; |
124 | if (os.first_cpu == UINT_MAX) | 152 | if (os.first_cpu == UINT_MAX) |