fio - animeshtrivedi/notes GitHub Wiki
Bookmarks
- Readthedocs: https://fio.readthedocs.io/en/latest/fio_doc.html
make install DESTDIR=/home/atr/local/
Representative command
fio --name="iouring" --bs=4K --iodepth=1 --numjobs=1 --cpus_allowed=0 --time_based=1 --ramp_time=5s --runtime=30s --ioengine=io_uring --registerfiles=1 --fixedbufs=1 --ioscheduler=none --size=100% --norandommap=1 --group_reporting=1 --direct=1 --rw=randread --allow_file_create=0 --filename=/home/animesh.trivedi/mnt/tmpfs/
# --output-format=json -o ./logs-20240729-17h16m57s/bs_4Ki_qd_1.json
Frequency used fio configurations and setups
Fio output explained: https://tobert.github.io/post/2014-04-17-fio-output-explained.html
Fio BW output has following fields
(https://github.com/axboe/fio/issues/538) Their documentation is not entirely complete or consistent.
"io_bytes" : 24122617856,
"io_kbytes" : 23557244,
"bw_bytes" : 804060459,
"bw" : 785215,
"iops" : 196303.789874,
"runtime" : 30001,
"total_ios" : 5889310,
"short_ios" : 0,
"drop_ios" : 0,
"bw_min" : 779511,
"bw_max" : 791024,
"bw_agg" : 100.000000,
"bw_mean" : 785431.766667,
"bw_dev" : 2992.810540,
"bw_samples" : 60,
"iops_min" : 194877,
"iops_max" : 197756,
"iops_mean" : 196357.916667,
"iops_stddev" : 748.178065,
"iops_samples" : 60
formatting related settings worth noticing
--output=filename
Write output to file filename.
--output-format=format
Set the reporting format to normal, terse, json, or json+. Multiple formats can be selected, separated by a comma. terse is a CSV based format. json+ is like json, except it adds a full dump of the latency buckets.
--bandwidth-log
Generate aggregate bandwidth logs.
Measuring latency
Concepts
How are jobs, processes and threads are connected
--max-jobs=nr
Set the maximum number of threads/processes to support to nr.
NOTE: On Linux, it may be necessary to increase the shared-memory limit (/proc/sys/kernel/shmmax
) if fio runs into errors while creating jobs.
--numjobs=int
Create the specified number of clones of this job. Each clone of job is spawned as an independent thread or process. May be used to setup a larger number of threads/processes doing the same thing. Each thread is reported separately; to see statistics for all clones as a whole, use group_reporting in conjunction with new_group. See --max-jobs. Default: 1.
--runtime=time
Limit runtime. The test will run until it completes the configured I/O workload or until it has run for this specified amount of time, whichever occurs first. It can be quite hard to determine for how long a specified job will run, so this parameter is handy to cap the total runtime to a given time. When the unit is omitted, the value is interpreted in seconds.
--time_based
If set, fio will run for the duration of the runtime specified even if the file(s) are completely read or written. It will simply loop over the same workload as many times as the runtime allows.
ramp_time=time
If set, fio will run the specified workload for this amount of time before logging any performance numbers. Useful for letting performance settle before logging results, thus minimizing the runtime required for stable results. Note that the ramp_time is considered lead in time for a job, thus it will increase the total runtime if a special timeout or runtime is specified. When the unit is omitted, the value is given in seconds.