shithub: sysbench

Download patch

ref: 00128bc62f7b3d643caa11754e96387ac8e0830d
parent: 48a546aeb35a92612019402466507e1910c00f81
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Jul 14 00:09:14 EDT 2025

bench.c; clean up output, scale it better

--- a/bench.c
+++ b/bench.c
@@ -178,40 +178,55 @@
 	return res;
 }
 
+double
+scaletime(vlong ns, vlong n, char **unit)
+{
+	static const struct {
+		char *name;
+		vlong div;
+	} units[] = {
+		{"ns", 1},
+		{"μs", 1000},
+		{"ms", 1000*1000},
+		{"s",  1000*1000*1000},
+		{"m",  60*1000*1000*1000},
+		{"h",  3600*1000*1000*1000},
+	};
+	int i;
+
+	for(i = 0; i < nelem(units)-1; i++)
+		if(ns / (n * units[i].div) < 1000)
+			break;
+	*unit = units[i].name;
+	return (double)ns / (double)(n*units[i].div);
+}
+
 static void
 benchres(BResult *res)
 {
-	char nsop[32];
+	char *unit;
+	char tmop[64];
 	char cyop[32];
-	vlong nsperop;
+	double nsperop;
 	uvlong cyperop;
 
 	if(res->N <= 0) {
-		nsperop = 0;
-		cyperop = 0;
-	} else {
-		nsperop = res->ns / (vlong)res->N;
-		cyperop = res->cycles / (uvlong)res->N;
+		print("skipped\n");
+		return;
 	}
 
-	snprint(nsop, sizeof(nsop), "%10lld    ns/op", nsperop);
-	snprint(cyop, sizeof(cyop), "%10ulld    cy/op", cyperop);
+	nsperop = scaletime(res->ns, (vlong)res->N, &unit);
+	snprint(tmop, sizeof(tmop), "%12.2f %s/op", nsperop, unit);
 
-	if(res->N > 0 && nsperop < 100) {
-		if(nsperop < 10)
-			snprint(nsop, sizeof(nsop), "%13.2f ns/op", (double)res->ns / (double)res->N);
-		else
-			snprint(nsop, sizeof(nsop), "%12.1f  ns/op", (double)res->ns / (double)res->N);
-	}
+	cyperop = res->cycles / (uvlong)res->N;
+	if(cyperop < 10)
+		snprint(cyop, sizeof(cyop), "%13.2f cy/op", (double)res->cycles / (double)res->N);
+	else if(cyperop < 100)
+		snprint(cyop, sizeof(cyop), "%12.1f  cy/op", (double)res->cycles / (double)res->N);
+	else
+		snprint(cyop, sizeof(cyop), "%10ulld cy/op", cyperop);
 
-	if(res->N > 0 && cyperop < 100) {
-		if(cyperop < 10)
-			snprint(cyop, sizeof(cyop), "%13.2f cy/op", (double)res->cycles / (double)res->N);
-		else
-			snprint(cyop, sizeof(cyop), "%12.1f  cy/op", (double)res->cycles / (double)res->N);
-	}
-
-	print("%10d N %.16s\t%s (total %f s)\n", res->N, nsop, cyop, (double)res->ns / Nsec);
+	print("%10d N %s\t%s\n", res->N, tmop, cyop);
 }
 
 /*
--