constellation/.github/actions/e2e_benchmark/evaluate/evaluators/fio.py
2023-03-06 08:12:08 +01:00

39 lines
1.2 KiB
Python

"""Parse the fio logs.
Extracts the bandwidth for I/O,
from a fio benchmark json output.
"""
from typing import Dict
import json
def evaluate(log_path) -> Dict[str, Dict[str, float]]:
with open(log_path) as f:
fio = json.load(f)
if not fio:
raise Exception(
f"Error: Empty fio log {log_path}?")
if len(fio) != 1:
raise Exception(
"Error: Unexpected fio log format"
)
tests = fio[0]['Raw']['result']['jobs']
result = {}
for test in tests:
if test['jobname'] == 'read_iops':
result[test['jobname']] = {'iops': float(test['read']['iops'])}
elif test['jobname'] == 'write_iops':
result[test['jobname']] = {'iops': float(test['write']['iops'])}
elif test['jobname'] == 'read_bw':
result[test['jobname']] = {'bw_kbytes': float(test['read']['bw'])}
elif test['jobname'] == 'write_bw':
result[test['jobname']] = {'bw_kbytes': float(test['write']['bw'])}
else:
raise Exception(
f"Error: Unexpected fio test: {test['jobname']}"
)
# Get volume size. Format is 400Gi.
result['volumesize'] = int(fio[0]['Raw']['size'][:-2])
return result