on master help sign in
Add benchmark running script
commit7c5a009f7387bfb1e347faaba3087900232f87e5 authorBryan O'Sullivan <bos@mailrank.com> dateWed 11 May 2011, 10:35 (15 years ago) parent4df5ade
1 file changed+51
benchmarks/bench-parse.py+51
benchmarks/bench-parse.pynew file+51
@@ -0,0 +1,51 @@
1+#!/usr/bin/env python
2+
3+import os, re, subprocess, sys
4+
5+result_re = re.compile(r'^\s*(\d+) good, (\d+\.\d+)s$', re.M)
6+
7+def run(count, filename):
8+ print ' %s :: %s times' % (filename, count)
9+ p = subprocess.Popen(['./AesonParse', str(count), filename],
10+ stdout=subprocess.PIPE)
11+ output = p.stdout.read()
12+ p.wait()
13+ m = result_re.search(output)
14+ if not m:
15+ print >> sys.stderr, 'run gave confusing output!?'
16+ sys.stderr.write(output)
17+ return
18+ else:
19+ #sys.stdout.write(output)
20+ pass
21+ good, elapsed = m.groups()
22+ good, elapsed = int(good), float(elapsed)
23+ st = os.stat(filename)
24+ parses_per_second = good / elapsed
25+ mb_per_second = st.st_size * parses_per_second / 1048576
26+ print (' %.3f seconds, %d parses/sec, %.3f MB/sec' %
27+ (elapsed, parses_per_second, mb_per_second))
28+ return parses_per_second, mb_per_second, st.st_size, elapsed
29+
30+def runtimes(count, filename, times=1):
31+ for i in xrange(times):
32+ yield run(count, filename)
33+
34+info = '''
35+json-data/twitter1.json 60000
36+json-data/twitter10.json 13000
37+json-data/twitter20.json 7500
38+json-data/twitter50.json 2500
39+json-data/twitter100.json 1000
40+json-data/jp10.json 4000
41+json-data/jp20.json 3000
42+json-data/jp50.json 1200
43+json-data/jp100.json 700
44+'''
45+
46+for i in info.strip().splitlines():
47+ name, count = i.split()
48+ best = sorted(runtimes(int(count), name, times=3), reverse=True)[0]
49+ parses_per_second, mb_per_second, size, elapsed = best
50+ print ('%.1f KB: %d msg\\/sec (%.1f MB\\/sec)' %
51+ (size / 1024.0, int(round(parses_per_second)), mb_per_second))