--- /dev/null
+#!/usr/bin/python
+
+import struct, sys
+
+DATAPOINT = '<II'
+
+def load_log(f):
+ data = []
+ size = struct.calcsize(DATAPOINT)
+ d = f.read(size)
+ while len(d) == size:
+ i = struct.unpack(DATAPOINT, d)
+ data.append(i)
+ d = f.read(size)
+ return data
+
+if __name__ == '__main__':
+ data = []
+ for f in sys.argv[1:]:
+ data += load_log(open(f))
+ data.sort()
+
+ duration = data[-1][0] - data[0][0]
+ print "Time span: %d to %d (%d seconds)" % (data[0][0], data[-1][0], duration)
+
+ start = data[0][0] + 5
+ end = data[-1][0] - 5
+ truncated = [d for d in data if start <= d[0] <= end]
+ print len(data), len(truncated)
+ duration = float(end - start + 1)
+ print duration
+ print "Ops per second:", len(truncated) / duration
+ print "Bandwidth:", len(truncated) / duration * 32768
/* Maximum size of a single RPC message that we will accept (8 MB). */
#define MAX_RPC_MSGSIZE (8 << 20)
+FILE *logfile = NULL;
+
int threads;
int completed = 0;
int read_size = 32768;
uint64_t size;
};
+struct data_point {
+ uint32_t timestamp; // Unix timestamp of completion
+ uint32_t latency; // Latency, in microseconds
+} __attribute__((packed));
+
GArray *bench_files;
struct rpc_reply {
return;
}
+ struct data_point d;
info->end = now_hires();
- printf("XID %d: Time = %"PRIi64"\n", xid, info->end - info->start);
+ d.timestamp = info->end / 1000000000;
+ d.latency = (info->end - info->start + 500) / 1000; /* Round off */
+ //printf("XID %d: Time = %"PRIi64"\n", xid, info->end - info->start);
if (info->callback != NULL)
info->callback(nfs, info->user_data,
msg->str + sizeof(*reply), msg->len - sizeof(*reply));
g_hash_table_remove(nfs->xid_table, key);
g_free(info);
+ if (logfile != NULL) {
+ fwrite(&d, sizeof(d), 1, logfile);
+ fflush(logfile);
+ }
completed++;
+ /*
if (completed == 128 * threads) {
g_main_loop_quit(main_loop);
- }
+ } */
}
static gboolean read_handler(GIOChannel *channel,
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));
-
submit_random_read(nfs);
}
bf.size = i2;
g_array_append_val(bench_files, bf);
}
+ fclose(inodes);
threads = 8;
if (argc > 2)
threads = atoi(argv[2]);
if (argc > 3)
read_size = atoi(argv[3]);
+ if (argc > 4)
+ logfile = fopen(argv[4], "wb");
main_loop = g_main_loop_new(NULL, FALSE);
nfs_connect("niniel.sysnet.ucsd.edu");