Measuring the overall speed of a storage drive isn't complicated. With a copy of CrystalDiskMark, the old free build of HD Tune, or other similar software is enough. However, there are users out there who must evaluate their hardware under more specific conditions, with well-defined workloads. That's when the FIO tool comes in. It has no interface, its documentation isn't the best in the world, and it teaches you nothing along the way, but if you're one of those users, you need a copy.
One point frequently criticized among the most popular benchmarks is their synthetic profile. From a certain viewpoint, using a fixed, repetitive, and invariable benchmark is useful because it lets us extend the same "package of rules" across multiple hardware configurations, but there are times when that advantage falls apart. For example, a hard drive working in a desktop system is not the same as one in a server with completely different workloads.
That means that under programs like CrystalDiskMark or the classic HD Tune, what we actually get are "educated guesses" about the performance of a disk or SSD, while in the background there may be bottlenecks, driver bugs, and other configuration errors waiting to ruin everything. How do you detect them? With a super-flexible, advanced benchmark capable of reproducing almost any workload: FIO.
Why Isn't FIO More Popular?
So... if it's so good, why isn't it more famous? The answer is simple: It's not a benchmark designed for the average user. It lacks a graphical interface, nor an assistant to explain each of its parameters. With FIO you must know exactly what you want to evaluate, and not expect help to achieve it. FIO behaves like a simulator/jack-of-all-trades, a "Swiss Army knife" that saved its developer the headache of creating an individual benchmark for each workload. But such flexibility is reflected in the modifiers needed to run it. For example:
fio --name=random-write --ioengine=windowsaio --rw=randwrite --bs=4k --numjobs=1 --size=4g --iodepth=1 --runtime=60 --time_based --end_fsync=1
- "Name" is the name that the file generated during the benchmark will carry.
- "IOEngine" defines the way FIO interacts with the file system (on Windows it's "windowsaio", for the rest it's "posixaio").
- "--rw=randwrite" indicates we want to evaluate random write operations.
- "--bs=4k" is the block size, 4K, a real torture for many storage media.
- "--size=4g" sets the file size, 4 gigabytes.
- "--numjobs=1" orders the creation of a single file, and a single process within that file.
- "--iodepth=1" is the depth for stacking commands in the operating system queue (equivalent to one operation at a time).
- "--runtime=60" is the execution time, 60 seconds.
- "--end_fsync=1" keeps the counter active until all operations have been completed.
The final result appears under the "Run Status Group" label: In my case, FIO took 87.230 milliseconds to write a total of 6.307 "mebibytes" (that is, base 1,024), which translates to some 72.3 "mebibytes" per second, something between low and normal for a common SSD.
Want to know more about FIO? If so, the folks at Ars Technica published an excellent guide, but the number one recommendation remains reading the official documentation. Remember: FIO works very well, but it doesn't teach or explain. To master it, you'll need to get your hands dirty.
Official site and downloads: Click here | Source: Ars Technica