From fe07e800dbdb79a871f7da1cfc185a982183bf65 Mon Sep 17 00:00:00 2001 From: Michael Vrable Date: Wed, 16 Mar 2011 12:31:09 -0700 Subject: [PATCH] Add a mode for warming up the proxy cache before a synthetic benchmark --- nfs3/parse-synread.py | 2 +- nfs3/synreadbench.c | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/nfs3/parse-synread.py b/nfs3/parse-synread.py index be718b8..6c75efb 100755 --- a/nfs3/parse-synread.py +++ b/nfs3/parse-synread.py @@ -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 diff --git a/nfs3/synreadbench.c b/nfs3/synreadbench.c index 762bb64..64bc898 100644 --- a/nfs3/synreadbench.c +++ b/nfs3/synreadbench.c @@ -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"); -- 2.20.1