@@ -21,6 +21,11 @@ It is useful to track down unexpected large latencies of a system.
.B \-d, \-\-distance=DIST
Set the distance of thread intervals in microseconds (default is 500 us). When cyclictest is called with the -t option and more than one thread is created, then this distance value is added to the interval of the threads: Interval(thread N) = Interval(thread N-1) + DIST
.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 \-i, \-\-interval=INTV
Set the base interval of the thread(s) in microseconds (default is 1000 us). This sets the interval of the first thread. See also -d.
.TP
@@ -173,6 +173,8 @@ static void display_help(void)
"-d DIST --distance=DIST distance of thread intervals in us default=500\n"
"-i INTV --interval=INTV base interval of thread in us default=1000\n"
"-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n"
+ "-D --duration=TIME specify a length for the test run.\n"
+ " Append 'm', 'h', or 'd' to specify minutes, hours or days.\n"
"-p PRIO --prio=PRIO priority\n"
"-S --smp SMP testing: options -a -t and same priority\n"
" of all threads\n"
@@ -190,6 +192,7 @@ static int tracelimit;
static int priority;
static int num_threads = 1;
static int max_cycles;
+static int duration;
static int interval = 1000;
static int distance = 500;
static int smp;
@@ -209,13 +212,14 @@ static void process_options (int argc, char *argv[])
{"distance", required_argument, NULL, 'd'},
{"interval", required_argument, NULL, 'i'},
{"loops", required_argument, NULL, 'l'},
+ {"duration", required_argument, NULL, 'D'},
{"priority", required_argument, NULL, 'p'},
{"smp", no_argument, NULL, 'S'},
{"threads", optional_argument, NULL, 't'},
{"help", no_argument, NULL, '?'},
{NULL, 0, NULL, 0}
};
- int c = getopt_long (argc, argv, "a::b:d:i:l:p:St::",
+ int c = getopt_long (argc, argv, "a::b:d:i:l:D:p:St::",
long_options, &option_index);
if (c == -1)
break;
@@ -239,6 +243,7 @@ static void process_options (int argc, char *argv[])
case 'd': distance = atoi(optarg); break;
case 'i': interval = atoi(optarg); break;
case 'l': max_cycles = atoi(optarg); break;
+ case 'D': duration = parse_time_string(optarg); break;
case 'p': priority = atoi(optarg); break;
case 'S':
smp = 1;
@@ -280,6 +285,9 @@ static void process_options (int argc, char *argv[])
if (num_threads < 1)
error = 1;
+ if (duration < 0)
+ error = 1;
+
if (priority && smp)
sameprio = 1;
@@ -317,6 +325,10 @@ int main(int argc, char *argv[])
signal(SIGINT, sighand);
signal(SIGTERM, sighand);
+ signal(SIGALRM, sighand);
+
+ if (duration)
+ alarm(duration);
receiver = calloc(num_threads, sizeof(struct params));
sender = calloc(num_threads, sizeof(struct params));
Many of the test programs have the --loop argument for automatic stopping. The main problem with the --loop argument is how long is --loop 1000? To simplify automated tests introduce a --duration argument which allows to set the time how long a test should run. This allows the test suite to define the execution time and also the timeout which a normal human can understand. For example run the test for 10 minutes and timeout at 11 minutes: # timeout 11m ptsematest -D 10m Signed-off-by: Daniel Wagner <wagi@monom.org> --- src/ptsematest/ptsematest.8 | 5 +++++ src/ptsematest/ptsematest.c | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) -- 2.20.1