summaryrefslogtreecommitdiffstats
path: root/src/ptsematest/ptsematest.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ptsematest/ptsematest.c')
-rw-r--r--src/ptsematest/ptsematest.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/ptsematest/ptsematest.c b/src/ptsematest/ptsematest.c
index a31c745..6bedbc8 100644
--- a/src/ptsematest/ptsematest.c
+++ b/src/ptsematest/ptsematest.c
@@ -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));