summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/Makefile6
-rwxr-xr-xtest/scripts/perf-test.sh71
-rw-r--r--test/scripts/testutils.sh2
-rwxr-xr-xtools/parsebench.py19
4 files changed, 90 insertions, 8 deletions
diff --git a/test/Makefile b/test/Makefile
index bd58cfe..c92c30d 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -18,3 +18,9 @@ tests:
rm -r $(INSTDIR)/tests || true
mkdir $(INSTDIR)/tests
(cd $(INSTDIR)/tests && ../../test/scripts/light-system-test.sh)
+
+perf-tests:
+ @make tests-makemk
+ rm -r $(INSTDIR)/tests || true
+ mkdir $(INSTDIR)/tests
+ (cd $(INSTDIR)/tests && ../../test/scripts/perf-test.sh)
diff --git a/test/scripts/perf-test.sh b/test/scripts/perf-test.sh
new file mode 100755
index 0000000..aaf3b1d
--- /dev/null
+++ b/test/scripts/perf-test.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+set -o nounset
+set -o errexit
+
+top_srcdir=$(cd $(dirname $0)/../..; pwd)
+
+. ${top_srcdir}/test/scripts/testutils.sh
+
+SCRIPTS=${top_srcdir}/test/scripts
+
+tests_start() {
+ ${SCRIPTS}/light-system-test-start.sh
+}
+
+tests_stop() {
+ ${SCRIPTS}/light-system-test-stop.sh
+}
+
+${SCRIPTS}/light-system-test-prepare.sh
+
+cp ${top_srcdir}/test/known_roots/* known_roots
+
+tests_start
+
+do_merge
+check_sth
+
+assert_equal "Tree size" "$(get_treesize)" 0
+
+python ${top_srcdir}/tools/submitcert.py --parallel=1 --store ${top_srcdir}/test/bulktestcerts/0000.zip --sct-file=submittedcerts ${BASEURL} --publickey=keys/logkey.pem --cafile httpsca/demoCA/cacert.pem || (tests_stop ; fail "Submission failed")
+
+
+do_merge 2> bench-1 || (tests_stop ; fail "Merge failed")
+check_sth || (tests_stop ; fail "Check STH failed")
+
+sleep 5
+tests_stop
+sleep 5
+
+mv mergedb mergedb-down
+mv mergedb-secondary mergedb
+mkdir mergedb-secondary
+touch mergedb-secondary/logorder
+printf 0 > mergedb-secondary/verifiedsize
+
+tests_start
+
+do_merge 2> bench-2 || (tests_stop ; fail "Merge failed")
+check_sth || (tests_stop ; fail "Check STH failed")
+
+sleep 5
+tests_stop
+sleep 5
+
+mv machine/machine-1 machine/machine-1-down
+mkdir -p machine/machine-1/db
+touch machine/machine-1/db/index
+touch machine/machine-1/db/newentries
+
+tests_start
+
+do_merge 2> bench-3 || (tests_stop ; fail "Merge failed")
+check_sth || (tests_stop ; fail "Check STH failed")
+
+sleep 5
+tests_stop
+sleep 5
+
+grep timing: bench-[123] > bench.txt
+${top_srcdir}/tools/parsebench.py bench.txt > bench.html
diff --git a/test/scripts/testutils.sh b/test/scripts/testutils.sh
index 94d6223..e779e07 100644
--- a/test/scripts/testutils.sh
+++ b/test/scripts/testutils.sh
@@ -18,5 +18,5 @@ check_sth() {
}
do_merge() {
- ${top_srcdir}/tools/merge --config ${top_srcdir}/test/catlfish-test.cfg --localconfig ${top_srcdir}/test/catlfish-test-local-merge.cfg || fail "Merge failed"
+ ${top_srcdir}/tools/merge --config ${top_srcdir}/test/catlfish-test.cfg --timing --localconfig ${top_srcdir}/test/catlfish-test-local-merge.cfg || fail "Merge failed"
}
diff --git a/tools/parsebench.py b/tools/parsebench.py
index 96c36d6..671e482 100755
--- a/tools/parsebench.py
+++ b/tools/parsebench.py
@@ -10,8 +10,8 @@ import itertools
def parse_one_line(line):
row = line.rstrip().split(":")
- assert row[0].startswith("mergeoutput.")
- iteration = int(row[0][12:])
+ assert row[0].startswith("bench-")
+ iteration = int(row[0][6:])
stage = row[2].strip()
data = ast.literal_eval(row[3].strip())
return (iteration, stage, data)
@@ -30,29 +30,34 @@ def main():
print "</body>"
print "</html>"
+scale = 0.25
+
def parse_one_file(filename):
lines = [parse_one_line(line) for line in open(filename)]
iterations = itertools.groupby(lines, lambda x: x[0])
print "<h1>%s</h1>" % (filename,)
print "<div>"
legend = []
+ firsttime = True
for (i, iteration) in iterations:
- print "<table><tr>"
+ print >>sys.stderr, (i, iteration)
+ print "<table style='border-collapse: collapse;'><tr>"
for (stagen, (_, stage, data)) in enumerate(iteration):
- if i == 0:
+ if firsttime:
legend.append("<div><span>%s</span>" % (stage,))
data = list(data)
for (itemn, (item, useconds)) in enumerate(data):
seconds = useconds / 1000000
step = 50 / (len(data) - 1)
- print "<td style='width: %dpx; padding: 0; background-color: hsl(%d, 90%%, %d%%);' title='%s:%s %d'>" % (seconds/4, stagen * 90, itemn * step + 40, stage, item, seconds)
- if i == 0:
+ print "<td style='width: %dpx; padding: 0; background-color: hsl(%d, 90%%, %d%%);' title='%s:%s %d'>" % (int(seconds*scale), stagen * 90, itemn * step + 40, stage, item, seconds)
+ if firsttime:
legend.append("<span style='background-color: hsl(%d, 90%%, %d%%);'>%s</span>" % (stagen * 90, itemn * step + 40, item))
print "&nbsp;"
print "</td>"
- if i == 0:
+ if firsttime:
legend.append("</div>")
print "</tr></table>"
+ firsttime = False
print "</div>"
print "<div style='height: 30px;'>"
print "</div>"