89 lines
3.2 KiB
Python
89 lines
3.2 KiB
Python
import json
|
|
import matplotlib.pyplot as plt
|
|
|
|
# Function to load JSON data from a file
|
|
def load_json_data(filepath):
|
|
with open(filepath, 'r') as file:
|
|
data = json.load(file)
|
|
return data
|
|
|
|
# Function to plot two arrays of subarrays with tuples (step_name, duration)
|
|
def plot_two_arrays_of_subarrays(arrays1, arrays2):
|
|
# Function to calculate sum of durations for each step
|
|
def calculate_sums(arrays):
|
|
steps = [step for step, _ in arrays[0]['timings']] # Extract steps from the first iteration
|
|
sums = {step: 0.0 for step in steps} # Initialize sums dictionary with step names
|
|
|
|
# Sum up the durations for each step across all subarrays
|
|
for subarray in arrays:
|
|
for step_name, duration in subarray['timings']:
|
|
if step_name not in sums:
|
|
sums[step_name] = 0
|
|
sums[step_name] += duration
|
|
|
|
for step_name, duration in sums.items():
|
|
sums[step_name] = duration / 1000000000
|
|
|
|
# Convert the sums dictionary to two lists (for plotting)
|
|
step_names = list(sums.keys())
|
|
durations = list(sums.values())
|
|
return step_names, durations
|
|
|
|
# Calculate sums for both arrays of subarrays
|
|
step_names1, sums1 = calculate_sums(arrays1)
|
|
step_names2, sums2 = calculate_sums(arrays2)
|
|
|
|
# Create two subplots, one on top of the other
|
|
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 12))
|
|
|
|
# First plot (top) for the first array of subarrays
|
|
ax1.bar(step_names1, sums1, color='b')
|
|
ax1.set_title('Total Duration per Step - Main Loop')
|
|
ax1.set_xlabel('Step Name')
|
|
ax1.set_ylabel('Total Duration (s)')
|
|
ax1.grid(True, axis='y')
|
|
ax1.tick_params(axis='x', rotation=45)
|
|
|
|
# Second plot (bottom) for the second array of subarrays
|
|
ax2.bar(step_names2, sums2, color='r')
|
|
ax2.set_title('Total Duration per Step - Result Processor')
|
|
ax2.set_xlabel('Step Name')
|
|
ax2.set_ylabel('Total Duration (s)')
|
|
ax2.grid(True, axis='y')
|
|
ax2.tick_params(axis='x', rotation=45)
|
|
|
|
# Adjust layout so the plots don't overlap
|
|
plt.tight_layout()
|
|
|
|
# Display the plot
|
|
plt.show()
|
|
|
|
# Load arrays from the JSON files
|
|
main = load_json_data('/tmp/windmill/profiling_main.json')
|
|
result_processor = load_json_data('/tmp/windmill/profiling_result_processor.json')
|
|
|
|
arrays1 = main['timings']
|
|
arrays2 = result_processor['timings']
|
|
|
|
total_duration1 = main['total_duration']/1000
|
|
total_duration2 = result_processor['total_duration']/1000
|
|
|
|
print(f"Total duration for main: {total_duration1}s")
|
|
print(f"Total duration for result processor: {total_duration2}s")
|
|
|
|
iterations_total = sum(main['iter_durations']) / 1000000000
|
|
iterations_total2 = sum(result_processor['iter_durations']) / 1000000000
|
|
|
|
print(f"Number of iterations: {len(main['iter_durations'])}")
|
|
print(f"Total iterations for main: {iterations_total}s")
|
|
print(f"Total iterations for result processor: {iterations_total2}s")
|
|
|
|
# Calculate RPS
|
|
rps1 = len(main['iter_durations']) / total_duration1
|
|
rps2 = len(result_processor['iter_durations']) / total_duration2
|
|
|
|
print(f"RPS for main: {rps1}")
|
|
print(f"RPS for result processor: {rps2}")
|
|
|
|
# Plot the data
|
|
plot_two_arrays_of_subarrays(arrays1, arrays2) |