aboutsummaryrefslogtreecommitdiffstats
path: root/include
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 /include
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 'include')
-rw-r--r--include/litmus.h36
1 files changed, 25 insertions, 11 deletions
diff --git a/include/litmus.h b/include/litmus.h
index b2e81f2..335d01b 100644
--- a/include/litmus.h
+++ b/include/litmus.h
@@ -21,6 +21,13 @@ extern "C" {
21int set_rt_task_param(pid_t pid, struct rt_task* param); 21int set_rt_task_param(pid_t pid, struct rt_task* param);
22int get_rt_task_param(pid_t pid, struct rt_task* param); 22int get_rt_task_param(pid_t pid, struct rt_task* param);
23 23
24/* Release-master-aware functions for getting the first
25 * CPU in a particular cluster or partition. Use these
26 * to set rt_task::cpu for cluster/partitioned scheduling.
27 */
28int partition_to_cpu(int partition);
29int cluster_to_first_cpu(int cluster, int cluster_size);
30
24/* setup helper */ 31/* setup helper */
25 32
26/* Times are given in ms. The 'priority' parameter 33/* Times are given in ms. The 'priority' parameter
@@ -30,9 +37,9 @@ int get_rt_task_param(pid_t pid, struct rt_task* param);
30 */ 37 */
31int sporadic_task( 38int sporadic_task(
32 lt_t e, lt_t p, lt_t phase, 39 lt_t e, lt_t p, lt_t phase,
33 int partition, unsigned int priority, 40 int cluster, int cluster_size, unsigned int priority,
34 task_class_t cls, 41 task_class_t cls,
35 budget_policy_t budget_policy, int set_cpu_set); 42 budget_policy_t budget_policy, int be_migrate);
36 43
37/* Times are given in ns. The 'priority' parameter 44/* Times are given in ns. The 'priority' parameter
38 * is only relevant under fixed-priority scheduling (and 45 * is only relevant under fixed-priority scheduling (and
@@ -41,16 +48,19 @@ int sporadic_task(
41 */ 48 */
42int sporadic_task_ns( 49int sporadic_task_ns(
43 lt_t e, lt_t p, lt_t phase, 50 lt_t e, lt_t p, lt_t phase,
44 int cpu, unsigned int priority, 51 int cluster, int cluster_size, unsigned int priority,
45 task_class_t cls, 52 task_class_t cls,
46 budget_policy_t budget_policy, int set_cpu_set); 53 budget_policy_t budget_policy, int be_migrate);
47 54
48/* Convenience macros. Budget enforcement off by default in these macros. */ 55/* Convenience macros. Budget enforcement off by default in these macros. */
49#define sporadic_global(e, p) \ 56#define sporadic_global(e, p) \
50 sporadic_task(e, p, 0, 0, LITMUS_LOWEST_PRIORITY, \ 57 sporadic_task(e, p, 0, 0, 0, LITMUS_LOWEST_PRIORITY, \
51 RT_CLASS_SOFT, NO_ENFORCEMENT, 0) 58 RT_CLASS_SOFT, NO_ENFORCEMENT, 0)
52#define sporadic_partitioned(e, p, cpu) \ 59#define sporadic_partitioned(e, p, partition) \
53 sporadic_task(e, p, 0, cpu, LITMUS_LOWEST_PRIORITY, \ 60 sporadic_task(e, p, 0, partition, 1, LITMUS_LOWEST_PRIORITY, \
61 RT_CLASS_SOFT, NO_ENFORCEMENT, 1)
62#define sporadic_clustered(e, p, cluster, cluster_size) \
63 sporadic_task(e, p, 0, cluster, cluster_size, LITMUS_LOWEST_PRIORITY, \
54 RT_CLASS_SOFT, NO_ENFORCEMENT, 1) 64 RT_CLASS_SOFT, NO_ENFORCEMENT, 1)
55 65
56/* file descriptor attached shared objects support */ 66/* file descriptor attached shared objects support */
@@ -98,10 +108,14 @@ void exit_litmus(void);
98/* A real-time program. */ 108/* A real-time program. */
99typedef int (*rt_fn_t)(void*); 109typedef int (*rt_fn_t)(void*);
100 110
101/* These two functions configure the RT task to use enforced exe budgets */ 111/* These two functions configure the RT task to use enforced exe budgets.
102int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, lt_t period, unsigned int prio); 112 * Partitioned scheduling: cluster = desired partition, cluster_size = 1
103int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, lt_t wcet, 113 * Global scheduling: cluster = 0, cluster_size = 0
104 lt_t period, unsigned int priority, task_class_t cls); 114 */
115int create_rt_task(rt_fn_t rt_prog, void *arg, int cluster, int cluster_size,
116 lt_t wcet, lt_t period, unsigned int prio);
117int __create_rt_task(rt_fn_t rt_prog, void *arg, int cluster, int cluster_size,
118 lt_t wcet, lt_t period, unsigned int prio, task_class_t cls);
105 119
106/* per-task modes */ 120/* per-task modes */
107enum rt_task_mode_t { 121enum rt_task_mode_t {