A Python package for parsing IOR (Interleaved Or Random) benchmark log files. Extracts performance metrics, test configuration, and filesystem information for analysis, reporting, and automation.
- Parse IOR log files from command line or Python API
- Extracts test setup, timing, options, and results sections
- Converts sizes to bytes and timestamps to Unix time
- Outputs structured JSON for further analysis
- CLI and Python API usage
- Supports IOR logs from multiple versions and verbosity levels
pip install ior-parser
Or for development:
git clone https://github.com/izzet/ior-parser.git
cd ior-parser
pip install -e .
ior_parser tests/logs/write_only.log --json --pretty
Example output:
{
"test_setup": {
"ior_version": "4.0.0",
"command_line": "bin/ior -a POSIX -s 128 -b 4M -t 1M -F -w -o /tmp/write_only/data/testfile",
"machine": "Linux corona211",
"test_id": "0",
"path": "/tmp/write_only/data/testfile.00000000",
"file_system_info_text": "14.3 TiB Used FS: 0.4% Inodes: 190.7 Mi Used Inodes: 0.4%",
"file_system_info": {
"total_size_bytes": 15723016277196,
"used_fs_percent": 0.4,
"total_inodes": 190700000,
"used_inodes_percent": 0.4
}
},
"test_times": {
"began_text": "Sun Jul 27 08:35:50 2025",
"began": 1753630550,
"start_time_text": "Sun Jul 27 08:35:50 2025",
"start_time": 1753630550,
"finished_text": "Sun Jul 27 08:35:51 2025",
"finished": 1753630551,
"elapsed_seconds": 1.0
},
"options": {
"api": "POSIX",
"api_version": null,
"test_filename": "/tmp/write_only/data/testfile",
"access": "file-per-process",
"type": "independent",
"segments": 128,
"ordering_in_file": "sequential",
"ordering_inter_file": "no tasks offsets",
"nodes": 1,
"tasks": 1,
"clients_per_node": 1,
"repetitions": 1,
"xfer_size_text": "1 MiB",
"xfer_size_bytes": 1048576,
"block_size_text": "4 MiB",
"block_size_bytes": 4194304,
"aggregate_file_size_text": "512 MiB",
"aggregate_file_size_bytes": 536870912
},
"results": {
"write": {
"bandwidth_mib_max": 660.64,
"bandwidth_mib_min": 660.64,
"bandwidth_mib_mean": 660.64,
"bandwidth_mib_std": 0.0,
"ops_max": 660.64,
"ops_min": 660.64,
"ops_mean": 660.64,
"ops_std": 0.0,
"time_seconds_mean": 0.77501
}
},
"_source_file": "tests/logs/write_only.log"
}
from ior_parser import parse_ior_log
result = parse_ior_log("path/to/ior.log")
print(result.to_dict())
test_setup
: IOR version, command line, machine, path, filesystem infotest_times
: began, finished, elapsed (as Unix timestamps)options
: parsed IOR options (API, block size, transfer size, etc.)results
: read/write operation metrics (bandwidth, IOPS, time)
- Lint:
ruff check .
- Format:
ruff format .
- Test:
pytest
- Pre-commit:
pre-commit run --all-files
MIT
Izzet Yildirim (izzetcyildirim@gmail.com)