# louwrentius/fio-plot architecture

> Architecture diagram of the GitHub repository louwrentius/fio-plot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/louwrentius/fio-plot
- Repository: https://github.com/louwrentius/fio-plot

## Overview

This repository combines two storage-benchmark tools: bench-fio runs configurable FIO workloads and saves results, while fio-plot imports FIO JSON or log data and renders charts. The benchmark workflow covers configuration, validation, workload generation, and execution; the plotting workflow covers configuration, data import, chart-specific processing, and rendering. The README documents 2D, comparison, 3D, log-line, and latency-histogram charts. Some plotting dispatch details are unsampled, so those links are left unasserted or marked unverified.

Main entry points: [`bench_fio/__init__.py`](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/__init__.py) (Bench-fio CLI), [`fio_plot/__init__.py`](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/__init__.py) (Fio-plot CLI), [`bench_fio/benchlib/runfio.py`](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/runfio.py) (Benchmark runner), [`fio_plot/fiolib/supporting.py`](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/supporting.py) (Plot utilities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bench["Benchmark runner"]
  node_benchmark_cli["Bench-fio CLI<br/>[__init__.py]"]
  node_bench_options["Arguments and defaults<br/>[argparsing.py]"]
  node_bench_ini["INI settings<br/>[parseini.py]"]
  node_bench_checks["Target validation<br/>[checks.py]"]
  node_bench_network["Remote checks<br/>[network.py]"]
  node_bench_tests["Workload selection<br/>[supporting.py]"]
  node_bench_display["Run summary<br/>[display.py]"]
  node_bench_runner["Benchmark runner<br/>[runfio.py]"]
  node_bench_jobs["FIO job generation<br/>[generatefio.py]"]
  node_bench_defaults["Benchmark defaults<br/>[defaultsettings.py]"]
end

subgraph group_plot_config["Plot configuration"]
  node_plot_cli["Fio-plot CLI<br/>[__init__.py]"]
  node_plot_options["Arguments and defaults<br/>[argparsing.py]"]
  node_plot_ini["INI settings<br/>[iniparsing.py]"]
  node_plot_checks["Preflight checks<br/>[flightchecks.py]"]
end

subgraph group_plot_data["Plot data"]
  node_plot_routing["Chart data routing<br/>[getdata.py]"]
  node_json_import["JSON import<br/>[jsonimport.py]"]
  node_json_parse["JSON parsing<br/>[jsonparsing.py]"]
  node_log_import["Log import<br/>[dataimport.py]"]
  node_chart_support["Chart data support<br/>[shared_chart.py]"]
  node_plot_support["Plot utilities<br/>[supporting.py]"]
end

subgraph group_plot_charts["Chart rendering"]
  node_chart_2d["2D charts<br/>[graph2d.py]"]
  node_chart_bars["2D bar charts<br/>[bar2d.py]"]
  node_chart_3d["3D charts<br/>[bar3d.py]"]
  node_chart_hist["Latency histogram<br/>[barhistogram.py]"]
  node_chart_lines["Log line charts"]
  node_tables["Chart tables<br/>[tables.py]"]
  node_table_support["Table support<br/>[table_support.py]"]
end

node_user(("Operator"))
node_fio["FIO engine"]

node_user -->|"configures and runs"| node_benchmark_cli
node_benchmark_cli -->|"parses options"| node_bench_options
node_benchmark_cli -->|"loads INI"| node_bench_ini
node_benchmark_cli -->|"validates settings"| node_bench_checks
node_bench_checks -->|"checks FIO version"| node_bench_runner
node_benchmark_cli -->|"checks remote"| node_bench_network
node_benchmark_cli -->|"builds test list"| node_bench_tests
node_benchmark_cli -->|"prints summary"| node_bench_display
node_benchmark_cli -->|"runs benchmarks"| node_bench_runner
node_bench_runner -->|"generates job file"| node_bench_jobs
node_bench_jobs -->|"uses setting map"| node_bench_defaults
node_bench_runner -->|"executes workload"| node_fio
node_fio -.->|"produces results"| node_user
node_user -->|"requests charts"| node_plot_cli
node_plot_cli -->|"parses arguments"| node_plot_options
node_plot_cli -->|"loads INI"| node_plot_ini
node_plot_cli -->|"runs checks"| node_plot_checks
node_plot_cli -->|"selects chart data"| node_plot_routing
node_plot_routing -.->|"dispatches JSON"| node_json_import
node_plot_routing -.->|"dispatches logs"| node_log_import
node_chart_2d -->|"imports log data"| node_log_import
node_chart_2d -->|"uses line support"| node_chart_lines
node_chart_lines -->|"uses JSON import"| node_json_import
node_chart_lines -->|"uses JSON parsing"| node_json_parse
node_json_parse -->|"uses helpers"| node_plot_support
node_chart_2d -->|"uses utilities"| node_plot_support
node_chart_bars -->|"uses chart data"| node_chart_support
node_chart_bars -->|"renders tables"| node_tables
node_chart_bars -->|"uses table helpers"| node_table_support
node_tables -->|"uses table helpers"| node_table_support
node_chart_3d -->|"uses chart data"| node_chart_support
node_chart_hist -->|"uses chart data"| node_chart_support
node_chart_3d -->|"uses utilities"| node_plot_support
node_chart_hist -->|"uses utilities"| node_plot_support
node_plot_cli -.->|"writes chart images"| node_user

click node_benchmark_cli "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/__init__.py"
click node_bench_options "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/argparsing.py"
click node_bench_ini "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/parseini.py"
click node_bench_checks "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/checks.py"
click node_bench_network "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/network.py"
click node_bench_tests "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/supporting.py"
click node_bench_display "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/display.py"
click node_bench_runner "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/runfio.py"
click node_bench_jobs "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/generatefio.py"
click node_bench_defaults "https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/defaultsettings.py"
click node_plot_cli "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/__init__.py"
click node_plot_options "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/argparsing.py"
click node_plot_ini "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/iniparsing.py"
click node_plot_checks "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/flightchecks.py"
click node_plot_routing "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/getdata.py"
click node_json_import "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/jsonimport.py"
click node_json_parse "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/jsonparsing.py"
click node_log_import "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/dataimport.py"
click node_chart_support "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/shared_chart.py"
click node_plot_support "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/supporting.py"
click node_chart_2d "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/graph2d.py"
click node_chart_bars "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/bar2d.py"
click node_chart_3d "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/bar3d.py"
click node_chart_hist "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/barhistogram.py"
click node_chart_lines "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/graph2dsupporting.py"
click node_tables "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/tables.py"
click node_table_support "https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/table_support.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_benchmark_cli,node_bench_options,node_bench_ini,node_bench_checks,node_bench_network,node_bench_tests,node_bench_display,node_bench_runner,node_bench_jobs,node_bench_defaults toneBlue
class node_plot_cli,node_plot_options,node_plot_ini,node_plot_checks toneAmber
class node_plot_routing,node_json_import,node_json_parse,node_log_import,node_chart_support,node_plot_support toneMint
class node_chart_2d,node_chart_bars,node_chart_3d,node_chart_hist,node_chart_lines,node_tables,node_table_support toneRose
class node_user,node_fio toneIndigo
```

## Components

### Benchmark runner

- [Bench-fio CLI](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/__init__.py): `bench_fio/__init__.py`
- [Arguments and defaults](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/argparsing.py): `bench_fio/benchlib/argparsing.py`
- [INI settings](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/parseini.py): `bench_fio/benchlib/parseini.py`
- [Target validation](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/checks.py): `bench_fio/benchlib/checks.py`
- [Remote checks](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/network.py): `bench_fio/benchlib/network.py`
- [Workload selection](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/supporting.py): `bench_fio/benchlib/supporting.py`
- [Run summary](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/display.py): `bench_fio/benchlib/display.py`
- [Benchmark runner](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/runfio.py): `bench_fio/benchlib/runfio.py`
- [FIO job generation](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/generatefio.py): `bench_fio/benchlib/generatefio.py`
- [Benchmark defaults](https://github.com/louwrentius/fio-plot/blob/master/bench_fio/benchlib/defaultsettings.py): `bench_fio/benchlib/defaultsettings.py`

### Plot configuration

- [Fio-plot CLI](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/__init__.py): `fio_plot/__init__.py`
- [Arguments and defaults](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/argparsing.py): `fio_plot/fiolib/argparsing.py`
- [INI settings](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/iniparsing.py): `fio_plot/fiolib/iniparsing.py`
- [Preflight checks](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/flightchecks.py): `fio_plot/fiolib/flightchecks.py`

### Plot data

- [Chart data routing](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/getdata.py): `fio_plot/fiolib/getdata.py`
- [JSON import](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/jsonimport.py): `fio_plot/fiolib/jsonimport.py`
- [JSON parsing](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/jsonparsing.py): `fio_plot/fiolib/jsonparsing.py`
- [Log import](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/dataimport.py): `fio_plot/fiolib/dataimport.py`
- [Chart data support](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/shared_chart.py): `fio_plot/fiolib/shared_chart.py`
- [Plot utilities](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/supporting.py): `fio_plot/fiolib/supporting.py`

### Chart rendering

- [2D charts](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/graph2d.py): `fio_plot/fiolib/graph2d.py`
- [2D bar charts](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/bar2d.py): `fio_plot/fiolib/bar2d.py`
- [3D charts](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/bar3d.py): `fio_plot/fiolib/bar3d.py`
- [Latency histogram](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/barhistogram.py): `fio_plot/fiolib/barhistogram.py`
- [Log line charts](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/graph2dsupporting.py): `fio_plot/fiolib/graph2dsupporting.py`
- [Chart tables](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/tables.py): `fio_plot/fiolib/tables.py`
- [Table support](https://github.com/louwrentius/fio-plot/blob/master/fio_plot/fiolib/table_support.py): `fio_plot/fiolib/table_support.py`

### Other components

- **Operator**
- **FIO engine**

## Connections

- Operator → Bench-fio CLI: configures and runs (evidence: `README.md`)
- Bench-fio CLI → Arguments and defaults: parses options (evidence: `bench_fio/__init__.py`)
- Bench-fio CLI → INI settings: loads INI (evidence: `bench_fio/__init__.py`)
- Bench-fio CLI → Target validation: validates settings (evidence: `bench_fio/__init__.py`)
- Target validation → Benchmark runner: checks FIO version (evidence: `bench_fio/benchlib/checks.py`)
- Bench-fio CLI → Remote checks: checks remote (evidence: `bench_fio/__init__.py`)
- Bench-fio CLI → Workload selection: builds test list (evidence: `bench_fio/__init__.py`)
- Bench-fio CLI → Run summary: prints summary (evidence: `bench_fio/__init__.py`)
- Bench-fio CLI → Benchmark runner: runs benchmarks (evidence: `bench_fio/__init__.py`)
- Benchmark runner → FIO job generation: generates job file (evidence: `bench_fio/benchlib/runfio.py`)
- FIO job generation → Benchmark defaults: uses setting map (evidence: `bench_fio/benchlib/generatefio.py`)
- Benchmark runner → FIO engine: executes workload (evidence: `bench_fio/benchlib/runfio.py`)
- FIO engine → Operator: produces results (evidence: `README.md`)
- Operator → Fio-plot CLI: requests charts (evidence: `README.md`)
- Fio-plot CLI → Arguments and defaults: parses arguments (evidence: `fio_plot/__init__.py`)
- Fio-plot CLI → INI settings: loads INI (evidence: `fio_plot/__init__.py`)
- Fio-plot CLI → Preflight checks: runs checks (evidence: `fio_plot/__init__.py`)
- Fio-plot CLI → Chart data routing: selects chart data (evidence: `fio_plot/__init__.py`)
- Chart data routing → JSON import: dispatches JSON
- Chart data routing → Log import: dispatches logs
- 2D charts → Log import: imports log data (evidence: `fio_plot/fiolib/graph2d.py`)
- 2D charts → Log line charts: uses line support (evidence: `fio_plot/fiolib/graph2d.py`)
- Log line charts → JSON import: uses JSON import (evidence: `fio_plot/fiolib/graph2dsupporting.py`)
- Log line charts → JSON parsing: uses JSON parsing (evidence: `fio_plot/fiolib/graph2dsupporting.py`)
- JSON parsing → Plot utilities: uses helpers (evidence: `fio_plot/fiolib/jsonparsing.py`)
- 2D charts → Plot utilities: uses utilities (evidence: `fio_plot/fiolib/graph2d.py`)
- 2D bar charts → Chart data support: uses chart data (evidence: `fio_plot/fiolib/bar2d.py`)
- 2D bar charts → Chart tables: renders tables (evidence: `fio_plot/fiolib/bar2d.py`)
- 2D bar charts → Table support: uses table helpers (evidence: `fio_plot/fiolib/bar2d.py`)
- Chart tables → Table support: uses table helpers (evidence: `fio_plot/fiolib/tables.py`)
- 3D charts → Chart data support: uses chart data (evidence: `fio_plot/fiolib/bar3d.py`)
- Latency histogram → Chart data support: uses chart data (evidence: `fio_plot/fiolib/barhistogram.py`)
- 3D charts → Plot utilities: uses utilities (evidence: `fio_plot/fiolib/bar3d.py`)
- Latency histogram → Plot utilities: uses utilities (evidence: `fio_plot/fiolib/barhistogram.py`)
- Fio-plot CLI → Operator: writes chart images (evidence: `README.md`)
