Memeasy benchmark.
authorGerd Zellweger <mail@gerdzellweger.com>
Thu, 3 Apr 2014 13:56:39 +0000 (15:56 +0200)
committerGerd Zellweger <mail@gerdzellweger.com>
Tue, 14 Oct 2014 06:51:23 +0000 (08:51 +0200)
usr/bench/mem_bench/memeasy.c

index ae14f07..eb711ff 100644 (file)
 #include <assert.h>
 
 #include <barrelfish/barrelfish.h>
+#include <barrelfish/deferred.h>
 #include <bench/bench.h>
 
 #define MAX_ITERATION 1000
 
+static void set_true(void* arg) {
+    *(bool*)arg = true;
+}
+
+static void sleep_until(delayus_t delay) {
+    struct deferred_event de;
+    deferred_event_init(&de);
+
+    bool can_continue = false;
+
+    struct event_closure ec;
+    ec.handler = set_true;
+    ec.arg = &can_continue;
+
+    errval_t err = deferred_event_register(&de, get_default_waitset(),
+                                           delay, ec);
+    if (err_is_fail(err)) {
+        USER_PANIC_ERR(err, "deferred event register failed.");
+    }
+
+    //printf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__);
+    while(!can_continue) {
+        messages_wait_and_handle_next();
+    }
+    //printf("%s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__);
+}
+
 int main(int argc, char** argv)
 {
-    static uint64_t sleep = 0;
-    static uint64_t ram_bits = 0;
+    uint64_t sleep = 0;
+    uint64_t ram_bits = 20;
+    printf("%s:%s:%d: argc = %d\n", __FILE__, __FUNCTION__, __LINE__, argc);
     if (argc > 3) {
-        printf("%s:%s:%d: Usage: %s <sleep ms> <ram bits>\n",
+        printf("%s:%s:%d: Usage: %s <ram bits> <sleep ms>\n",
                __FILE__, __FUNCTION__, __LINE__, argv[0]);
+    } else if (argc == 3) {
+        sleep = atoll(argv[2]);
+        ram_bits = atoll(argv[1]);
+    } else if (argc == 2) {
+        ram_bits = atoll(argv[1]);
     }
-    else if (argc == 3) {
-        sleep = atoll(argv[1]);
-        ram_bits = atoll(argv[2]);
-    }
-    printf("%s:%s:%d: Sleeping for %"PRIu64" ms inbetween.\n",
-            __FILE__, __FUNCTION__, __LINE__, sleep);
+    printf("%s:%s:%d: Use ram_bits = %"PRIu64"\n",
+       __FILE__, __FUNCTION__, __LINE__, ram_bits);
+    printf("%s:%s:%d: Use sleep = %"PRIu64"\n",
+        __FILE__, __FUNCTION__, __LINE__, sleep);
 
     bench_init();
     cycles_t runs[MAX_ITERATION];
@@ -43,7 +75,7 @@ int main(int argc, char** argv)
     uint64_t start, end;
 
     struct capref ram;
-    err = ram_alloc(&ram, 1 << ram_bits);
+    err = ram_alloc(&ram, ram_bits);
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "ram_alloc failed.");
     }
@@ -55,8 +87,11 @@ int main(int argc, char** argv)
     }
 
     for (size_t i=0; i<MAX_ITERATION; i++) {
+        //printf("%s:%s:%d: i=%"PRIu64"\n",
+        //       __FILE__, __FUNCTION__, __LINE__, i);
         start = bench_tsc();
-        err = cap_retype(ram, frame, ObjType_Frame, 1 << ram_bits);
+        //printf("%s:%s:%d: \n", __FILE__, __FUNCTION__, __LINE__);
+        err = cap_retype(frame, ram, ObjType_Frame, ram_bits);
         if (err_is_fail(err)) {
             USER_PANIC_ERR(err, "cap_retype failed.");
         }
@@ -67,13 +102,19 @@ int main(int argc, char** argv)
         }
         end = bench_tsc();
 
+        if (sleep > 0) {
+            sleep_until(sleep);
+        }
+
         runs[i] = end - start;
     }
 
-    printf("Average cycles %"PRIuCYCLES", Variance %"PRIuCYCLES"\n",
+    printf("Average cycles %"PRIuCYCLES", Variance %"PRIuCYCLES"\n \
+           Average ms %"PRIu64" Variance ms %"PRIu64"\n",
             bench_avg(runs, MAX_ITERATION),
-            bench_variance(runs, MAX_ITERATION));
-
+            bench_variance(runs, MAX_ITERATION),
+            bench_tsc_to_ms(bench_avg(runs, MAX_ITERATION)),
+            bench_tsc_to_ms(bench_variance(runs, MAX_ITERATION)));
 
     return 0;
 }