Work on the synthetic read benchmark
authorMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 16 Mar 2011 17:24:19 +0000 (10:24 -0700)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 16 Mar 2011 17:24:19 +0000 (10:24 -0700)
nfs3/synreadbench.c

index c3593d2..f4d5ad2 100644 (file)
@@ -37,6 +37,7 @@
 
 int threads;
 int completed = 0;
+int read_size = 32768;
 
 struct bench_file {
     uint64_t inum;
@@ -281,16 +282,25 @@ static gboolean read_handler(GIOChannel *channel,
 
 static void send_read_request(NFSConnection *nfs, uint64_t inum,
                                uint64_t offset, uint64_t len);
+static void submit_random_read(NFSConnection *nfs)
+{
+    struct bench_file *bf;
+    bf = &g_array_index(bench_files, struct bench_file,
+                        g_random_int_range(0, bench_files->len));
+    int blocks = bf->size / read_size;
+    if (blocks == 0)
+        blocks = 1;
+
+    int offset = g_random_int_range(0, blocks);
+    send_read_request(nfs, bf->inum, offset * read_size, read_size);
+}
 
 static void finish_read_request(NFSConnection *nfs, gpointer user_data,
                                 const char *reply, size_t len)
 {
     printf("Done reading inode %d\n", GPOINTER_TO_INT(user_data));
 
-    struct bench_file *bf;
-    bf = &g_array_index(bench_files, struct bench_file,
-                        g_random_int_range(0, bench_files->len));
-    send_read_request(nfs, bf->inum, 0, 1048576);
+    submit_random_read(nfs);
 }
 
 static void send_read_request(NFSConnection *nfs, uint64_t inum,
@@ -323,10 +333,7 @@ static gboolean idle_handler(gpointer data)
     int i;
 
     for (i = 0; i < threads; i++) {
-        struct bench_file *bf;
-        bf = &g_array_index(bench_files, struct bench_file,
-                            g_random_int_range(0, bench_files->len));
-        send_read_request(nfs, bf->inum, 0, 1048576);
+        submit_random_read(nfs);
     }
 
 #if 0
@@ -424,6 +431,8 @@ int main(int argc, char *argv[])
     threads = 8;
     if (argc > 2)
         threads = atoi(argv[2]);
+    if (argc > 3)
+        read_size = atoi(argv[3]);
 
     main_loop = g_main_loop_new(NULL, FALSE);
     nfs_connect("niniel.sysnet.ucsd.edu");