Add a mode for warming up the proxy cache before a synthetic benchmark
authorMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 16 Mar 2011 19:31:09 +0000 (12:31 -0700)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 16 Mar 2011 19:31:09 +0000 (12:31 -0700)
nfs3/parse-synread.py
nfs3/synreadbench.c

index be718b8..6c75efb 100755 (executable)
@@ -30,4 +30,4 @@ if __name__ == '__main__':
     duration = float(end - start + 1)
     print duration
     print "Ops per second:", len(truncated) / duration
-    print "Bandwidth:", len(truncated) / duration * 32768
+    print "Bandwidth:", len(truncated) / duration * 1048576
index 762bb64..64bc898 100644 (file)
@@ -37,6 +37,7 @@
 
 FILE *logfile = NULL;
 
+int warmup_mode = 0;
 int threads;
 int completed = 0;
 int read_size = 32768;
@@ -211,10 +212,14 @@ static void process_reply(NFSConnection *nfs, GString *msg)
     }
 
     completed++;
-    /*
-    if (completed == 128 * threads) {
-        g_main_loop_quit(main_loop);
-    } */
+    if (warmup_mode) {
+        printf("Done warming up %d\n", completed);
+        int scale = 1;
+        if (read_size > (1 << 20))
+            scale = read_size / (1 << 20);
+        if (completed == bench_files->len * scale)
+            g_main_loop_quit(main_loop);
+    }
 }
 
 static gboolean read_handler(GIOChannel *channel,
@@ -299,7 +304,25 @@ static void send_read_request(NFSConnection *nfs, uint64_t inum,
                                uint64_t offset, uint64_t len);
 static void submit_random_read(NFSConnection *nfs)
 {
+    static int warmup_counter = 0;
     struct bench_file *bf;
+
+    if (warmup_mode) {
+        int scale = 1;
+        if (read_size > (1 << 20)) {
+            scale = read_size / (1 << 20);
+        }
+        printf("Warming up file %d\n", warmup_counter);
+        if (warmup_counter >= bench_files->len * scale)
+            return;
+        bf = &g_array_index(bench_files, struct bench_file,
+                            warmup_counter / scale);
+        send_read_request(nfs, bf->inum, (warmup_counter % scale) << 20,
+                          read_size > (1 << 20) ? (1 << 20) : read_size);
+        warmup_counter++;
+        return;
+    }
+
     bf = &g_array_index(bench_files, struct bench_file,
                         g_random_int_range(0, bench_files->len));
     int blocks = bf->size / read_size;
@@ -447,8 +470,13 @@ int main(int argc, char *argv[])
         threads = atoi(argv[2]);
     if (argc > 3)
         read_size = atoi(argv[3]);
-    if (argc > 4)
-        logfile = fopen(argv[4], "wb");
+    if (argc > 4) {
+        if (strcmp(argv[4], "WARMUP") == 0) {
+            warmup_mode = 1;
+        } else {
+            logfile = fopen(argv[4], "wb");
+        }
+    }
 
     main_loop = g_main_loop_new(NULL, FALSE);
     nfs_connect("niniel.sysnet.ucsd.edu");