From: Michael Vrable Date: Wed, 16 Mar 2011 17:24:19 +0000 (-0700) Subject: Work on the synthetic read benchmark X-Git-Url: http://git.vrable.net/?p=bluesky.git;a=commitdiff_plain;h=b5d09fadd9c9773cdc8dd4f7db734e7ba0eadbf4 Work on the synthetic read benchmark --- diff --git a/nfs3/synreadbench.c b/nfs3/synreadbench.c index c3593d2..f4d5ad2 100644 --- a/nfs3/synreadbench.c +++ b/nfs3/synreadbench.c @@ -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");