|
Packit |
9a2dfb |
#!/usr/bin/env python
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
import os, re, subprocess, sys
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
result_re = re.compile(r'^\s*(\d+) good, (\d+\.\d+)s$', re.M)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
if len(sys.argv) > 1:
|
|
Packit |
9a2dfb |
parser_exe = sys.argv[1]
|
|
Packit |
9a2dfb |
else:
|
|
Packit |
9a2dfb |
parser_exe = ('dist/build/aeson-benchmark-aeson-parse/' +
|
|
Packit |
9a2dfb |
'aeson-benchmark-aeson-parse')
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
def run(count, filename):
|
|
Packit |
9a2dfb |
print ' %s :: %s times' % (filename, count)
|
|
Packit |
9a2dfb |
p = subprocess.Popen([parser_exe, '65536', str(count), filename],
|
|
Packit |
9a2dfb |
stdout=subprocess.PIPE)
|
|
Packit |
9a2dfb |
output = p.stdout.read()
|
|
Packit |
9a2dfb |
p.wait()
|
|
Packit |
9a2dfb |
m = result_re.search(output)
|
|
Packit |
9a2dfb |
if not m:
|
|
Packit |
9a2dfb |
print >> sys.stderr, 'run gave confusing output!?'
|
|
Packit |
9a2dfb |
sys.stderr.write(output)
|
|
Packit |
9a2dfb |
return
|
|
Packit |
9a2dfb |
else:
|
|
Packit |
9a2dfb |
#sys.stdout.write(output)
|
|
Packit |
9a2dfb |
pass
|
|
Packit |
9a2dfb |
good, elapsed = m.groups()
|
|
Packit |
9a2dfb |
good, elapsed = int(good), float(elapsed)
|
|
Packit |
9a2dfb |
st = os.stat(filename)
|
|
Packit |
9a2dfb |
parses_per_second = good / elapsed
|
|
Packit |
9a2dfb |
mb_per_second = st.st_size * parses_per_second / 1048576
|
|
Packit |
9a2dfb |
print (' %.3f seconds, %d parses/sec, %.3f MB/sec' %
|
|
Packit |
9a2dfb |
(elapsed, parses_per_second, mb_per_second))
|
|
Packit |
9a2dfb |
return parses_per_second, mb_per_second, st.st_size, elapsed
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
def runtimes(count, filename, times=1):
|
|
Packit |
9a2dfb |
for i in xrange(times):
|
|
Packit |
9a2dfb |
yield run(count, filename)
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
info = '''
|
|
Packit |
9a2dfb |
json-data/twitter1.json 60000
|
|
Packit |
9a2dfb |
json-data/twitter10.json 13000
|
|
Packit |
9a2dfb |
json-data/twitter20.json 7500
|
|
Packit |
9a2dfb |
json-data/twitter50.json 2500
|
|
Packit |
9a2dfb |
json-data/twitter100.json 1000
|
|
Packit |
9a2dfb |
json-data/jp10.json 4000
|
|
Packit |
9a2dfb |
json-data/jp50.json 1200
|
|
Packit |
9a2dfb |
json-data/jp100.json 700
|
|
Packit |
9a2dfb |
'''
|
|
Packit |
9a2dfb |
|
|
Packit |
9a2dfb |
for i in info.strip().splitlines():
|
|
Packit |
9a2dfb |
name, count = i.split()
|
|
Packit |
9a2dfb |
best = sorted(runtimes(int(count), name, times=3), reverse=True)[0]
|
|
Packit |
9a2dfb |
parses_per_second, mb_per_second, size, elapsed = best
|
|
Packit |
9a2dfb |
print ('%.1f KB: %d msg\\/sec (%.1f MB\\/sec)' %
|
|
Packit |
9a2dfb |
(size / 1024.0, int(round(parses_per_second)), mb_per_second))
|