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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.