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 | ||
