aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2013-03-05 18:32:01 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2013-03-12 12:47:20 -0400
commit0a54a84457bb8a33113c7dd2a2b63b2a837cc92e (patch)
tree78bd56eec72c7d47749155315d3506c424e0dc24 /src
parent93ffe5be8fd1954bbfe5a04e55b81ac1d83d2de7 (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.c17
-rw-r--r--src/task.c14
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
94int sporadic_task(lt_t e, lt_t p, lt_t phase, 94int 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
103int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, 104int 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(), &param); 130 return set_rt_task_param(gettid(), &param);
130} 131}
diff --git a/src/task.c b/src/task.c
index ed1c6aa..9121f0c 100644
--- a/src/task.c
+++ b/src/task.c
@@ -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
43int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, lt_t period, 43int __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, &params); 57 (rt_setup_fn_t) set_rt_task_param, &params);
58} 58}
59 59
60int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, lt_t period, 60int 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