]> git.itanic.dy.fi Git - membench/commitdiff
Add support for latency measuring
authorTimo Kokkonen <kaapeli@ee.oulu.fi>
Thu, 15 May 2008 17:10:18 +0000 (20:10 +0300)
committerTimo Kokkonen <kaapeli@ee.oulu.fi>
Thu, 15 May 2008 17:10:18 +0000 (20:10 +0300)
membench.c

index 7cad40b1af76c5950155602b4a9d435c1cca74d4..53b967bafea35a15909011d1488556b7860bf613 100644 (file)
@@ -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);