From 3d1309855c533a39203a8feec95c6b7d51a76bc3 Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Thu, 15 May 2008 20:10:18 +0300 Subject: [PATCH] Add support for latency measuring --- membench.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/membench.c b/membench.c index 7cad40b..53b967b 100644 --- a/membench.c +++ b/membench.c @@ -14,7 +14,7 @@ long usec_diff(const struct timeval *a, const struct timeval *b) int main(int argc, char *argv[]) { - int iterations, j, k, count, size; + int iterations, j, k, count, size, mask, latcount; unsigned long *buf, i, tmp = 0; struct timeval start, end; @@ -24,14 +24,15 @@ int main(int argc, char *argv[]) iterations = 24; if (argc > 2) - count = atoi(argv[2]) * 1024; + count = atoi(argv[2]); else count = 1024; + latcount = count / 10; printf("Doing %d runs with buffer size goin up to %dk\n", iterations, 1 << (iterations - 10)); printf("Running each round %d times\n", count); - printf("Size of unsigned long is %lu bits\n", lsize * 8); + printf("Size of unsigned long is %lu bits\n\n", lsize * 8); switch (lsize) { case 4: @@ -45,9 +46,24 @@ int main(int argc, char *argv[]) exit(1); } + printf(" |" + " Read |" + " Write |\n" + " |" + "-----------------------" + "-----------------------\n" + " Size |" + " MiB/s ns |" + " MiB/s ns |\n" + "----------|" + "-----------------------" + "-----------------------\n" + ); + for (; j < iterations + 1; j++) { size = (1 << j) / lsize; buf = malloc(size * lsize); + mask = size - 1; if (buf == NULL) { printf("Malloc failed\n"); @@ -58,9 +74,10 @@ int main(int argc, char *argv[]) for (i = 0; i < size; i++) buf[i] = i; - printf("%luk\t", size * lsize / 1024); + printf("%8luk |", size * lsize / 1024); + + /* Read bandwidth*/ - printf("read: "); fflush(stdout); gettimeofday(&start, 0); @@ -72,24 +89,53 @@ int main(int argc, char *argv[]) gettimeofday(&end, 0); - printf("% 9.2f MB/s ", (double)(size * lsize) * + printf("% 9.2f ", (double)(size * lsize) * (1000000 / (1024.0 * 1024.0)) * count / (double) usec_diff(&start, &end)); + fflush(stdout); + + /* Read latency */ + + gettimeofday(&start, 0); + for (k = 0; k < latcount; k++) { + buf[0] = tmp; + for (i = 0; i < size; i++) + tmp += buf[random() & mask]; + } + + gettimeofday(&end, 0); + + printf("% 9.3f |", usec_diff(&start, &end) * 1000 / + ((double) (size * latcount ))); + - printf("write: "); fflush(stdout); + /* Write bandwidth */ + gettimeofday(&start, 0); for (k = 0; k < count; k++) for (i = 0; i < size; i++) buf[i] = i; gettimeofday(&end, 0); - printf("% 9.2f MB/s ", (double)(size * lsize) * + printf("% 9.2f ", (double)(size * lsize) * (1000000 / (1024.0 * 1024.0)) * count / (double) usec_diff(&start, &end)); + + /* Write latency */ + + gettimeofday(&start, 0); + for (k = 0; k < latcount; k++) + for (i = 0; i < size; i++) + buf[random() % mask] = i; + gettimeofday(&end, 0); + + printf("% 9.3f |", usec_diff(&start, &end) * 1000 / + ((double) (size * latcount ))); + printf("\n"); free(buf); -- 2.44.0