diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2013-03-05 18:32:01 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2013-03-12 12:47:20 -0400 |
commit | 0a54a84457bb8a33113c7dd2a2b63b2a837cc92e (patch) | |
tree | 78bd56eec72c7d47749155315d3506c424e0dc24 /src | |
parent | 93ffe5be8fd1954bbfe5a04e55b81ac1d83d2de7 (diff) |
Cluster-aware rtspin and rt_launch.
This patch adds cluster scheduling options to
rtspin and rt_launch. The convenience routines
in litmus.h were also updated to facilitate
clustered scheduling. For partitioned scheduling,
just set cluster_size = 1 (default size for rtspin
and rt_launch).
Diffstat (limited to 'src')
-rw-r--r-- | src/litmus.c | 17 | ||||
-rw-r--r-- | src/task.c | 14 |
2 files changed, 17 insertions, 14 deletions
diff --git a/src/litmus.c b/src/litmus.c index b774c63..1110bd4 100644 --- a/src/litmus.c +++ b/src/litmus.c | |||
@@ -92,18 +92,19 @@ task_class_t str2class(const char* str) | |||
92 | #define NS_PER_MS 1000000 | 92 | #define NS_PER_MS 1000000 |
93 | 93 | ||
94 | int sporadic_task(lt_t e, lt_t p, lt_t phase, | 94 | int sporadic_task(lt_t e, lt_t p, lt_t phase, |
95 | int cpu, unsigned int priority, | 95 | int cluster, int cluster_size, unsigned int priority, |
96 | task_class_t cls, | 96 | task_class_t cls, |
97 | budget_policy_t budget_policy, int set_cpu_set) | 97 | budget_policy_t budget_policy, int set_cpu_set) |
98 | { | 98 | { |
99 | return sporadic_task_ns(e * NS_PER_MS, p * NS_PER_MS, phase * NS_PER_MS, | 99 | return sporadic_task_ns(e * NS_PER_MS, p * NS_PER_MS, phase * NS_PER_MS, |
100 | cpu, priority, cls, budget_policy, set_cpu_set); | 100 | cluster, cluster_size, priority, cls, |
101 | budget_policy, set_cpu_set); | ||
101 | } | 102 | } |
102 | 103 | ||
103 | int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, | 104 | int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, |
104 | int cpu, unsigned int priority, | 105 | int cluster, int cluster_size, unsigned int priority, |
105 | task_class_t cls, | 106 | task_class_t cls, |
106 | budget_policy_t budget_policy, int set_cpu_set) | 107 | budget_policy_t budget_policy, int migrate) |
107 | { | 108 | { |
108 | struct rt_task param; | 109 | struct rt_task param; |
109 | int ret; | 110 | int ret; |
@@ -116,15 +117,15 @@ int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, | |||
116 | param.exec_cost = e; | 117 | param.exec_cost = e; |
117 | param.period = p; | 118 | param.period = p; |
118 | param.relative_deadline = p; /* implicit deadline */ | 119 | param.relative_deadline = p; /* implicit deadline */ |
119 | param.cpu = cpu; | 120 | param.cpu = cluster_to_first_cpu(cluster, cluster_size); |
120 | param.cls = cls; | 121 | param.cls = cls; |
121 | param.phase = phase; | 122 | param.phase = phase; |
122 | param.budget_policy = budget_policy; | 123 | param.budget_policy = budget_policy; |
123 | param.priority = priority; | 124 | param.priority = priority; |
124 | 125 | ||
125 | if (set_cpu_set) { | 126 | if (migrate) { |
126 | ret = be_migrate_to_cpu(cpu); | 127 | ret = be_migrate_to_cluster(cluster, cluster_size); |
127 | check("migrate to cpu"); | 128 | check("migrate to cluster"); |
128 | } | 129 | } |
129 | return set_rt_task_param(gettid(), ¶m); | 130 | return set_rt_task_param(gettid(), ¶m); |
130 | } | 131 | } |
@@ -40,11 +40,11 @@ int __launch_rt_task(rt_fn_t rt_prog, void *rt_arg, rt_setup_fn_t setup, | |||
40 | return rt_task; | 40 | return rt_task; |
41 | } | 41 | } |
42 | 42 | ||
43 | int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, lt_t period, | 43 | int __create_rt_task(rt_fn_t rt_prog, void *arg, int cluster, int cluster_size, |
44 | unsigned int priority, task_class_t class) | 44 | lt_t wcet, lt_t period, unsigned int priority, task_class_t class) |
45 | { | 45 | { |
46 | struct rt_task params; | 46 | struct rt_task params; |
47 | params.cpu = cpu; | 47 | params.cpu = cluster_to_first_cpu(cluster, cluster_size); |
48 | params.period = period; | 48 | params.period = period; |
49 | params.exec_cost = wcet; | 49 | params.exec_cost = wcet; |
50 | params.cls = class; | 50 | params.cls = class; |
@@ -57,9 +57,11 @@ int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, lt_t period | |||
57 | (rt_setup_fn_t) set_rt_task_param, ¶ms); | 57 | (rt_setup_fn_t) set_rt_task_param, ¶ms); |
58 | } | 58 | } |
59 | 59 | ||
60 | int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, lt_t period, | 60 | int create_rt_task(rt_fn_t rt_prog, void *arg, int cluster, int cluster_size, |
61 | unsigned int priority) { | 61 | lt_t wcet, lt_t period, unsigned int prio) |
62 | return __create_rt_task(rt_prog, arg, cpu, wcet, period, priority, RT_CLASS_HARD); | 62 | { |
63 | return __create_rt_task(rt_prog, arg, cluster, cluster_size, wcet, period, | ||
64 | prio, RT_CLASS_HARD); | ||
63 | } | 65 | } |
64 | 66 | ||
65 | 67 | ||