diff options
-rw-r--r-- | bench/wtperf/track.c | 4 | ||||
-rw-r--r-- | tools/wtperf_graph.py | 38 |
2 files changed, 24 insertions, 18 deletions
diff --git a/bench/wtperf/track.c b/bench/wtperf/track.c index cbcc362c95d..782acb91e1a 100644 --- a/bench/wtperf/track.c +++ b/bench/wtperf/track.c @@ -267,10 +267,8 @@ latency_print_single(CONFIG *cfg, TRACK *total, const char *name) return; } -#ifdef __WRITE_A_HEADER fprintf(fp, - "usecs,operations,cumulative-operations,total-operations\n"); -#endif + "#usecs,operations,cumulative-operations,total-operations\n"); cumops = 0; for (i = 0; i < ELEMENTS(total->us); ++i) { if (total->us[i] == 0) diff --git a/tools/wtperf_graph.py b/tools/wtperf_graph.py index 8bd11433014..389205f3426 100644 --- a/tools/wtperf_graph.py +++ b/tools/wtperf_graph.py @@ -33,11 +33,14 @@ from subprocess import call TIMEFMT = "%b %d %H:%M:%S" -def process_monitor(fname, ckptlist, opdict): +def process_monitor(fname, sfx, ckptlist, opdict): # Read the monitor file and figure out when a checkpoint was running. in_ckpt = 'N' ckptlist=[] + + ofname = 'monitor%s.png' % (sfx) + print "Setting moniot output to: " + ofname # Monitor output format currently is: # time,read,insert,update,ckpt,...latencies... ops = ('read', 'insert', 'update') @@ -45,6 +48,8 @@ def process_monitor(fname, ckptlist, opdict): with open(fname, 'r') as csvfile: reader = csv.reader(csvfile) for row in reader: + if row[0].lstrip().startswith('#'): + continue # Look for checkpoints and operations. if row[4] != in_ckpt: ckptlist.append(row[0]) @@ -77,14 +82,15 @@ set yrange [0:]\n''' % { }) it = iter(ckptlist) for start, stop in zip(it, it): - of.write('set object rectangle from first \'' + start +\ - '\', graph 0 ' + ' to first \'' + stop +\ - '\', graph 1 fc rgb "gray" back\n') - of.write('set output "' + fname + '.png"\n') - of.write('plot "' + fname + '" using 1:($2/1000) title "Reads", "' +\ - fname + '" using 1:($3/1000) title "Inserts", "' +\ - fname + '" using 1:($4/1000) title "Updates", "' +\ - fname + '" using 1:(($2+$3+$4)/1000) title "Total"\n') + of.write("set object rectangle from first '%i',\ + graph 0 to first '%i',\ + graph 1 fc rgb \"gray\" back\n" % (start, stop)) + of.write('set output "%s"\n' % (ofname)) + of.write("""plot "{name}" every ::1 using 1:($2/1000) title "Reads", \\ + "{name}" every ::1 using 1:($3/1000) title "Inserts",\\ + "{name}" every ::1 using 1:($4/1000) title "Updates",\\ + "{name}" every ::1 using 1:(($2+$3+$4)/1000) title "Total" + """.format(name=fname)) of.close() call(["gnuplot", gcmd]) os.remove(gcmd) @@ -118,10 +124,12 @@ set yrange [1:]\n''' % { '\', graph 1 fc rgb "gray" back\n') ofname = name + sfx + '.latency1.png' of.write('set output "' + ofname + '"\n') - of.write('plot "' + fname + '" using 1:($' + repr(col_avg) +\ - ') title "Average Latency", "' + fname +'" using 1:($' +\ + of.write('plot "' +\ + fname + '" every ::1 using 1:($' + repr(col_avg) +\ + ') title "Average Latency", "' + fname +'" every ::1 using 1:($' +\ repr(col_min) + ') title "Minimum Latency", "' +\ - fname + '" using 1:($' + repr(col_max) + ') title "Maximum Latency"\n') + fname + '" every ::1 using 1:($' + repr(col_max) +\ + ') title "Maximum Latency"\n') of.close() call(["gnuplot", gcmd]) os.remove(gcmd) @@ -148,7 +156,7 @@ set yrange [0:]\n''') ofname = name + sfx + '.latency2.png' of.write('set output "' + ofname + '"\n') of.write('plot "' + os.path.join(dirname, 'latency.' + name) + sfx +\ - '" using (($2 * 100)/$4) title "' + name + '"\n') + '" every :: 1 using (($2 * 100)/$4) title "' + name + '"\n') of.close() call(["gnuplot", gcmd]) os.remove(gcmd) @@ -177,7 +185,7 @@ set yrange [0:]\n''' % { ofname = name + sfx + '.latency3.png' of.write('set output "' + ofname + '"\n') of.write('plot "' + os.path.join(dirname, 'latency.' + name) + sfx +\ - '" using 1:(($3 * 100)/$4) title "' + name + '"\n') + '" every ::1 using 1:(($3 * 100)/$4) title "' + name + '"\n') of.close() call(["gnuplot", gcmd]) os.remove(gcmd) @@ -187,13 +195,13 @@ def process_file(fname): # NOTE: The operations below must be in this exact order to match # the operation latency output in the monitor file. opdict={'read':0, 'insert':0, 'update':0} - process_monitor(fname, ckptlist, opdict) # This assumes the monitor file has the string "monitor" # and any other (optional) characters in the filename are a suffix. sfx = os.path.basename(fname).replace('monitor','') dirname = os.path.dirname(fname) + process_monitor(fname, sfx, ckptlist, opdict) column = 6 # average, minimum, maximum start in column 6 for k, v in opdict.items(): if v != 0: |