On Wed, 7 Oct 2020, Daniel Wagner wrote: > Signed-off-by: Daniel Wagner <dwagner@xxxxxxx> > --- > src/rt-migrate-test/rt-migrate-test.8 | 41 +++++++------- > src/rt-migrate-test/rt-migrate-test.c | 82 +++++++++++++-------------- > 2 files changed, 59 insertions(+), 64 deletions(-) > > diff --git a/src/rt-migrate-test/rt-migrate-test.8 b/src/rt-migrate-test/rt-migrate-test.8 > index b9c07f1ed80a..5bbacb5333b8 100644 > --- a/src/rt-migrate-test/rt-migrate-test.8 > +++ b/src/rt-migrate-test/rt-migrate-test.8 > @@ -1,11 +1,11 @@ > .\" > -.TH RT-MIGRATE-TEST 8 "April 21, 2016" > +.TH RT-MIGRATE-TEST 8 "September 18, 2020" > .\" Please adjust this date whenever editing this manpage > .SH NAME > rt-migrate-test \- real-time task migration program > .SH SYNOPSIS > -.B rt-migrate-test > -.RI "[\-ceh] [\-p prio] [\-r time] [\-s time] [\-m time] [\-l loops] [nr_tasks] > +.LP > +rt-migrate-test [-c|--check] [-D|--duration TIME] [-e|--equal] [-h|--help] [-l|--loops LOOPS] [-m|--maxerr TIME] [-p|--prio PRIO] [-r|--run-time TIME] [-s|--sleep-time TIME] [NR_TASKS] > .SH DESCRIPTION > Test real-time multiprocessor scheduling of tasks to ensure the highest priority tasks are running on all available CPUs > .SH OPTIONS > @@ -15,44 +15,43 @@ This program follows the usual GNU command line syntax, with long options starti > In the summary of options, a value in brackets (), indicates a default value > .br > .TP > +.B \-c, \-\-check > +Stop if lower prio task is quicker than higher (off) > +.TP > .B \-D, \-\-duration=TIME > Specify a length for the test run. > .br > Append 'm', 'h', or 'd' to specify minutes, hours or days. > .TP > -.B \-p, \-\-prio=prio > -base priority to start RT tasks with (2) > +.B \-e, \-\-equal > +Use equal prio for #CPU-1 tasks (requires > 2 CPUS) > .br > .TP > -.B \-r, \-\-run\-time=time > -Run time (ms) to busy loop the threads (20) > +.B \-h, \-\-help > +Display usage > .br > .TP > -.B \-s, \-\-sleep\-time=time > -Sleep time (ms) between intervals (100) > +.B \-l \-\-loops=LOOPS > +Number of iterations to run (50) > .br > .TP > -.B \-m, \-\-maxerr=time > +.B \-m, \-\-maxerr=TIME > Max allowed error (microsecs) > .br > .TP > -.B \-l \-\-loops=loops > -Number of iterations to run (50) > -.br > -.TP > -.B \-e > -Use equal prio for #CPU-1 tasks (requires > 2 CPUS) > +.B \-p, \-\-prio=PRIO > +base priority to start RT tasks with (2) > .br > .TP > -.B \-c, \-\-check > -Stop if lower prio task is quicker than higher (off) > +.B \-r, \-\-run\-time=TIME > +Run time (ms) to busy loop the threads (20) > .br > .TP > -.B \-h, \-\-help > -Display usage > +.B \-s, \-\-sleep\-time=TIME > +Sleep time (ms) between intervals (100) > .br > .TP > -.B [nr\-tasks] > +.B [NR_TASKS] > number of tasks to run (number of cpus + 1) > .br > .SH AUTHOR > diff --git a/src/rt-migrate-test/rt-migrate-test.c b/src/rt-migrate-test/rt-migrate-test.c > index 4863238edeb4..68824606faf1 100644 > --- a/src/rt-migrate-test/rt-migrate-test.c > +++ b/src/rt-migrate-test/rt-migrate-test.c > @@ -146,71 +146,67 @@ static void print_progress_bar(int percent) > fflush(stderr); > } > > -static void usage(char **argv) > +static void usage(int error) > { > - char *arg = argv[0]; > - char *p = arg+strlen(arg); > - > - while (p >= arg && *p != '/') > - p--; > - p++; > - > - printf("%s %1.2f\n", p, VERSION); > + printf("rt-migrate-test %1.2f\n", VERSION); > printf("Usage:\n" > - "%s <options> nr_tasks\n\n" > - "-p prio --prio prio base priority to start RT tasks with (2)\n" > - "-r time --run-time time Run time (ms) to busy loop the threads (20)\n" > - "-s time --sleep-time time Sleep time (ms) between intervals (100)\n" > - "-m time --maxerr time Max allowed error (microsecs)\n" > - "-l loops --loops loops Number of iterations to run (50)\n" > - "-D --duration=TIME specify a length for the test run.\n" > - " Append 'm', 'h', or 'd' to specify minutes, hours or days.\n" > - "-e Use equal prio for #CPU-1 tasks (requires > 2 CPUS)\n" > - "-c --check Stop if lower prio task is quicker than higher (off)\n" > - "-h --help\n" > - " () above are defaults \n", > - p); > - exit(0); > + "rt-migrate-test <options> [NR_TASKS]\n\n" > + "-c --check Stop if lower prio task is quicker than higher (off)\n" > + "-D TIME --duration=TIME Specify a length for the test run.\n" > + " Append 'm', 'h', or 'd' to specify minutes, hours or\n" > + " days.\n" > + "-e --equal Use equal prio for #CPU-1 tasks (requires > 2 CPUS)\n" > + "-h --help Print this help message\n" > + "-l LOOPS --loops=LOOPS Number of iterations to run (50)\n" > + "-m TIME --maxerr=TIME Max allowed error (microsecs)\n" > + "-p PRIO --prio=PRIO base priority to start RT tasks with (2)\n" > + "-r TIME --run-time=TIME Run time (ms) to busy loop the threads (20)\n" > + "-s TIME --sleep-time=TIME Sleep time (ms) between intervals (100)\n\n" > + " () above are defaults \n" > + ); > + exit(error); > } > > -static void parse_options (int argc, char *argv[]) > +static void parse_options(int argc, char *argv[]) > { > for (;;) { > int option_index = 0; > /** Options for getopt */ > static struct option long_options[] = { > - {"prio", required_argument, NULL, 'p'}, > - {"run-time", required_argument, NULL, 'r'}, > - {"sleep-time", required_argument, NULL, 's'}, > - {"maxerr", required_argument, NULL, 'm'}, > - {"loops", required_argument, NULL, 'l'}, > - {"duration", required_argument, NULL, 'D'}, > - {"check", no_argument, NULL, 'c'}, > - {"help", no_argument, NULL, '?'}, > + {"check", no_argument, NULL, 'c'}, > + {"duration", required_argument, NULL, 'D'}, > + {"equal", no_argument, NULL, 'e'}, > + {"help", no_argument, NULL, 'h'}, > + {"loops", required_argument, NULL, 'l'}, > + {"maxerr", required_argument, NULL, 'm'}, > + {"prio", required_argument, NULL, 'p'}, > + {"run-time", required_argument, NULL, 'r'}, > + {"sleep-time", required_argument, NULL, 's'}, > {NULL, 0, NULL, 0} > }; > - int c = getopt_long (argc, argv, "p:r:s:m:l:D:ech", > + int c = getopt_long(argc, argv, "cD:ehl:m:p:r:s:", > long_options, &option_index); > if (c == -1) > break; > switch (c) { > - case 'p': prio_start = atoi(optarg); break; > - case 'r': > - run_interval = atoi(optarg); > - break; > - case 's': interval = atoi(optarg); break; > - case 'l': nr_runs = atoi(optarg); break; > + case 'c': check = 1; break; > case 'D': duration = parse_time_string(optarg); break; > - case 'm': max_err = usec2nano(atoi(optarg)); break; > case 'e': equal = 1; break; > - case 'c': check = 1; break; > case '?': > case 'h': > - usage(argv); > + usage(0); > break; > + case 'l': nr_runs = atoi(optarg); break; > + case 'm': max_err = usec2nano(atoi(optarg)); break; > + case 'p': prio_start = atoi(optarg); break; > + case 'r': > + run_interval = atoi(optarg); > + break; > + case 's': interval = atoi(optarg); break; > + default: > + usage(1); > } > } > - > } > > static unsigned long long get_time(void) > -- > 2.28.0 > > Signed-off-by: John Kacur <jkacur@xxxxxxxxxx>