fio is a free command-line tool for simulating user-defined I/O workloads for performance testing and reproducing bugs. Users can define jobs in files or set parameters on the command line, including I/O patterns, block and I/O sizes, engines, queue depth, target files or devices, and threads or processes. Results can be reported in normal, terse, JSON, or JSON+ formats. fio can run as a backend server and receive jobs from clients on other hosts. Its HTTP engine supports HTTP and S3 access. The documented platform list includes Linux, macOS, Windows, Solaris, and BSD variants. The --readonly option is intended to prevent writes and trims; fio also aborts destructive jobs on devices that appear mounted unless allow_mounted_write is set. It generally does not need root access unless the selected files or devices require it. The project is free software under version 2 of the GNU GPL. Building fio on Windows requires Cygwin, and the documented minimum Windows versions are Windows 7 and Windows Server 2008 R2.
Who it is for
fio suits people who need to simulate specific storage I/O workloads without writing tailored test programs. Its client/server mode may suit teams running jobs on remote hosts.
What is good
- Configures workload patterns, sizes, engines, and queue depth.
- Reports results in JSON and other formats.
- Supports remote job execution through client/server mode.
- Measures random and sequential I/O, IOPS, and latency.
- Free software under version 2 of the GNU GPL.
What to know first
- Building on Windows requires Cygwin.
- Some files or devices may require root access.
- Mounted-device destructive jobs abort unless explicitly allowed.
The Geeks Club review
fio: the full review
fio offers detailed controls for defining I/O workloads and several output formats, including JSON. Windows builders need Cygwin, and users should understand its write-safety controls before running jobs.
Overview
fio is a command-line storage workload simulator for people who need to shape a test around a particular I/O pattern, from developers reproducing bugs to administrators evaluating storage behavior. Its central advantage is control over the workload and the results; that flexibility makes it a poor fit for anyone looking for a simple, fixed benchmark with minimal configuration.
Created in 2006, fio was written by Jens Axboe to support flexible testing of the Linux I/O subsystem and schedulers. Axboe and Vincent Fu maintain it. The tool is free software under GNU GPL version 2, so there is no purchase cost, but users should be prepared to work with its command-line interface and understand the jobs they run.
Key features
Build a workload to fit the question
Users can define jobs in reusable job files or provide parameters on the command line. A workload can set its I/O pattern, block size, I/O size, engine, queue depth, target file or device, and use of threads or processes. fio supports both random and sequential tests, plus IOPS and latency measurement. This breadth is useful when a canned test would not represent the workload under investigation; it also means the quality and safety of a run depend on choosing the configuration deliberately.
Multiple result formats and remote jobs
Output is available in normal, terse, JSON, and JSON+ formats. The JSON options suit workflows that need structured results, while the other formats provide alternatives for reading or handling output. In client/server mode, fio can run as a backend and accept jobs from clients on other hosts, which is useful when the test needs to execute remotely rather than on the machine issuing it.
Storage access and safeguards
The HTTP engine supports access to HTTP and S3. fio also has protections relevant to testing real devices: --readonly prevents writes and trims, and destructive jobs against devices that appear mounted are aborted unless allow_mounted_write is set. Those safeguards are important, but they are not a substitute for checking the target and job configuration before running a workload that could alter data.
Root access is not generally required; it depends on the files or devices selected, and some options may have additional permission restrictions. That makes fio usable without elevated privileges in many cases, while leaving device access and option-specific limits to the user's environment.
Pricing
fio has one free plan: 0.00 USD per free. It is free software under GNU GPL version 2, with no paid tier or usage quota described. Its price is compelling for individual users and technical teams, though the command-line workflow means the main cost is the expertise needed to define and interpret the workload.
Platforms
fio supports Linux, Solaris, AIX, HP-UX, macOS, NetBSD, OpenBSD, Windows, FreeBSD, and DragonFly. Windows builds require Cygwin, and the documented minimum versions for building or running fio are Windows 7 and Windows Server 2008 R2. Tagged-release Windows installers are available through GitHub Releases; Linux distribution packages are also available. That range is broad, but Windows users face an extra build requirement that Linux and macOS users may not.
Who it's for
fio is best suited to engineers, developers, and storage administrators who need to reproduce a specific I/O workload, measure IOPS or latency, or run jobs against files or devices. Its job files and configurable controls reward users who know what they want to test. It is less suitable for first-time users seeking an immediate, standardized score without building a workload.
The project mailing list handles discussion, questions, bug reports, and development; bug reports can also go to GitHub. That gives users a project channel for technical support, but the documented support path is community and development-oriented rather than a commercial help desk.
Pros and cons
- Pros: Workloads can be tailored through job files or command-line parameters, with controls over patterns, sizes, engines, queue depth, targets, and execution model. This is valuable when a test needs to match a particular storage scenario.
- Pros: Random and sequential tests, IOPS and latency measurements, four output formats, and client/server operation give technical users options for both running and consuming results.
- Pros: It is free under GNU GPL version 2 and supports a wide range of operating systems, including several Unix-like platforms beyond Linux.
- Cons: The command-line interface and extensive workload controls demand technical judgment; users wanting a guided benchmark or uncomplicated score should look elsewhere.
- Cons: Windows builds require Cygwin. The readonly option and mounted-device check help prevent destructive mistakes, but jobs that target storage still require careful review.
Alternatives
For other options, browse the Disk Benchmark Software directory. Parkdale is a free alternative for readers who need a disk benchmark on Android, macOS, or Windows rather than fio's workload-focused command-line approach. Filebench is another free option for Linux users considering a different file benchmarking tool.
simple-disk-benchmark is free, MIT-licensed, and command-line based, making it a reasonable alternative for readers who want a free tool in that form. AS SSD Benchmark is a free Windows-only option. KDiskMark is a free, open-source disk benchmark for Linux. D-Bench is free for Windows, and Buddi is free GPLv2 software for Linux, macOS, and Windows. DaVinci Resolve is a freemium option for Linux, macOS, and Windows; its Studio plan is 295.00 USD per once.
Verdict
Choose fio if you need to define storage I/O jobs precisely, measure IOPS or latency, or send jobs to remote hosts without paying for the tool. Its flexibility and broad platform support are the case for it; its command-line complexity and the care required around write-enabled jobs are the reasons to choose a simpler benchmark instead.
fio plans and pricing
All plansCompared on disk benchmark software
- Free plan
- Yes
- Random I/O tests
- Yes
- Sequential tests
- Yes
- IOPS measurement
- Yes
- Latency measurement
- Yes
- Supported platforms
- Linux, Solaris, AIX, HP-UX, OSX, NetBSD, OpenBSD, Windows, FreeBSD, DragonFly
- Command-line interface
- Yes

