diff --git a/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/arguments.py b/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/arguments.py index 06a0fdc..f9fc0a8 100644 --- a/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/arguments.py +++ b/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/arguments.py @@ -6,6 +6,10 @@ parser = argparse.ArgumentParser( ) # Positional +parser.add_argument( + "fn", metavar="function", type=str, + help="ftrace function name to filter entries for" +) parser.add_argument( "directory", type=str, help="ftrace-cmd output .dat directory" ) diff --git a/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/core.py b/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/core.py index c57f156..1f4f890 100644 --- a/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/core.py +++ b/src/aarch64-linux-flush-dcache/visualizer/ftrace2pyplot/core.py @@ -1,7 +1,7 @@ from os import path from argparse import Namespace import glob -from typing import List, Tuple, Union +from typing import List, Tuple, Union, Optional import re import trappy @@ -12,7 +12,7 @@ import matplotlib.pyplot as plt from .arguments import parser -def parse_basename_into_byte_count(basename: str) -> int: +def parse_basename_to_kibs(basename: str) -> int: ret: int = -1 regex = re.compile(r"(?P[0-9]+)(?P[kmgKMG])") @@ -31,7 +31,7 @@ def parse_basename_into_byte_count(basename: str) -> int: def clip_to( dataset: Union[pd.Series, pd.DataFrame], percentile: float, - axis: int = None + axis: Optional[int] = None ) -> Union[pd.Series, pd.DataFrame]: assert(0 <= percentile <= 1) if percentile == .0: @@ -47,17 +47,22 @@ def clip_to( return clipped -def parse_function_graph_ftrace(trace_fpath: str): - trace = trappy.FTrace(trace_fpath) +def parse_function_graph_ftrace( + ftrace_dat_path: str, + fn: str +) -> Optional[pd.DataFrame]: + trace = trappy.FTrace(ftrace_dat_path) fngraph_df: pd.DataFrame = trace.funcgraph_exit.data_frame assert fngraph_df is not None - # Sieve `__dcache_clean_poc` entries + # Sieve function entries # Notably, the long ones are mostly preempted by e.g., softirq (rcu, etc.) # I should prob. identify them but whatever # Other long ones that are NOT preempted may be due to QEMU process # scheduling on host, not sure - fngraph_df = fngraph_df.loc[fngraph_df["func"] == "__dcache_clean_poc"] + fngraph_df = fngraph_df.loc[fngraph_df["func"] == fn] + if fngraph_df.shape[0] == 0: + return None # Compute runtime of function fngraph_df.loc[:, "rettime"] = (fngraph_df["rettime"] @@ -83,8 +88,11 @@ def run(args: Namespace): for ftrace_dat_path in ftrace_dat_paths: print("Loading \"{}\"...".format(ftrace_dat_path)) - fngraph_df = parse_function_graph_ftrace(ftrace_dat_path) - size_in_kb = parse_basename_into_byte_count( + fngraph_df = parse_function_graph_ftrace(ftrace_dat_path, args.fn) + 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)) diff --git a/src/aarch64-linux-flush-dcache/visualizer/out-95p-new.pdf b/src/aarch64-linux-flush-dcache/visualizer/out-95p-new.pdf new file mode 100644 index 0000000..30fe416 Binary files /dev/null and b/src/aarch64-linux-flush-dcache/visualizer/out-95p-new.pdf differ diff --git a/src/aarch64-linux-flush-dcache/visualizer/out-log-new.pdf b/src/aarch64-linux-flush-dcache/visualizer/out-log-new.pdf new file mode 100644 index 0000000..6d408b8 Binary files /dev/null and b/src/aarch64-linux-flush-dcache/visualizer/out-log-new.pdf differ diff --git a/src/aarch64-linux-flush-dcache/visualizer/out.pdf b/src/aarch64-linux-flush-dcache/visualizer/out.pdf index 5580c5b..fc14f48 100644 Binary files a/src/aarch64-linux-flush-dcache/visualizer/out.pdf and b/src/aarch64-linux-flush-dcache/visualizer/out.pdf differ diff --git a/src/aarch64-linux-flush-dcache/visualizer/tlb-95p.pdf b/src/aarch64-linux-flush-dcache/visualizer/tlb-95p.pdf new file mode 100644 index 0000000..8fdc6e5 Binary files /dev/null and b/src/aarch64-linux-flush-dcache/visualizer/tlb-95p.pdf differ diff --git a/src/aarch64-linux-flush-dcache/visualizer/tlb-log.pdf b/src/aarch64-linux-flush-dcache/visualizer/tlb-log.pdf new file mode 100644 index 0000000..91055e5 Binary files /dev/null and b/src/aarch64-linux-flush-dcache/visualizer/tlb-log.pdf differ