Full Issue Content
Summary
Currently, fio supports specifying multiple report formats via comma-separated values for --output-format (e.g. normal,terse,json). However, all formatted output contents are written into a single file defined by the single --output parameter, which mixes human-readable plain text, CSV-style terse data, and structured JSON together in one file. This mixed file cannot be directly parsed by automation scripts, spreadsheet tools or log analyzers.
I request adding support to assign an independent output file for each selected format, so each format’s report is saved to its dedicated file without mixing contents.
Reproduction Command Example
# Current behavior: all formats write into result.log (mixed messy content)
fio --name=randwrite \
--filename=/dev/sdd1 \
--direct=1 --rw=randwrite --bs=4k \
--offset=24005054464 --size=800169984 \
--output-format=normal,terse,json \
--output=result.log
After execution, result.log contains interleaved normal text, semicolon-delimited terse rows and JSON blocks, making post-processing extremely cumbersome.
Desired New Behavior (Two feasible design proposals for maintainers to pick)
Proposal 1: Format-specific output parameters (clean & unambiguous)
Add dedicated flags like --output-normal, --output-terse, --output-json, matching each supported format.
Example usage:
fio --name=randwrite \
--filename=/dev/sdd1 --direct=1 --rw=randwrite --bs=4k \
--offset=24005054464 --size=800169984 \
--output-format=normal,terse,json \
--output-normal=report.txt \
--output-terse=report.csv \
--output-json=report.json
Each format writes exclusively to its own target file. If a format is enabled but its corresponding flag is omitted, fall back to stdout or the generic --output file as a compatibility fallback.
Proposal 2: Suffix auto-append with single base filename
Accept one base name via --output, and fio automatically appends format suffixes to generate separate files:
fio ... --output-format=normal,terse,json --output=test
# Generate test.normal, test.terse, test.json
This keeps command syntax shorter while splitting outputs automatically. Either design is acceptable to end users.
Use Case & Value
- Automated disk stability test pipelines (like my SSD firmware stability script) need three types of logs simultaneously:
- Normal human log for manual review
- Terse CSV for batch statistical analysis
- JSON for programmatic metric extraction
- Mixed single-file output forces extra post-processing scripts to split contents, adding error-prone parsing logic.
- Many enterprise storage testers run long cyclic fio workloads; separate format files simplify log archiving, filtering and failure triage.
- This matches fio’s existing bandwidth-log design pattern (auto split read/write log files), consistent with existing UX.
Workaround I Currently Use
I have to run 3 separate identical fio jobs with different single --output-format and distinct --output files, which triples test runtime and wastes SSD write endurance, severely reducing test efficiency.
Environment Info
- fio version: 3.19
- OS: Linux (CentOS / Kylin / Ubuntu)
- Scenario: SATA/NVMe SSD long-term stability & firmware upgrade verification tests
Additional Note
I searched existing GitHub issues and found #977 raised the same demand in 2020 without resolution. This feature would bring significant usability improvement for all automation-based fio users.
Short Version (If you want a concise comment/mail to mailing list)
Short Feature Request Text
Dear fio maintainers,
I’m writing to request a feature enhancement for multi-format output handling. Right now when multiple formats are set with --output-format=normal,terse,json, all output data is dumped into one single file from --output, mixing text, CSV and JSON content together, which breaks automated parsing workflows.
I hope fio can support separate dedicated output files per selected format. Two implementation ideas:
- Introduce format-specific output flags (
--output-json, --output-terse, etc.)
- Auto append format suffix to the base filename given by
--output
Running duplicate fio instances to generate separate logs doubles IO load and wastes SSD endurance, which is a big pain for long-duration stability testing. This feature will align with the existing split bandwidth log design and greatly improve usability for storage automation test scripts.
Thanks for your consideration.
Full Issue Content
Summary
Currently, fio supports specifying multiple report formats via comma-separated values for
--output-format(e.g.normal,terse,json). However, all formatted output contents are written into a single file defined by the single--outputparameter, which mixes human-readable plain text, CSV-style terse data, and structured JSON together in one file. This mixed file cannot be directly parsed by automation scripts, spreadsheet tools or log analyzers.I request adding support to assign an independent output file for each selected format, so each format’s report is saved to its dedicated file without mixing contents.
Reproduction Command Example
# Current behavior: all formats write into result.log (mixed messy content) fio --name=randwrite \ --filename=/dev/sdd1 \ --direct=1 --rw=randwrite --bs=4k \ --offset=24005054464 --size=800169984 \ --output-format=normal,terse,json \ --output=result.logAfter execution,
result.logcontains interleaved normal text, semicolon-delimited terse rows and JSON blocks, making post-processing extremely cumbersome.Desired New Behavior (Two feasible design proposals for maintainers to pick)
Proposal 1: Format-specific output parameters (clean & unambiguous)
Add dedicated flags like
--output-normal,--output-terse,--output-json, matching each supported format.Example usage:
Each format writes exclusively to its own target file. If a format is enabled but its corresponding flag is omitted, fall back to stdout or the generic
--outputfile as a compatibility fallback.Proposal 2: Suffix auto-append with single base filename
Accept one base name via
--output, and fio automatically appends format suffixes to generate separate files:fio ... --output-format=normal,terse,json --output=test # Generate test.normal, test.terse, test.jsonThis keeps command syntax shorter while splitting outputs automatically. Either design is acceptable to end users.
Use Case & Value
Workaround I Currently Use
I have to run 3 separate identical fio jobs with different single
--output-formatand distinct--outputfiles, which triples test runtime and wastes SSD write endurance, severely reducing test efficiency.Environment Info
Additional Note
I searched existing GitHub issues and found #977 raised the same demand in 2020 without resolution. This feature would bring significant usability improvement for all automation-based fio users.
Short Version (If you want a concise comment/mail to mailing list)
Short Feature Request Text
Dear fio maintainers,
I’m writing to request a feature enhancement for multi-format output handling. Right now when multiple formats are set with
--output-format=normal,terse,json, all output data is dumped into one single file from--output, mixing text, CSV and JSON content together, which breaks automated parsing workflows.I hope fio can support separate dedicated output files per selected format. Two implementation ideas:
--output-json,--output-terse, etc.)--outputRunning duplicate fio instances to generate separate logs doubles IO load and wastes SSD endurance, which is a big pain for long-duration stability testing. This feature will align with the existing split bandwidth log design and greatly improve usability for storage automation test scripts.
Thanks for your consideration.