From: Darren Hart <dvhltc@us.ibm.com>
To: ltp-list <ltp-list@lists.sourceforge.net>
Cc: gowrishankar.m@in.ibm.com, Paul McKenney <paulmck@linux.vnet.ibm.com>
Subject: [LTP] [PATCH][realtime] Use librttest arg parsing and init_pi_mutex
Date: Mon, 24 Aug 2009 15:12:23 -0700 [thread overview]
Message-ID: <4A931047.7030000@us.ibm.com> (raw)
Use librttest arg parsing and init_pi_mutex
This patch converts pthread_cond_many to use the librttest infrastructure
for argument parsing and mutex initialization. The default behavior of the
test changes from using a non-pi mutex to a pi mutex. This is because -p
defaults to 1 in librttest. We could update run.sh with -p0, but I feel
inside a realtime testsuite this test should be using PI mutexes anyway.
Signed-off-by: Darren Hart <dvhltc@us.ibm.com>
Acked-by: Gowrishankar <gowrishankar.m@in.ibm.com>
CC: Paul McKenney <paulmck@linux.vnet.ibm.com>
Index: realtime/perf/latency/pthread_cond_many.c
===================================================================
--- realtime.orig/perf/latency/pthread_cond_many.c 2009-08-03 14:47:01.000000000 -0700
+++ realtime/perf/latency/pthread_cond_many.c 2009-08-03 14:51:01.000000000 -0700
@@ -24,12 +24,12 @@
*
* USAGE:
* Use run_auto.sh script in current directory to build and run test.
- * Use "-j" to enable jvm simulator.
*
* AUTHOR
* Paul E. McKenney <paulmck@us.ibm.com>
*
* HISTORY
+ * librttest parsing, threading, and mutex initialization - Darren Hart
*
*
*****************************************************************************/
@@ -46,10 +46,12 @@
#include <librttest.h>
#include <libstats.h>
#define PASS_US 100
-pthread_mutex_t child_mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t child_mutex;
volatile int *child_waiting = NULL;
double endtime;
pthread_cond_t *condlist = NULL;
+int iterations = 0;
+int nthreads = 0;
int realtime = 0;
int broadcast_flag = 0;
unsigned long latency = 0;
@@ -242,42 +244,68 @@
printf("Standard Deviation: %f\n", stats_stddev(&dat));
}
-void
-usage(char *progname)
+void usage(void)
{
- fprintf(stderr,
- "Usage: %s [--realtime] [--broadcast] iterations nthreads\n",
- progname);
- printf("currently options are not supported\n");
- exit(-1);
+ rt_help();
+ printf("pthread_cond_many specific options:\n");
+ printf(" -r,--realtime run with realtime priority\n");
+ printf(" -b,--broadcast use cond_broadcast instead of cond_signal\n");
+ printf(" -iITERATIONS iterations (required)\n");
+ printf(" -nNTHREADS number of threads (required)\n");
+ printf("deprecated unnamed arguments:\n");
+ printf(" pthread_cond_many [options] iterations nthreads\n");
+}
+
+int parse_args(int c, char *v)
+{
+ int handled;
+ switch (c) {
+ case 'h':
+ usage();
+ exit(0);
+ case 'a':
+ broadcast_flag = 1;
+ break;
+ case 'i':
+ iterations = atoi(v);
+ break;
+ case 'n':
+ nthreads = atoi(v);
+ break;
+ case 'r':
+ realtime = 1;
+ break;
+ default:
+ handled = 0;
+ break;
+ }
+ return handled;
}
int
main(int argc, char *argv[])
{
- int i = 1;
- long iter;
- long nthreads;
+ struct option longopts[] = {
+ {"broadcast", 0, NULL, 'a'},
+ {"realtime", 0, NULL, 'r'},
+ {NULL, 0, NULL, 0},
+ };
setup();
- while (i < argc) {
- if (strcmp(argv[i], "--realtime") == 0) {
- realtime = 1;
- i++;
- } else if (strcmp(argv[i], "--broadcast") == 0) {
- broadcast_flag = 1;
- i++;
- } else if (argv[i][0] == '-') {
- usage(argv[0]);
- } else {
- break;
- }
- }
- if (argc - i < 2) {
- usage(argv[0]);
+ init_pi_mutex(&child_mutex);
+ rt_init_long("ahi:n:r", longopts, parse_args, argc, argv);
+
+ /* Legacy command line arguments support, overrides getopt args. */
+ if (optind < argc)
+ iterations = strtol(argv[optind++], NULL, 0);
+ if (optind < argc)
+ nthreads = strtol(argv[optind++], NULL, 0);
+
+ /* Ensure we have the required arguments. */
+ if (iterations == 0 || nthreads == 0) {
+ usage();
+ exit(1);
}
- iter = strtol(argv[i], NULL, 0);
- nthreads = strtol(argv[i + 1], NULL, 0);
child_waiting = (int *)malloc(sizeof(*child_waiting) * nthreads);
condlist = (pthread_cond_t *)malloc(sizeof(*condlist) * nthreads);
@@ -285,7 +313,7 @@
fprintf(stderr, "Out of memory\n");
exit(-1);
}
- test_signal(iter, nthreads);
+ test_signal(iterations, nthreads);
printf("\nCriteria: latencies < %d us\n", PASS_US);
printf("Result: %s\n", fail ? "FAIL" : "PASS");
return 0;
Index: realtime/perf/latency/run.sh
===================================================================
--- realtime.orig/perf/latency/run.sh 2009-08-03 14:47:01.000000000 -0700
+++ realtime/perf/latency/run.sh 2009-08-03 14:47:33.000000000 -0700
@@ -35,11 +35,11 @@
rm -f $nthread.$iter.$nproc.*.out
i=0
-./pthread_cond_many --realtime --broadcast $iter $nthread > $nthread.$iter.$nproc.$i.out &
+./pthread_cond_many --realtime --broadcast -i $iter -n $nthread > $nthread.$iter.$nproc.$i.out &
i=1
while test $i -lt $nproc
do
- ./pthread_cond_many --broadcast $iter $nthread > $nthread.$iter.$nproc.$i.out &
+ ./pthread_cond_many --broadcast -i $iter -n $nthread > $nthread.$iter.$nproc.$i.out &
i=`expr $i + 1`
done
wait
--
Darren Hart
IBM Linux Technology Center
Real-Time Linux Team
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next reply other threads:[~2009-08-24 22:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-24 22:12 Darren Hart [this message]
2009-08-25 9:58 ` [LTP] [PATCH][realtime] Use librttest arg parsing and init_pi_mutex Subrata Modak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A931047.7030000@us.ibm.com \
--to=dvhltc@us.ibm.com \
--cc=gowrishankar.m@in.ibm.com \
--cc=ltp-list@lists.sourceforge.net \
--cc=paulmck@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox