fio.git
8 years agoAdd get_fs_size() support for BSDs
Tomohiro Kusumi [Wed, 10 Jun 2015 12:45:00 +0000 (21:45 +0900)]
Add get_fs_size() support for BSDs

Add get_fs_size() for FreeBSD/DragonFlyBSD. The same code may
work on NetBSD/OpenBSD as it uses POSIX statvfs(2).

The following results verify df(1) (which also typically uses
statfs(2) or statvfs(2)) shows the same number given that df(1)
output is correct for the given filesystems.

--
 # uname
 FreeBSD
 # cat ./test2.c
 #include <stdio.h>
 #include "os/os-freebsd.h"
 int main(int argc, char *argv[]) {
         printf("%s %llu\n", argv[1], get_fs_size(argv[1]));
         return 0;
 }
 # clang -Wall -g ./test2.c -o test2
 # ./test2 /
 / 102783143936
 # df -TH /
 Filesystem   Type    Size    Used   Avail Capacity  Mounted on
 /dev/ada0p2  ufs     112G    9.5G     94G     9%    /
                      ^^^^^^^^^^^^     ^^^
                      112G - 9.5G      bfree!=bavail
                      = 102.5G         like it differs on ext[234]
--
 # uname
 DragonFly
 # cat ./test2.c
 #include <stdio.h>
 #include "os/os-dragonfly.h"
 int main(int argc, char *argv[]) {
         printf("%s %llu\n", argv[1], get_fs_size(argv[1]));
         return 0;
 }
 # gcc -Wall -g ./test2.c -o test2
 # ./test2 /
 / 450287370240
 # df -TH /
 Filesystem  Type     Size   Used  Avail Capacity  Mounted on
 ROOT        hammer   480G    30G   450G     6%    /

8 years agoAdd header include for DragonFlyBSD
Tomohiro Kusumi [Wed, 10 Jun 2015 12:52:45 +0000 (21:52 +0900)]
Add header include for DragonFlyBSD

Add '#include <unistd.h>' to os/os-dragonfly.h for lwp_gettid(2).
(No error on make, but needs <unistd.h> to include this header
independently)

8 years agoFix compiler warning
Tomohiro Kusumi [Tue, 9 Jun 2015 23:28:13 +0000 (08:28 +0900)]
Fix compiler warning

The local variable off is uninitialized on 'goto fill'.
Initializing with 0 seems to be appropriate to fix following gcc warning
although off is actually always initialized as the function returns with
1 on 'if (!i)' case.

options.c:920: warning: 'off' may be used uninitialized in this function

8 years agoDropped commented out part of line.
Sam Zaydel [Tue, 9 Jun 2015 21:14:20 +0000 (14:14 -0700)]
Dropped commented out part of line.

8 years agoMerge branch 'master' of github.com:axboe/fio into fixtype
Sam Zaydel [Tue, 9 Jun 2015 21:11:36 +0000 (14:11 -0700)]
Merge branch 'master' of github.com:axboe/fio into fixtype

8 years agoint may be too small for a size_t on some systems.
Sam Zaydel [Tue, 9 Jun 2015 21:10:25 +0000 (14:10 -0700)]
int may be too small for a size_t on some systems.

8 years agooptions: use fio_option_is_set() to detect verify setting
Jens Axboe [Tue, 9 Jun 2015 20:00:56 +0000 (14:00 -0600)]
options: use fio_option_is_set() to detect verify setting

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoverify: cleanup code for verify pattern without headers
Jens Axboe [Tue, 9 Jun 2015 14:35:29 +0000 (08:35 -0600)]
verify: cleanup code for verify pattern without headers

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoverify: fix dumping of received/expected buffers on failure
Jens Axboe [Tue, 9 Jun 2015 14:06:02 +0000 (08:06 -0600)]
verify: fix dumping of received/expected buffers on failure

If verify=pattern is used, we don't have a header to rely on. So
make one up for that case.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoverify: add raw pattern verify
Jens Axboe [Tue, 9 Jun 2015 02:43:43 +0000 (20:43 -0600)]
verify: add raw pattern verify

Add specific verify=pattern that doesn't use any headers, it
just writes the specified pattern and verifies it.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agobackend: don't add to runtime for fake writes
Jens Axboe [Tue, 9 Jun 2015 00:43:22 +0000 (18:43 -0600)]
backend: don't add to runtime for fake writes

This fixes showing that fio did writes with --verify_only being set,
while in reality it just ended them before submitting to the device.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoClear sysfs path before reading current ioscheduler from sysfs
Tomohiro Kusumi [Mon, 8 Jun 2015 10:19:02 +0000 (19:19 +0900)]
Clear sysfs path before reading current ioscheduler from sysfs

switch_ioscheduler() function has a local buffer tmp[] to store
both sysfs path (e.g. /sys/block/`device`/queue/scheduler) and
content of that sysfs path.

In order to properly test strstr() after writing a ioscheduler
string (e.g. "deadline") to sysfs, it needs to memset(0) first.
Otherwise if the content of sysfs path (below (b)) is shorter
than the existing sysfs path in tmp[] (below (a)), then tmp[]
after storing the content of sysfs (below (c) and *haystack of
strstr()) contains remaining part of the sysfs path.

(a) "/sys/block/sdb/queue/scheduler"
(b) "noop [deadline] cfq \n"
(c) "noop [deadline] cfq \nscheduler"

strstr() will result the same given that the remaining part of
the sysfs path is unlikely to contain ioscheduler string, but
the remaining part should still be cleared first.

8 years agoconfigure: add some missing help options
Jens Axboe [Fri, 5 Jun 2015 14:33:56 +0000 (08:33 -0600)]
configure: add some missing help options

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix compile error on non Linux-or-BSDs
Tomohiro Kusumi [Fri, 5 Jun 2015 10:15:43 +0000 (19:15 +0900)]
Fix compile error on non Linux-or-BSDs

e7e136da needed to add #else part with another device_is_mounted()
that returns 0 for non Linux-or-BSDs environment. Any environment
without getmntent(3) or getmntinfo(3) needs a blank function.

8 years agoinit: automate displaying debug categories
Jens Axboe [Thu, 4 Jun 2015 19:45:32 +0000 (13:45 -0600)]
init: automate displaying debug categories

Better than having them hardwired, so we don't have to update the
code in several places when adding new categories.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd device_is_mounted() support for BSDs
Tomohiro Kusumi [Tue, 2 Jun 2015 14:40:44 +0000 (23:40 +0900)]
Add device_is_mounted() support for BSDs

Implement '#elif' part of lib/mountcheck.c using getmntinfo(3).

This should implement device_is_mounted() on most BSDs, and has been
tested on FreeBSD/DragonFlyBSD. NetBSD/OpenBSD do have getmntinfo(3)
but may need to include different headers according to their online
manpages.

--
 # cat ./test1.c
 #include <stdio.h>
 #include "./lib/mountcheck.h"
 int main(int argc, char *argv[]) {
  printf("%s %d\n", argv[1], device_is_mounted(argv[1]));
  return 0;
 }

--
 # uname
 FreeBSD
 # clang -Wall -g ./test1.c ./lib/mountcheck.o -o ./test1
 # ./test1 /dev/ada0p2  /* UFS */
 /dev/ada0p2 1
 # ./test1 zfs  /* ZFS */
 zfs 1
 # ./test1 zfs/test  /* ZFS */
 zfs/test 1
 # ./test1 /dev/da0  /* not mounted device */
 /dev/da0 0
 # ./test1 random  /* irrelevant string */
 random 0

--
 # uname
 DragonFly
 # gcc -Wall -g ./test1.c ./lib/mountcheck.o -o ./test1
 # ./test1 /pfs/@@-1:00005  /* HAMMER */
 /pfs/@@-1:00005 1
 # ./test1 procfs  /* procfs */
 procfs 1
 # ./test1 /dev/da8  /* not mounted device */
 /dev/da8 0
 # ./test1 random  /* irrelevant string */
 random 0

8 years agoMerge branch 'req6' of git://github.com/kusumi/fio
Jens Axboe [Mon, 1 Jun 2015 14:32:45 +0000 (08:32 -0600)]
Merge branch 'req6' of git://github.com/kusumi/fio

8 years agoMinor cleanups on cleanup()
Tomohiro Kusumi [Mon, 1 Jun 2015 13:21:29 +0000 (22:21 +0900)]
Minor cleanups on cleanup()

Sync with the way other engines implement cleanup() that is regarded
as a better practice. td->io_ops->data should have null check before
dereference and its members can be freed without null check.

8 years agoFix build error on non-GNU environment
Tomohiro Kusumi [Mon, 1 Jun 2015 12:32:37 +0000 (21:32 +0900)]
Fix build error on non-GNU environment

'#include <mntent.h>' needs to be inside '#ifdef CONFIG_GETMNTENT'
and that was probably the intention of the commit aae599ba.
e.g. BSDs are likely to hit following compile error.

--
lib/mountcheck.c:3:20: fatal error: mntent.h: No such file or directory
compilation terminated.
Makefile:275: recipe for target 'lib/mountcheck.o' failed
gmake: *** [lib/mountcheck.o] Error 1

8 years agordma: adapt to new init_rand_seed()
Jens Axboe [Sat, 30 May 2015 19:04:33 +0000 (13:04 -0600)]
rdma: adapt to new init_rand_seed()

engines/rdma.c: In function ‘fio_rdmaio_setup’:
engines/rdma.c:1205: error: too few arguments to function ‘init_rand_seed’
make: *** [engines/rdma.o] Error 1

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agofilesetup: print warning if chosen random generator can't cover range
Jens Axboe [Sat, 30 May 2015 01:40:21 +0000 (19:40 -0600)]
filesetup: print warning if chosen random generator can't cover range

If the file or device is huge, we could have an issue with the
default 32-bit random offset generator in that it wont cover
the entire device. If fio detects this and the random generator
wasn't explicitly set, then log an error and exit.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agorand: add 64-bit tausworthe variant with a 2^258 cycle
Jens Axboe [Fri, 29 May 2015 18:49:54 +0000 (12:49 -0600)]
rand: add 64-bit tausworthe variant with a 2^258 cycle

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd Intel rdrand support
Jens Axboe [Fri, 29 May 2015 16:44:19 +0000 (10:44 -0600)]
Add Intel rdrand support

Not wired up.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agotreat error in addr conversion to string as non-fatal
Ben England [Tue, 26 May 2015 19:12:46 +0000 (15:12 -0400)]
treat error in addr conversion to string as non-fatal

8 years agoembed server address, not other end's address
Ben England [Mon, 25 May 2015 12:26:24 +0000 (08:26 -0400)]
embed server address, not other end's address

8 years agocconv: add allow_mounted_write
Jens Axboe [Fri, 22 May 2015 15:09:49 +0000 (09:09 -0600)]
cconv: add allow_mounted_write

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd 'allow_mounted_write' option
Jens Axboe [Fri, 22 May 2015 03:43:48 +0000 (21:43 -0600)]
Add 'allow_mounted_write' option

If this isn't set, then fio will abort if a job exists that would write
to a mounted device or partition.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd start of mount check
Jens Axboe [Fri, 22 May 2015 03:19:14 +0000 (21:19 -0600)]
Add start of mount check

For raw block devices, lets add some safety check that will check for
destructive tests whether a device is mounted or not. Will plumb this
in soon, and add an override option to continue regardless.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoMerge branch 'req4' of git://github.com/kusumi/fio
Jens Axboe [Sat, 16 May 2015 02:13:58 +0000 (20:13 -0600)]
Merge branch 'req4' of git://github.com/kusumi/fio

8 years agoAdd missing fio_mutex_up() on return
Tomohiro Kusumi [Sat, 16 May 2015 01:10:57 +0000 (10:10 +0900)]
Add missing fio_mutex_up() on return

Call fio_mutex_up() before returning from this function.

8 years agoCleanup DragonFlyBSD support
Tomohiro Kusumi [Sat, 16 May 2015 01:17:14 +0000 (10:17 +0900)]
Cleanup DragonFlyBSD support

Remove these define/undef since fio compiles on DragonFlyBSD
without them.

<sys/rb.h> seems to have never existed in DragonFlyBSD history,
and it compiles without these define/undef. It seems this hack
was necessary on some older versions of NetBSD.

8 years agoChange (blank)cpu affinity macros to inline functions
Tomohiro Kusumi [Thu, 14 May 2015 20:10:05 +0000 (05:10 +0900)]
Change (blank)cpu affinity macros to inline functions

gcc warns -Wunused-value on some environments (e.g. BSD) when
the following cpu affinity macros are used in non conditional code.

Also removed #ifdef FIO_HAVE_CPU_AFFINITY in gettime-thread.c
since this variable needs to be visible when calling the function.

gettime-thread.c: In function 'gtod_thread_main':
os/os.h:82:36: warning: statement with no effect [-Wunused-value]
 #define fio_setaffinity(pid, mask) (0)
                                    ^
gettime-thread.c:48:2: note: in expansion of macro 'fio_setaffinity'
  fio_setaffinity(gettid(), fio_gtod_cpumask);

8 years agostat: add comment on why we need return
Jens Axboe [Thu, 14 May 2015 15:25:10 +0000 (11:25 -0400)]
stat: add comment on why we need return

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix warning from gmake on BSD
Tomohiro Kusumi [Thu, 14 May 2015 00:36:40 +0000 (09:36 +0900)]
Fix warning from gmake on BSD

stat.c: In function 'block_state_category':
stat.c:514:1: warning: control reaches end of non-void function
[-Wreturn-type]
 }

8 years agoAdd 'allow_file_create' option
Jens Axboe [Tue, 12 May 2015 15:31:32 +0000 (11:31 -0400)]
Add 'allow_file_create' option

For running certain jobs, it's convenient to tell fio that you never
want it to create files. On Linux, this prevents filling up /dev
with data for cases where the specified block device isn't available.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd 'per_job_logs' option
Jens Axboe [Mon, 11 May 2015 17:39:36 +0000 (13:39 -0400)]
Add 'per_job_logs' option

If set, this generates bw/clat/iops log with per file private
filenames. If not set, jobs with identical names will share the
log filename. Default: true.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoworkqueue: style cleanup
Jens Axboe [Sun, 10 May 2015 17:16:40 +0000 (11:16 -0600)]
workqueue: style cleanup

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoMerge branch 'master' of ssh://git.kernel.dk/data/git/fio
Jens Axboe [Fri, 8 May 2015 15:21:17 +0000 (09:21 -0600)]
Merge branch 'master' of ssh://git.kernel.dk/data/git/fio

8 years agorandom: document default seed value
Jens Axboe [Fri, 8 May 2015 15:19:25 +0000 (09:19 -0600)]
random: document default seed value

Instead of hard coding this in the source, just set the default
value for the 'randseed' option'. Then it's visible when looked
up through --cmdhelp=randseed.

Also document that randrepeat is on by default in the HOWTO,
only the man page had this information.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFio 2.2.8 fio-2.2.8
Jens Axboe [Fri, 8 May 2015 00:19:25 +0000 (18:19 -0600)]
Fio 2.2.8

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix Windows installer build: LICENSE is now MORAL-LICENSE
Bruce Cran [Thu, 7 May 2015 22:54:37 +0000 (16:54 -0600)]
Fix Windows installer build: LICENSE is now MORAL-LICENSE

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoUse PATH_MAX instead of _POSIX_HOST_NAME_MAX
Jens Axboe [Thu, 7 May 2015 21:33:10 +0000 (15:33 -0600)]
Use PATH_MAX instead of _POSIX_HOST_NAME_MAX

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoREADME: add git:// for github as well
Jens Axboe [Thu, 7 May 2015 21:14:10 +0000 (15:14 -0600)]
README: add git:// for github as well

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix compiler warning and test progs linker errors on Windows
Bruce Cran [Thu, 7 May 2015 20:56:58 +0000 (14:56 -0600)]
Fix compiler warning and test progs linker errors on Windows

Add prototype for ctime_r to os-windows.h to avoid compiler warning.
Link in os/windows/posix.o and lib/hweight.o to allow test progs to
build on Windows.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix keyword replacement leaks
Jens Axboe [Thu, 7 May 2015 20:23:38 +0000 (14:23 -0600)]
Fix keyword replacement leaks

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoMerge branch 'client-hostfile' of git://github.com/bengland2/fio
Jens Axboe [Thu, 7 May 2015 19:46:24 +0000 (13:46 -0600)]
Merge branch 'client-hostfile' of git://github.com/bengland2/fio

8 years agodocument changes to --client syntax and behavior
Ben England [Thu, 7 May 2015 19:33:40 +0000 (15:33 -0400)]
document changes to --client syntax and behavior

8 years agoallow --client parameter to be pathname containing client host IPs/names
Ben England [Thu, 7 May 2015 18:12:05 +0000 (14:12 -0400)]
allow --client parameter to be pathname containing client host IPs/names

8 years agoAdd Windows ctime_r implementation and add empty ioctl.h header
Bruce Cran [Wed, 6 May 2015 22:30:46 +0000 (16:30 -0600)]
Add Windows ctime_r implementation and add empty ioctl.h header

stat.c now uses ctime_r(), so add an implementation for Windows.
It's expected that ioctl.h exists on each platform, even if it's
not used: add an empty file on Windows.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoposixaio: use 'errno' for inline error
Jens Axboe [Thu, 7 May 2015 15:52:35 +0000 (09:52 -0600)]
posixaio: use 'errno' for inline error

aio_error() is only for when aio_*() didn't fail submitting.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoEnsure that set_name_idx() doesn't exceed target bounds
Jens Axboe [Thu, 7 May 2015 14:17:05 +0000 (08:17 -0600)]
Ensure that set_name_idx() doesn't exceed target bounds

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoMerge branch 'multiclnt-sharedfs-try3' of git://github.com/bengland2/fio
Jens Axboe [Thu, 7 May 2015 14:11:15 +0000 (08:11 -0600)]
Merge branch 'multiclnt-sharedfs-try3' of git://github.com/bengland2/fio

8 years agoallow --client to work with shared filesystem
Ben England [Thu, 7 May 2015 13:27:16 +0000 (09:27 -0400)]
allow --client to work with shared filesystem

8 years agoserver: bump version
Jens Axboe [Wed, 6 May 2015 21:21:19 +0000 (15:21 -0600)]
server: bump version

We added fields to the options structure, need a revision bump.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agocconv: add missing conversions of block_error_hist and skip_bad
Jens Axboe [Wed, 6 May 2015 20:20:44 +0000 (14:20 -0600)]
cconv: add missing conversions of block_error_hist and skip_bad

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoblktrace: add support for scaling and aligning replays
Jens Axboe [Wed, 6 May 2015 20:19:20 +0000 (14:19 -0600)]
blktrace: add support for scaling and aligning replays

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd support for options being a power-of-2
Jens Axboe [Wed, 6 May 2015 20:15:35 +0000 (14:15 -0600)]
Add support for options being a power-of-2

Split out the is_power_of_2() from fio.h and make it independent.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoMerge branch 'master' of git://github.com/iuliur/fio
Jens Axboe [Wed, 6 May 2015 18:36:43 +0000 (12:36 -0600)]
Merge branch 'master' of git://github.com/iuliur/fio

8 years agoMake windowsaio match iometer performance. Without this, we see around 60k on local...
Julius Rus [Wed, 6 May 2015 18:30:18 +0000 (11:30 -0700)]
Make windowsaio match iometer performance. Without this, we see around 60k on local flash while iometer does 100k.

8 years agolibmtd: ->name and ->type_str can't be constant
Jens Axboe [Tue, 5 May 2015 18:11:55 +0000 (12:11 -0600)]
libmtd: ->name and ->type_str can't be constant

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoARM: Use generic assembly nop and barrier code for armv8-a
Milton Chiang [Tue, 5 May 2015 09:18:17 +0000 (17:18 +0800)]
ARM: Use generic assembly nop and barrier code for armv8-a

Signed-off-by: Milton Chiang <milton.chiang@mediatek.com>
8 years agoFix Runtime, IOPS, bandwidth recorded incorrectly
Brian Fulton [Mon, 4 May 2015 22:07:10 +0000 (16:07 -0600)]
Fix Runtime, IOPS, bandwidth recorded incorrectly

This happens with small sized timed_based runs. Change runtime
tabulation back to microseconds to handle sub millisecond loops.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agolfsr-test: print total elapsed time correctly
Steven Noonan [Fri, 1 May 2015 19:49:34 +0000 (19:49 +0000)]
lfsr-test: print total elapsed time correctly

The conversion from microseconds to seconds is 1e6 not 1e9.

Signed-off-by: Steven Noonan <steven@uplinklabs.net>
Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agogettime: add support for CLOCK_MONOTONIC_RAW
Steven Noonan [Fri, 1 May 2015 19:31:44 +0000 (12:31 -0700)]
gettime: add support for CLOCK_MONOTONIC_RAW

The clock CLOCK_MONOTONIC_RAW (introduced in Linux 2.6.28) is similar to
CLOCK_MONOTONIC except that it is not subject to NTP adjustments or incremental
adjustments performed by adjtime().

Signed-off-by: Steven Noonan <steven@uplinklabs.net>
Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoblktrace: support for non-512b sector sizes
Jens Axboe [Fri, 1 May 2015 23:02:24 +0000 (17:02 -0600)]
blktrace: support for non-512b sector sizes

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoconfigure: add support for --prefix
Jens Axboe [Wed, 29 Apr 2015 16:29:16 +0000 (10:29 -0600)]
configure: add support for --prefix

Allows other installation paths that /usr/local

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoblktrace: only set O_DIRECT if the min bs is a multiple of 4k
Jens Axboe [Tue, 28 Apr 2015 21:30:02 +0000 (15:30 -0600)]
blktrace: only set O_DIRECT if the min bs is a multiple of 4k

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoAdd recommendation to set direct=0 if first O_DIRECT fails
Jens Axboe [Tue, 28 Apr 2015 21:23:21 +0000 (15:23 -0600)]
Add recommendation to set direct=0 if first O_DIRECT fails

Fio currently tells you:

"fio: first direct IO errored. File system may not support direct IO, or
 iomem_align= is bad."

but it doesn't offer a remedy. Add a suggestion to set direct=0 if this
happens. It can happen because of a badly configured job, or from
blktrace replay because the latter adds direct=1 automatically. But that
may fail, if the trace contains IO that isn't sector aligned.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agodedupe: improve 100% dedupe case
Jens Axboe [Mon, 27 Apr 2015 15:37:11 +0000 (09:37 -0600)]
dedupe: improve 100% dedupe case

We don't need an on-stack state, just juggle the buf_state and
buf_state_prev appropriately.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agodedupe: fix dedupe_percentage=100
Jens Axboe [Mon, 27 Apr 2015 14:38:33 +0000 (08:38 -0600)]
dedupe: fix dedupe_percentage=100

The corner case of 100% dedupable was buggy, save and restore random
state appropriate for that too.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoHOWTO: clarify the 'wait' statement in iologs
Jens Axboe [Fri, 24 Apr 2015 16:45:43 +0000 (10:45 -0600)]
HOWTO: clarify the 'wait' statement in iologs

It's a relative time, not absolute wait.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoio_u: fix bug in rounding of generated buffer length
Jens Axboe [Fri, 24 Apr 2015 16:41:58 +0000 (10:41 -0600)]
io_u: fix bug in rounding of generated buffer length

If the maximum blocksize isn't a multiple of the minimum blocksize,
then fio has a bug where it will round up the block size and align
it to a size larger than the IO buffer we have. This causes random
memory corruption and crashes.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoblktrace: fix bugs in accounting
Jens Axboe [Fri, 24 Apr 2015 15:03:05 +0000 (09:03 -0600)]
blktrace: fix bugs in accounting

We need to clear the trim part of the accounting arrays, otherwise
we can use bogus values leading to attempting to allocate huge
amounts of memory. This causes fio to exit with:

fio: pid=21428, err=12/file:memory.c:242, func=iomem allocation,
error=Cannot allocate memory

Also improve the depth detection, by making it per data direction
instead of a global state.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoMerge branch 'io-threads'
Jens Axboe [Thu, 23 Apr 2015 17:13:27 +0000 (11:13 -0600)]
Merge branch 'io-threads'

8 years agoblktrace: only probe and set depth if option isn't set
Jens Axboe [Thu, 23 Apr 2015 01:54:54 +0000 (19:54 -0600)]
blktrace: only probe and set depth if option isn't set

The comment predates fio's support for checking whether a specific
option was set, we have the power to check this properly now.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoconfigure: check for more of the used MTD features
Jens Axboe [Wed, 22 Apr 2015 19:46:45 +0000 (13:46 -0600)]
configure: check for more of the used MTD features

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix off-by-one in cpus_allowed
Jens Axboe [Tue, 21 Apr 2015 15:39:32 +0000 (09:39 -0600)]
Fix off-by-one in cpus_allowed

Similar to commit b84113993b3a, fix it for cpus_allowed as well.

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoFix off-by-one in cpu mask index handling
Jens Axboe [Tue, 21 Apr 2015 14:25:58 +0000 (08:25 -0600)]
Fix off-by-one in cpu mask index handling

This just affects how errors are printed. Kleber Sacilotto de Souza
reports:

The error message displayed by the option parser for the 'cpus_allowed'
parameter is misleading.

My system has 4 processors:

$ grep -c processor /proc/cpuinfo
4

If I provide a high number for cpus_allowed, I get the error message:

$ fio --filename=/tmp/foo.fio --cpus_allowed=5 --name=job1
fio: CPU 5 too large (max=4)
fio: failed parsing cpus_allowed=5

If it says "(max=4)", I would expect it to accept the value "4" if I
want to use the last CPU of the system (even though we know that the
CPUs are generally numbered starting with 0), but that's not what
happens:

$ fio --name=global --filename=/tmp/foo.fio --cpus_allowed=4 --name=job1
job1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.1.3
Starting 1 process
fio: pid=24942, err=22/file:backend.c:1192, func=cpu_set_affinity, error=Invalid argument

So for setting the affinity the CPU number really starts from 0, so 3
would be the right value in this case and the following command works as
expected:

Signed-off-by: Jens Axboe <axboe@fb.com>
8 years agoDon't export state variable
Dan Ehrenberg [Mon, 20 Apr 2015 23:20:30 +0000 (16:20 -0700)]
Don't export state variable

There was no reason to export this extra variable. It was just a typo
and it is never used.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoFix mtd valgrind warning
Dan Ehrenberg [Thu, 16 Apr 2015 21:50:39 +0000 (14:50 -0700)]
Fix mtd valgrind warning

strlen seems to operate in 32-bit chunks, but libmtd sometimes allocates
strings without that much padding. This patch adds something extra to
a string allocation so that the mtd ioengine is clean with respect
to valgrind memory access checks.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoFix wrong index bug
Jens Axboe [Thu, 16 Apr 2015 03:47:47 +0000 (21:47 -0600)]
Fix wrong index bug

Commit 0e4dd95c548cc re-uses 'i' as an iterator, causing us to
overrun the nr_ts allocated. This subsequently causes fio to
segfault.

Fixes: 0e4dd95c548cc
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoAdd sample job file for fixed submission rate
Jens Axboe [Wed, 15 Apr 2015 16:01:56 +0000 (10:01 -0600)]
Add sample job file for fixed submission rate

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoAdd man page and HOWTO for io_submit_mode option
Jens Axboe [Wed, 15 Apr 2015 15:58:58 +0000 (09:58 -0600)]
Add man page and HOWTO for io_submit_mode option

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agolibaio: don't call io_destroy(), let exit_aio() take care of it
Jens Axboe [Thu, 19 Mar 2015 20:52:54 +0000 (14:52 -0600)]
libaio: don't call io_destroy(), let exit_aio() take care of it

From the exit_aio() path, we can parallellize the freeing, hence
not taking an RCU grace period hit for each.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoFirst cut at supporting IO offload
Jens Axboe [Fri, 20 Mar 2015 04:50:06 +0000 (22:50 -0600)]
First cut at supporting IO offload

rate_iops=x
io_submit_mode=offload

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agobackend: split queue io_u event handling into helper
Jens Axboe [Fri, 20 Mar 2015 04:44:05 +0000 (22:44 -0600)]
backend: split queue io_u event handling into helper

io_queue_event(), can now be used from both verify and IO path.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoAdd ->bytes_done[] to struct thread_data
Jens Axboe [Fri, 20 Mar 2015 04:32:00 +0000 (22:32 -0600)]
Add ->bytes_done[] to struct thread_data

We can't keep it on the stack for async IO offload.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoChange writetrim to trimwrite
Jens Axboe [Wed, 15 Apr 2015 15:49:20 +0000 (09:49 -0600)]
Change writetrim to trimwrite

This better explains what it does. Also add HOWTO and man page entries
for trimwrite.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agomtd: example job file
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:20 +0000 (15:58 -0700)]
mtd: example job file

This job file shows how one can write sequentially to an MTD device,
erase (with trim), and do a looped write/trim workload. Ignoring EIO
errors allows operations to continue as bad blocks are skipped.
The block histogram counts P/E cycles and can be used to assess
NAND flash lifetime and failure characteristics. The job file is
written to work with the nandsim fake NAND device.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agomtd: ioengine
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:19 +0000 (15:58 -0700)]
mtd: ioengine

This patch adds an MTD ioengine. Trims are interpreted as MTD erases.
A skip_bad option calls out to the kernel to ask if the block being
operated on is bad first; if it is bad, the operation is skipped
and -EIO is returned.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agomtd: Import libmtd with modifications to make it compile
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:18 +0000 (15:58 -0700)]
mtd: Import libmtd with modifications to make it compile

This patch imports files from mtdutils to access MTD devices. mtdutils
is licensed as GPLv2, like fio, so it can be included here. Files are
changed slightly in how they import headers so as to be compatible
with the fio directory structure.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agomtd: Add CONFIG_MTD to ./configure script
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:17 +0000 (15:58 -0700)]
mtd: Add CONFIG_MTD to ./configure script

The CONFIG_MTD option will allow the mtd ioengine to be built. It
only works when the Linux MTD header is present.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoCollect a block-wise histogram of trim and write errors
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:16 +0000 (15:58 -0700)]
Collect a block-wise histogram of trim and write errors

This patch collects information on how many trims or writes each trim
block sized unit can undergo before its first error. It also records
the way in which an error occurred, if one did.

Output is provided with a histogram which can be output either in
normal or json output. Terse output is omitted, since it seemed like
that would require a version rev bump.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoAdd new writetrim rw= mode for trims preceding writes
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:15 +0000 (15:58 -0700)]
Add new writetrim rw= mode for trims preceding writes

In this new mode, sequential trims and writes are interspersed by first
doing a trim at a particular offset, then doing writes starting from
that offset until the start of the next trim block, then another trim,
etc. This workload is designed to match the requirements of NAND flash,
if trims are implemented as erases.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoAllow trim on any file type
Dan Ehrenberg [Tue, 14 Apr 2015 22:58:14 +0000 (15:58 -0700)]
Allow trim on any file type

The mtd fio engine will support trim (interpreted as erase). There is
no particular reason to tie trims to block devices, as it is only a
particular ioengine which calls the trim ioctl, not generic code.
This patch simply removes the test which checks that trim is only
run on block devices.

Signed-off-by: Dan Ehrenberg <dehrenberg@chromium.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoFio 2.2.7 fio-2.2.7
Jens Axboe [Wed, 15 Apr 2015 00:08:59 +0000 (18:08 -0600)]
Fio 2.2.7

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoconfigure: update to changes in fusion-aw packaging
Akshita Rajendra Jain [Thu, 9 Apr 2015 14:24:38 +0000 (08:24 -0600)]
configure: update to changes in fusion-aw packaging

Remove a dependency that is no longer used.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agogenzip: switch to jenkins hash
Jens Axboe [Wed, 8 Apr 2015 22:25:49 +0000 (16:25 -0600)]
genzip: switch to jenkins hash

Normal distribution causes a lot of collisions with the normal hash,
for some reason. This speeds it up a lot.

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agoUnify gauss and zipf/pareto input values
Jens Axboe [Wed, 8 Apr 2015 21:49:18 +0000 (15:49 -0600)]
Unify gauss and zipf/pareto input values

Signed-off-by: Jens Axboe <axboe@fb.com>
9 years agogenzip: cleanups
Jens Axboe [Wed, 8 Apr 2015 21:42:20 +0000 (15:42 -0600)]
genzip: cleanups

Signed-off-by: Jens Axboe <axboe@fb.com>