You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
2.8 KiB

import json
# Function to convert time units to seconds
def convert_to_seconds(time_str):
if time_str.endswith('µs'):
return float(time_str[:-2]) * 1e-6
elif time_str.endswith('ms'):
return float(time_str[:-2]) * 1e-3
elif time_str.endswith('s'):
return float(time_str[:-1])
return 0
def report(operation, time):
return f"{operation}: {time:.6f} seconds"
scenarios = {}
free_logs = []
def process_logline(log):
fields = log.get("fields", {})
span = log.get("span", {})
scenario_name = None
time_seconds = convert_to_seconds(fields["time.busy"])
# A folding scheme scenario is one of our ancestors
for s in log.get("spans", []):
if s.get("name") == "scenario":
scenario_name = s.get("folding_scheme")
# Top level span
if not scenario_name:
folding_scheme = span.get("folding_scheme")
if folding_scheme is not None:
free_logs.append(report(f"{folding_scheme} total time", time_seconds))
else:
free_logs.append(report(span["name"], time_seconds))
return
# Within a folding scheme scenario
if scenario_name not in scenarios:
scenarios[scenario_name] = {
"Prepare folding": 0,
"Transform input": 0,
"Folding verification": 0,
"Proving": [],
"Input prep": [],
}
span_name = span.get("name")
if span_name == "Proving":
scenarios[scenario_name]["Proving"].append(time_seconds)
elif span_name == "Input prep":
scenarios[scenario_name]["Input prep"].append(time_seconds)
else:
scenarios[scenario_name][span_name] = time_seconds
def process_logs(file_path):
with open(file_path, 'r') as f:
for line in f:
process_logline(json.loads(line))
def print_results():
for log in free_logs:
print(log)
print()
for scenario_name, data in scenarios.items():
print("-" * 80)
print(f"Scenario: {scenario_name}")
print(report(" Prepare folding", data["Prepare folding"]))
print(report(" Transform input", data["Transform input"]))
print(report(" Folding verification", data["Folding verification"]))
print(f" Folding Steps:")
input_trans = data["Input prep"]
print(" Input preparation")
print(report(" Avg", sum(input_trans) / len(input_trans)))
print(report(" Min", min(input_trans)))
print(report(" Max", max(input_trans)))
proving_steps = data["Proving"]
print(" Proving")
print(report(" Avg", sum(proving_steps) / len(proving_steps)))
print(report(" Min", min(proving_steps)))
print(report(" Max", max(proving_steps)))
process_logs('out.log')
print_results()