AgeCommit message (Collapse)Author
2019-07-31bssplit: Fix handling of 0 percentageDamien Le Moal
If a block size percentage is ispecified as 0 in bssplit, the block size defined is not ignored by the loop in get_next_buflen(). In particular, if the first (smallest) block size specified has a 0 percentage, the loop is existed and that block size used as the next IO size, resulting in a behavior equivalent to specifying 100%. E.g. using --bssplit=64k/0,1024k/100 results in 100% of issued IOs to be 64KB instead of 1MB. Fix this by ignoring bssplit entries that have a 0 percentage. This is safe as the initialization of the bssplit array ensure that the sum of all percentages is always 100, guaranteeing that a block size will be chosen for the next IO size. Signed-off-by: Damien Le Moal <> Signed-off-by: Jens Axboe <>
2019-07-26Document io_uring featureJens Axboe
This was released with Linux 5.1, so we can document it now as the API won't change. Signed-off-by: Jens Axboe <>
2019-07-26engines/libaio: remove remnants of abandoned aio featuresJens Axboe
Before we had io_uring, aio grew support for polled IO and setup through a new system call. As this never made it into Linux and was abandoned in favor of io_uring, kill it off. Signed-off-by: Jens Axboe <>
2019-07-12Merge branch 'dev' of Axboe
* 'dev' of libiscsi: log reason of error when readcapacity failed
2019-07-12Fio 3.15fio-3.15Jens Axboe
Signed-off-by: Jens Axboe <>
2019-07-12libiscsi: log reason of error when readcapacity failedKyle Zhang
Signed-off-by: Kyle Zhang <>
2019-07-09engines/http: set FIO_SYNCIO flagVincent Fu
This ioengine carries out synchronous operations. So the FIO_SYNCIO flag needs to be set in order for latencies to be calculated correctly. Fixes: Signed-off-by: Jens Axboe <>
2019-07-09fio: fix aio trim completion latenciesVincent Fu
The io_uring, libaio, and posixaio ioengines actually carry out synchronous trim operations, but latency timestamps are recorded as if the trims were issued asynchronously. This patch fixes how timestamps are recorded for trim operations issued by these ioengines. Fixes: Signed-off-by: Jens Axboe <>
2019-07-01Merge branch 'optlenmax' of Axboe
* 'optlenmax' of Increase maximum length of line in jobs file to 8192
2019-07-01Increase maximum length of line in jobs file to 8192Nick Principe
Increase OPT_LEN_MAX to 8192, use OPT_LEN_MAX for string in __parse_jobs_ini(), and document line length limit for job files in man page. Signed-off-by: Nick Principe
2019-07-01engines/rbd: hide rbd_io_u_seen() if not usedJens Axboe
Signed-off-by: Jens Axboe <>
2019-06-04eta: Fix compiler warningDamien Le Moal
gcc 9 complains about directly referencing pointer values in the packed structure jobs_eta. E.g.: warning: taking address of packed member of ‘struct jobs_eta’ may result in an unaligned pointer value [-Waddress-of-packed-member] Remove this by using a local void pointer for the rate and iops array references that generate the warning. Signed-off-by: Damien Le Moal <> Signed-off-by: Jens Axboe <>
2019-06-04Fix string copy compilation warningsDamien Le Moal
Fix the many warnings that gcc 9 spits out. Signed-off-by: Damien Le Moal <> Signed-off-by: Jens Axboe <>
2019-05-31Merge branch 'wip-tcmalloc' of Axboe
* 'wip-tcmalloc' of configure: attempt to link against tcmalloc by default if available
2019-05-31configure: attempt to link against tcmalloc by default if availableJason Dillaman
librbd will run up to 20% faster under small IO workloads when fio is linked against tcmalloc. By automatically linking against tcmalloc, it avoids the need to use LD_PRELOAD to pull in a faster memory management toolset. Signed-off-by: Jason Dillaman <>
2019-05-27configure: check for gtk version using pkg-configHelmut Grohne
The previous way of running a program was incompatible with cross compilation. The program is still being compiled as a sanity check, but no longer run. Signed-off-by: Helmut Grohne <> Signed-off-by: Jens Axboe <>
2019-05-27configure: apply ${cross_prefix} to pkg-config callsHelmut Grohne
Otherwise, we're searching for build architecture libraries which is not what we want. Signed-off-by: Helmut Grohne <> Signed-off-by: Jens Axboe <>
2019-05-23glusterfs: update for new APIJens Axboe
Apparently glusterfs just changes their API as they see fit. Add a configure check for the newer version, which adds pre/post stat variables in a few random spots. This should fix compilation with v6.0 of the API. Fixes: Signed-off-by: Jens Axboe <>
2019-05-22configure: add gettid() testJens Axboe
Apparently some newer glibcs now have it, decades after the fact. Signed-off-by: Jens Axboe <>
2019-05-22Fio 3.14fio-3.14Jens Axboe
Signed-off-by: Jens Axboe <>
2019-05-20io_uring: sync with liburing/kernelJens Axboe
Signed-off-by: Jens Axboe <>
2019-05-16stat: remove terse v2 blank lines with description not setVincent Fu
The documentation says that the job description will appear on a second line if this is set. If it is not set there will be an empty line. Eliminate the empty line when the description is not set. Signed-off-by: Jens Axboe <>
2019-05-16docs: improve terse output format documentationVincent Fu
Fix up some details and note client/server mode differences. Signed-off-by: Jens Axboe <>
2019-05-16client: add a newline after terse disk utilVincent Fu
In client/server mode terse disk utilization output appears at the end of each blob of terse output. We need a newline so that the next blob of terse output starts at the beginning of a line. Signed-off-by: Jens Axboe <>
2019-05-16client: handle disk util for all output formatsVincent Fu
Since fio allows multiple output formats, it should process the disk utilization data for each output format that was requested by the user when it is run in client/server mode. Signed-off-by: Jens Axboe <>
2019-05-16client: do not print disk utilization for terse v2Vincent Fu
terse version 2 omits disk utilization data when fio is run locally. Make this behavior the same when fio is run in client/server mode. Signed-off-by: Jens Axboe <>
2019-05-09t/io_uring: improve EOPNOTSUPP messageJens Axboe
Put in one line and include kernel as well. Signed-off-by: Jens Axboe <>
2019-05-08t/io_uring: clarify polled support is fs + deviceJens Axboe
Signed-off-by: Jens Axboe <>
2019-05-06Update CFLAGS and LDFLAGS for FreeBSD buildsRebecca Cran
FreeBSD installs third-party headers into /usr/local/include and libraries into /usr/local/lib. Update CFLAGS and LDFLAGS to look there. Signed-off-by: Jens Axboe <>
2019-05-06Merge branch 'fix-infinite-loop-of-io_uring' of ↵Jens Axboe * 'fix-infinite-loop-of-io_uring' of io_uring: fix possible infinite loop
2019-05-06io_uring: fix possible infinite loopSatoru Takeuchi
When reaping some completed I/O before io_uring_enter(), it waits forever. Signed-off-by: Satoru Takeuchi <>
2019-04-25io_uring: remove cachehit informationJens Axboe
This patch never made it into the upstream kernel, remove knowledge of it from fio. Signed-off-by: Jens Axboe <>
2019-04-25Fix __FIO_OPT_G_ISCSI numberingJens Axboe
__FIO_OPT_G_NR must always be last, if it isn't then it doesn't denote the last used bit. Fixes: 247ef2aaf28a ("fio: add libiscsi engine") Signed-off-by: Jens Axboe <>
2019-04-25zbd random read conventional zonesPhillip Chen
Initialize conventional zone write pointers to full so zbd_find_zone will accept conventional zones when searching around a randomly chosen empty zone. Reviewed-by: Damien Le Moal <> Signed-off-by: Phillip Chen <> Signed-off-by: Jens Axboe <>
2019-04-22Merge branch 'libiscsi' of Axboe
* 'libiscsi' of fio: add libiscsi engine filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIO
2019-04-21fio: add libiscsi engineKyle Zhang
Adding a new engine that access iscsi lun with libiscsi. You could find example fio configuration in examples/libiscsi.fio . Signed-off-by: Kyle Zhang <>
2019-04-21filesetup: don't call create_work_dirs() for ioengine with FIO_DISKLESSIOKyle Zhang
Don't create work dirs if ioengine has flag FIO_DISKLESSIO. So that filename can contains '/'. It is useful when ioengine is based on network and filename is used as url. Also call create_work_dirs() just when setting up a file. So that ioengine is loaded and ioengine flags are available. Signed-off-by: Kyle Zhang <>
2019-04-19zbd: Fix zone report handlingDamien Le Moal
fio may be executed concurrently with a block device revalidation by the kernel. Device revalidation may lead to the block device capacity to be changed to a smaller value (device changed) or to even 0 in case of revalidation failure. In such case, the BLKREPORTZONE ioctl executed from read_zone_info() may report a success with an empty zone report when the start sector for the report is above the new capacity of the device. This leads to an infinite loop inside parse_zone_info() and the fio run never terminating. Fix this problem by returning -EIO from read_zone_info() thus avoiding the infinite loop in parse_zone_info(). This change does not affect the normal case with a stable device as read_zone_info() is always called with a valid start sector that does not result in an empty zone report. Signed-off-by: Damien Le Moal <> Signed-off-by: Jens Axboe <>
2019-04-18fio: Add advise THP option to mmap engineKeith Busch
The Linux specific transparent hugepage memory advisory has potentially significant implications for how the memory management behaves. If the platform supports it, add a new mmap ioengine specific option that advises HUGEPAGE on an mmap'ed range. The option availability is detected during configure. If the option is set, fio can test THP when used with private anonymous memory (i.e. mmap /dev/zero). Signed-off-by: Keith Busch <> Signed-off-by: Jens Axboe <>
2019-04-17Merge branch 'master' of Axboe
* 'master' of rand: fix truncated rand_seed on Windows
2019-04-17rand: fix truncated rand_seed on WindowsMing-Hung Tsai
The long data type is 32-bit on LLP64 platforms
2019-04-01Merge branch 'patch-1' of Axboe
* 'patch-1' of arch: fix build breakage on armv6 again
2019-03-31arch: fix build breakage on armv6 againRosen Penev
6K was missing from the defines. Signed-off-by: Rosen Penev <>
2019-03-25stat: eliminate unneeded curly bracesVincent Fu
Signed-off-by: Jens Axboe <>
2019-03-25client: put All clients section at end of normal outputVincent Fu
When fio runs multiple jobs on servers, it is possible for the "All clients" output to appear in the middle of output for the individual jobs. This patch puts the "All clients" output into a separate buffer and displays it after the output for all the individual jobs. Signed-off-by: Jens Axboe <>
2019-03-21stat: fix accumulation of latency bucketsVincent Fu
The numbers of buckets for nsec, usec, and msec latencies may differ from each other. So we need to iterate separately over the three types of buckets. Signed-off-by: Jens Axboe <>
2019-03-11t/io_uring: memset() allocated memoryKeith Busch
But I totally rushed this patch and just sent it once I heard it "worked", and it really doesn't because malloc doesn't zero the buffer. My mistake, kzalloc spoiled me. Here's the fix: Fixes: e39863e3cb61 ("t/io_uring: add depth options") Signed-off-by: Jens Axboe <>
2019-03-08t/io_uring: add depth optionsKeith Busch
Make depth options command line parameters so a recompile isn't required to see how it affects performance. Signed-off-by: Keith Busch <> Signed-off-by: Jens Axboe <>
2019-03-07engines/skeleton_external: update gcc incantationJens Axboe
Fixes: Signed-off-by: Jens Axboe <>
2019-03-06t/io_uring: stop when max number of files is reachedJens Axboe
Signed-off-by: Jens Axboe <>