summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bench/wtperf/track.c4
-rw-r--r--tools/wtperf_graph.py38
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: