aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2010-03-10 18:47:45 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2010-03-10 18:47:45 -0500
commit4eb2e8fa463990a57f5619b2aedb32c4a98c4ea0 (patch)
tree94739316512bc5440aca9ec6012d30e5ea5cef39
parentf2381aa53a0656c03f2dd8b9d753d2a84132aafb (diff)
Add -v (verbose) switch to rtspin.
Can be used to dump the delay loop that rtspin is using.
-rw-r--r--bin/rtspin.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/bin/rtspin.c b/bin/rtspin.c
index 89ccbba..aa97745 100644
--- a/bin/rtspin.c
+++ b/bin/rtspin.c
@@ -38,6 +38,7 @@ void usage(char *error) {
38#define NUMS 4096 38#define NUMS 4096
39static int num[NUMS]; 39static int num[NUMS];
40static double loop_length = 1.0; 40static double loop_length = 1.0;
41static char* progname;
41 42
42static int loop_once(void) 43static int loop_once(void)
43{ 44{
@@ -100,10 +101,17 @@ static void configure_loop(void)
100 fine_tune(0.1); 101 fine_tune(0.1);
101} 102}
102 103
104static void show_loop_length(void)
105{
106 printf("%s/%d: loop_length=%f (%ldus)\n",
107 progname, getpid(), loop_length,
108 (long) (loop_length * 1000000));
109}
110
103static void debug_delay_loop(void) 111static void debug_delay_loop(void)
104{ 112{
105 double start, end, delay; 113 double start, end, delay;
106 printf("loop_length=%f\n", loop_length); 114 show_loop_length();
107 while (1) { 115 while (1) {
108 for (delay = 0.5; delay > 0.01; delay -= 0.01) { 116 for (delay = 0.5; delay > 0.01; delay -= 0.01) {
109 start = wctime(); 117 start = wctime();
@@ -125,7 +133,7 @@ static int job(double exec_time)
125 return 0; 133 return 0;
126} 134}
127 135
128#define OPTSTR "p:c:wld:" 136#define OPTSTR "p:c:wld:v"
129 137
130int main(int argc, char** argv) 138int main(int argc, char** argv)
131{ 139{
@@ -139,9 +147,12 @@ int main(int argc, char** argv)
139 int wait = 0; 147 int wait = 0;
140 int test_loop = 0; 148 int test_loop = 0;
141 int skip_config = 0; 149 int skip_config = 0;
150 int verbose = 0;
142 double duration, start; 151 double duration, start;
143 task_class_t class = RT_CLASS_HARD; 152 task_class_t class = RT_CLASS_HARD;
144 153
154 progname = argv[0];
155
145 while ((opt = getopt(argc, argv, OPTSTR)) != -1) { 156 while ((opt = getopt(argc, argv, OPTSTR)) != -1) {
146 switch (opt) { 157 switch (opt) {
147 case 'w': 158 case 'w':
@@ -160,9 +171,14 @@ int main(int argc, char** argv)
160 test_loop = 1; 171 test_loop = 1;
161 break; 172 break;
162 case 'd': 173 case 'd':
163 loop_length = atof(optarg) / 1000000; 174 /* manually configure delay per loop iteration
175 * unit: microseconds */
176 loop_length = atof(optarg) / 1000000;
164 skip_config = 1; 177 skip_config = 1;
165 break; 178 break;
179 case 'v':
180 verbose = 1;
181 break;
166 case ':': 182 case ':':
167 usage("Argument missing."); 183 usage("Argument missing.");
168 break; 184 break;
@@ -173,7 +189,7 @@ int main(int argc, char** argv)
173 } 189 }
174 } 190 }
175 191
176 192
177 if (!skip_config) 193 if (!skip_config)
178 configure_loop(); 194 configure_loop();
179 195
@@ -183,7 +199,7 @@ int main(int argc, char** argv)
183 } 199 }
184 200
185 if (argc - optind < 3) 201 if (argc - optind < 3)
186 usage("Arguments missing."); 202 usage("Arguments missing.");
187 wcet_ms = atof(argv[optind + 0]); 203 wcet_ms = atof(argv[optind + 0]);
188 period_ms = atof(argv[optind + 1]); 204 period_ms = atof(argv[optind + 1]);
189 duration = atof(argv[optind + 2]); 205 duration = atof(argv[optind + 2]);
@@ -206,15 +222,18 @@ int main(int argc, char** argv)
206 } 222 }
207 223
208 ret = sporadic_task_ns(wcet, period, 0, cpu, class, migrate); 224 ret = sporadic_task_ns(wcet, period, 0, cpu, class, migrate);
209 225
210 if (ret < 0) 226 if (ret < 0)
211 bail_out("could not become rt tasks."); 227 bail_out("could not setup rt task params");
228
229 if (verbose)
230 show_loop_length();
212 231
213 init_litmus(); 232 init_litmus();
214 233
215 ret = task_mode(LITMUS_RT_TASK); 234 ret = task_mode(LITMUS_RT_TASK);
216 if (ret != 0) 235 if (ret != 0)
217 bail_out("task_mode()"); 236 bail_out("could not become RT task");
218 237
219 if (wait) { 238 if (wait) {
220 ret = wait_for_ts_release(); 239 ret = wait_for_ts_release();
@@ -222,7 +241,6 @@ int main(int argc, char** argv)
222 bail_out("wait_for_ts_release()"); 241 bail_out("wait_for_ts_release()");
223 } 242 }
224 243
225
226 start = wctime(); 244 start = wctime();
227 245
228 while (start + duration > wctime()) { 246 while (start + duration > wctime()) {