Commit a6cfd4df authored by Hejing Li's avatar Hejing Li
Browse files

paper data: utils iperf.py

parent 8b1c4976
import glob
import json
import os
import fnmatch
import re
import itertools
import sys
def parse_iperf_run(data, skip=1, use=8):
tp_pat = re.compile(r'\[ *\d*\] *([0-9\.]*)- *([0-9\.]*) sec.*Bytes *([0-9\.]*) ([GM])bits.*')
tps_time = {}
for hn in fnmatch.filter(data['sims'].keys(), 'host.client.*'):
sim = data['sims'][hn]
for l in sim['stdout']:
m = tp_pat.match(l)
if not m:
continue
time = int(float(m.group(1)))
if time < skip:
continue
if time >= skip + use:
continue
if not time in tps_time:
tps_time[time] = []
if m.group(4) == 'G':
tps_time[time].append(float(m.group(3)))
elif m.group(4) == 'M':
m_tps = float(m.group(3))/1000
tps_time[time].append(m_tps)
tps = []
for t in sorted(tps_time.keys()):
x = sum(tps_time[t])
tps.append(x)
if len(tps) == 0:
return None
return sum(tps) / len(tps)
def parse_iperf(basename, skip=1, use=8):
runs = []
for path in glob.glob(basename + '-*.json'):
if path == basename + '-0.json':
# skip checkpoints
continue
with open(path, 'r') as f:
data = json.load(f)
result = parse_iperf_run(data, skip, use)
if result is not None:
runs.append(result)
if not runs:
return {'avg': None, 'min': None, 'max': None}
else:
return {'avg': sum(runs) / len(runs), 'min': min(runs),
'max': max(runs)}
result = {}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment