Expanded visualizer; filled table in report

This commit is contained in:
Zhengyi Chen 2024-03-24 04:31:16 +00:00
parent 8e4c770ff6
commit 0c2c3a045a
5 changed files with 99 additions and 8 deletions

View file

@ -32,4 +32,15 @@ parser.add_argument(
parser.add_argument(
"-i", "--interactive", type=bool, help="show pyplot when finished drawing",
default=True
)
# Customizability
parser.add_argument(
"--x-label", type=str, help="X axis label", default="Runtime (μs)"
)
parser.add_argument(
"--y-label", type=str, help="Y axis label", default="Write amount (KiB)"
)
parser.add_argument(
"--gen-title", type=bool, help="Generate title (legacy)", default=True
)

View file

@ -3,6 +3,7 @@ from argparse import Namespace
import glob
from typing import List, Tuple, Union, Optional
import re
import sys # stderr
import trappy
import pandas as pd
@ -92,9 +93,17 @@ def run(args: Namespace):
if fngraph_df is None:
print("No entry -- pass")
continue
size_in_kb = parse_basename_to_kibs(
str(path.basename(ftrace_dat_path).split(".")[:-1]))
ftrace_dfs.append((size_in_kb, fngraph_df))
try:
label = parse_basename_to_kibs(
path.basename(ftrace_dat_path).split(".")[:-1])
except Exception:
label = str(path.basename(ftrace_dat_path))
print(
f"Cannot parse size in basename '{label}', using basename...",
file=sys.stderr
)
ftrace_dfs.append((label, fngraph_df))
ftrace_dfs.sort(key=lambda tp: tp[0])
@ -109,16 +118,27 @@ def run(args: Namespace):
plot_df = pd.concat(series, axis=1, keys=indices) # In long-form
print("Plot shape: {}; head: \n{}"
.format(plot_df.shape, plot_df.head()))
print("Quantiles | 25p: \n{} | 50p: \n{} | 75p: \n{} | 99p: \n{}".format(
plot_df.quantile(.25, interpolation="nearest"),
plot_df.quantile(.50, interpolation="nearest"),
plot_df.quantile(.75, interpolation="nearest"),
plot_df.quantile(.99, interpolation="nearest"),
))
# plot violin plot
fig, ax = plt.subplots(figsize=(12, 8))
sns.violinplot(
data=plot_df, orient="h", fill=False, log_scale=args.use_log_scale,
inner="quart")
ax.set_xlabel("Runtime (μs)")
ax.set_ylabel("Write amount (KiB)")
ax.set_title("Percentile: {}{}"
.format(args.percentile, ", log scale" if args.use_log_scale else ""))
ax.set_xlabel(args.x_label)
ax.set_ylabel(args.y_label)
if args.gen_title:
ax.set_title("Percentile: {}{}"
.format(
args.percentile,
", log scale" if args.use_log_scale else ""
)
)
fig.savefig(args.output)
if args.interactive: