[Libevent-users] [PATCH] Alter output of test/bench and add option flags

Christopher Layne clayne at anodized.com
Tue Sep 18 04:38:53 EDT 2007


1. Change output to provide a single line pct done + avg/min/max.
2. Add "-l" flag to support previous style.
3. Add "-x n" flag to specify max loop iterations.

In a nutshell, output looks like this:

$ debug/test/bench -x 8192
 done          avg          min          max
  17%          942          653        18997

-cl

--


Index: bench.c
===================================================================
--- bench.c	(revision 433)
+++ bench.c	(working copy)
@@ -55,7 +55,8 @@
 
 static int count, writes, fired;
 static int *pipes;
-static int num_pipes, num_active, num_writes;
+static int per_line;
+static int num_pipes, num_active, num_writes, num_iter;
 static struct event *events;
 
 
@@ -106,7 +107,7 @@
 	} while (count != fired);
 	gettimeofday(&te, NULL);
 
-	if (xcount != count) fprintf(stderr, "Xcount: %d, Rcount: %d\n", xcount, count);
+	if (xcount != count && per_line) fprintf(stderr, "Xcount: %d, Rcount: %d\n", xcount, count);
 	}
 
 	timersub(&te, &ts, &te);
@@ -122,11 +123,14 @@
 	struct timeval *tv;
 	int *cp;
 	extern char *optarg;
+	unsigned long t, min = 0x1 << 31, max = 0, avg = 0;
 
 	num_pipes = 100;
 	num_active = 1;
 	num_writes = num_pipes;
-	while ((c = getopt(argc, argv, "n:a:w:")) != -1) {
+	num_iter = 25;
+
+	while ((c = getopt(argc, argv, "n:a:w:x:l")) != -1) {
 		switch (c) {
 		case 'n':
 			num_pipes = atoi(optarg);
@@ -137,6 +141,12 @@
 		case 'w':
 			num_writes = atoi(optarg);
 			break;
+		case 'x':
+			num_iter = atoi(optarg);
+			break;
+		case 'l':
+			per_line++;
+			break;
 		default:
 			fprintf(stderr, "Illegal argument \"%c\"\n", c);
 			exit(1);
@@ -169,13 +179,23 @@
 		}
 	}
 
-	for (i = 0; i < 25; i++) {
+	fprintf(stdout, "%5s %12s %12s %12s\n", "done", "avg", "min", "max");
+	for (i = 1; i <= num_iter; i++) {
 		tv = run_once();
+		t = tv->tv_sec * 1000000L + tv->tv_usec;
 		if (tv == NULL)
 			exit(1);
-		fprintf(stdout, "%ld\n",
-			tv->tv_sec * 1000000L + tv->tv_usec);
+		if (per_line) {
+			fprintf(stdout, "%ld\n", t);
+		} else {
+			avg += t;
+			if (t < min) min = t;
+			else if (t > max) max = t;
+			fprintf(stdout, "\r%4d%% %12ld %12ld %12ld",
+				(100 * i) / num_iter, avg / i, min, max);
+		}
 	}
+	fprintf(stdout, "\n");
 
 	exit(0);
 }


More information about the Libevent-users mailing list