Tomohiro Kusumi [Mon, 13 Mar 2017 18:15:01 +0000 (20:15 +0200)]
Fix errval variable to be positive errno value
The local variable errval is used for strerror(3) which only works
with positive values (i.e. -EXXX doesn't return an expected string).
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 13 Mar 2017 18:15:00 +0000 (20:15 +0200)]
Use ENOTSUP if OS doesn't support blkdev page cache invalidation
The return value of blockdev_invalidate_cache() has been platform
dependent (some pretend success, others return EINVAL) while Linux
is the only one actually supports this via Linux specific ioctl.
This commit makes all the rest return a consistent value ENOTSUP,
so __file_invalidate_cache() prints a blkdev invalidation failure
message that is consistent and makes sense.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 13 Mar 2017 18:14:59 +0000 (20:14 +0200)]
Minor fixup for page cache invalidation debug prints
offset/length is used only for posix_fadvise(2), and each invalidation
method has its own meaning, so use different messages for them.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 13 Mar 2017 18:14:58 +0000 (20:14 +0200)]
HOWTO: Add note/exception on allow_mounted_write=
allow_mounted_write= is useful on Linux, but some platforms
just return some error on open(2) for mounted devices.
# uname
Linux
# mkfs.ext4 /dev/loop0 > /dev/null
mke2fs 1.43.3 (04-Sep-2016)
# mount /dev/loop0 /mnt
# mount | grep /dev/loop0
/dev/loop0 on /mnt type ext4 (rw,relatime,seclabel,data=ordered)
# fio --name=xxxxx --ioengine=sync --rw=write --bs=32k --size=1m --filename=/dev/loop0
xxxxx: (g=0): rw=write, bs=32.0KiB-32.0KiB,32.0KiB-32.0KiB,32.0KiB-32.0KiB, ioengine=sync, iodepth=1
fio-2.18-21-gca205
fio: /dev/loop0 appears mounted, and 'allow_mounted_write' isn't set. Aborting.
Run status group 0 (all jobs):
# fio --name=xxxxx --ioengine=sync --rw=write --bs=32k --size=1m --filename=/dev/loop0 --allow_mounted_write=1 > /dev/null; echo $?
0
# uname
FreeBSD
# newfs /dev/da1 > /dev/null
# mount /dev/da1 /mnt
# mount | grep /dev/da1
/dev/da1 on /mnt (ufs, local)
# fio --name=xxxxx --ioengine=sync --rw=write --bs=32k --size=1m --filename=/dev/da1 --allow_mounted_write=1
fio: this platform does not support process shared mutexes, forcing use of threads. Use the 'thread' option to get rid of this warning.
xxxxx: (g=0): rw=write, bs=32.0KiB-32.0KiB,32.0KiB-32.0KiB,32.0KiB-32.0KiB, ioengine=sync, iodepth=1
fio-2.18-21-gca205
Starting 1 thread
fio: failed opening chardev /dev/da1 for size check
file:filesetup.c:654, func=open(/dev/da1), error=Operation not permitted
fio: pid=0, err=1/file:filesetup.c:654, func=open(/dev/da1), error=Operation not permitted
Run status group 0 (all jobs)
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 13 Mar 2017 18:14:57 +0000 (20:14 +0200)]
Make check_mount_writes() test appropriate device types
There are platforms that use chrdev (instead of blkdev) for block
devices, thus check_mount_writes() needs to test an appropriate file
type(s) for potential mounted devices.
fio has had a macro FIO_HAVE_CHARDEV_SIZE basically for those using
chrdev for block devices, and this macro can be used here as well.
In FreeBSD and several others, blkdev is no longer used as a file type,
so it's safe to only test FIO_TYPE_CHAR if FIO_HAVE_CHARDEV_SIZE is
defined, but this commit leaves FIO_TYPE_BLOCK test since some
platforms may have/use both for block devices (not sure if exist).
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 13 Mar 2017 14:01:52 +0000 (08:01 -0600)]
rbd: don't log version to stdout
This screws up json/csv output for no useful reason.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 13 Mar 2017 03:04:45 +0000 (21:04 -0600)]
Makefile: make test target use thread
Some platforms don't support process shared mutexes. For the basic
Makefile test case, specify threads to avoid the warning.
Signed-off-by: Jens Axboe <axboe@fb.com>
Theodore Ts'o [Sun, 12 Mar 2017 18:50:10 +0000 (12:50 -0600)]
Only enable arm64 CRC32 acceleration if the required header files are there
If the necessary header files are missing, then fio will bomb out when
building on arm64. So disable the hardware acceleration option in
that case, since it's only performance improvement and not a
functional regression to turn it off.
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:08 +0000 (22:13 +0200)]
configure: Make Cygwin take regular configure path
Cygwin (and only Cygwin) has been using customized configure process
by forcing hard-coded "known good options" without going through
regular compile_prog() based configure path. This was necessary due
to difference from other Unix likes, but it could be changed so that
Cygwin at least takes the regular configure path while continue to
use hard-coded configurations. This makes the configure script less
platform specific.
This commit basically gets rid of "exit 0" part from Cygwin case,
which enables Cygwin to go through the regular compile_prog() based
configure path. Removing "exit 0" requires some other small fixes
explained below so that Cygwin outputs consistent results (i.e. don't
ignore hard-coded configurations and lie on outputs).
Also note that this commit does nothing to Linux or other platforms.
It only affects Cygwin or any other platform that wants to override
or ignore regular configure path (i.e. compile_prog() results) in
the future. If there's any specific reason Cygwin has to workaround
the regular configure path, this shouldn't be applied, but there
seems to be no reason not to do so as it compiles and runs on Cygwin.
--
0. Remove "exit 0" in Cygwin case which is the main objective.
1. Change hard-coded output_sym() calls in Cygwin case to use shell
variables that have been used and initialized with "no" in the regular
compile_prog() based configure path.
2. Change the regular compile_prog() based configure path to check
if shell variables have already been initialized with "yes", and
initialize them with "no" only if they haven't been set to "yes",
so that shell variables statically initialized with "yes" in Cygwin
case don't get reset. This does nothing to Linux/etc because they
never preconfigure variables with "yes".
3. Get rid of output_sym "CONFIG_LITTLE_ENDIAN" call in Cygwin case.
This doesn't need to be here as endianness detection isn't anything
specific to Cygwin. Although x86 is the only supported arch, the regular
compile_prog() based configure path can detect it, and if it doesn't
then a compiler is probably broken.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:07 +0000 (22:13 +0200)]
Use union for per file engine private data storage
fio_file::engine_data has been used by i/o engines to either keep
the offset or point to engine specific private data with casts.
This commit changes it to a union consists of void* and uint64_t
so get/set of offset/pointer can be done without casts (which is
a common technique used even within this same struct).
This may break external engines on compile time, but fio generally
doesn't care about breakage on external engines (no guarantees on
api/abi compatibility) anyway.
Also confirmed this compiles with pmemblk enabled.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:06 +0000 (22:13 +0200)]
Define struct file_name as a file local structure
This is just an one-off structure for filesetup.c to walk through
all the files (among all jobs), so it can be file local.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:05 +0000 (22:13 +0200)]
HOWTO: Add some details for invalidate=
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:04 +0000 (22:13 +0200)]
Minor fixup for "Layint out IO file..." message
This is the same as what run_threads() does for threads/processes.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:03 +0000 (22:13 +0200)]
Don't set FIO_FILE_extend when create_on_open= option is set
FIO_FILE_extend gets set and later cleared only when create_on_open=
is disabled (which is default). If create_on_open=1 is set this flag
could be set for the entire runtime, but this flag is basically
designed to be enabled only during setup time.
(If there's no "Layint out IO file..." message, both FIO_FILE_extend
and need_extend probably aren't even needed, as files can be extended
at the moment when these flag/variable are set)
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:02 +0000 (22:13 +0200)]
Fix a function name typo in debug print
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:01 +0000 (22:13 +0200)]
Drop fio_unused attribute from used variable
This is actually used.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:13:00 +0000 (22:13 +0200)]
Remove unassigned fio_unused variable
This doesn't need to exist.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:59 +0000 (22:12 +0200)]
Drop redundant td_rw(td) tests
Since TD_DDIR_READ is 1, TD_DDIR_WRITE is 1<<1, and td_rw() requires
both TD_DDIR_READ/WRITE bits set, testing (td_read(td) || td_rw(td))
turns out to be
if td_read(td) is false, td_rw(td) is always false,
if td_read(td) is true, td_rw(td) won't be tested,
thus the result equals that of td_read(td).
It's the same for td_write(td) as well.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:58 +0000 (22:12 +0200)]
Explicitly check td_trim(td) to detect open(2) flag
This part is a bit complicated due to td's ddir being a bit flag.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:57 +0000 (22:12 +0200)]
Fixup for a minor 0 byte file size case
When a file size calculated by (size / nrfiles) happens to be 0 in
setup_files(), it simply sets ->file_size to ->real_file_size which
means the size is set to the existing file size (if any) or 0.
Add log_info() to show that it's been set that way, and also 0 byte
file isn't likely to be created in the first place. Also add a check
to avoid negative file size.
This usually doesn't happen unless one tries to make it happen by
for e.g. using a small size= and large nrfiles= options.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:56 +0000 (22:12 +0200)]
Fix debug print format of file ->file_name
This should be %s.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:55 +0000 (22:12 +0200)]
Avoid irrelevant "offset extend ends" error message for chrdev
This commit expands
957c81b9 to chrdev as well when char_size()
is configured (i.e. FIO_HAVE_CHARDEV_SIZE disabled) to just return
0 with ->real_file_size set to -1.
Platforms without FIO_HAVE_CHARDEV_SIZE enabled basically means
block devices are blkdev as a file type, so having this change
or not most likely makes no difference. If an I/O engine needs
to use chrdev (e.g. sgio) it usually has its own .get_file_size.
Also add a dprint(FD_FILE) message since ->file_offset is normally
0 at this point regardless of offset option value, despite having
a conditional to check this against ->real_file_size.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:54 +0000 (22:12 +0200)]
configure: Align help messages
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:53 +0000 (22:12 +0200)]
HOWTO: Add platforms without fdatasync(2)
Added DragonFlyBSD which is a fork of FreeBSD.
FreeBSD seems to have fdatasync(2) in their upstream, but not yet
in the latest release version if I checked correctly.
Btw, having "Windows" here sounds a bit ambiguous.
Cygwin with gcc (not MinGW) compiles below taken from ./configure
by linking against POSIX compat dll.
--
$ uname
CYGWIN_NT-10.0
$ cat ./fdatasync1.c
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
return fdatasync(0);
}
$ gcc -Wall -g ./fdatasync1.c ; echo $?
0
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 7 Mar 2017 20:12:52 +0000 (22:12 +0200)]
Add runtime handlers for
97900ebf for FreeBSD/DragonFlyBSD
As
97900ebf itself explains, this is a runtime tunable on FreeBSD
and DragonFlyBSD, so they need to check the sysctl on runtime.
Not sure if OpenBSD has any tunable for this as the original commit
only says about >=5.1, but afaik recent versions of OpenBSD can't
even compile fio anyway. Also not sure how it works on NetBSD, and
the original commit said nothing about it too. Also see below url.
http://www.spinics.net/lists/fio/msg05586.html
http://www.spinics.net/lists/fio/msg05588.html
--
# uname -r
11.0-RELEASE-p1
# cat ./test1.c
#include <stdio.h>
#include "./os/os-freebsd.h"
int main(void) {
printf("%d\n", shm_attach_to_open_removed());
return 0;
}
# clang -Wall -g ./test1.c
# sysctl kern.ipc.shm_allow_removed
kern.ipc.shm_allow_removed: 1
# ./a.out
1
# sysctl kern.ipc.shm_allow_removed=123
kern.ipc.shm_allow_removed: 1 -> 123
# ./a.out
1
# sysctl kern.ipc.shm_allow_removed=0
kern.ipc.shm_allow_removed: 123 -> 0
# ./a.out
0
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 8 Mar 2017 16:13:14 +0000 (09:13 -0700)]
verify: add support for the sha3 variants
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 8 Mar 2017 16:10:03 +0000 (09:10 -0700)]
crc: add support for sha3 variants
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 7 Mar 2017 17:18:53 +0000 (10:18 -0700)]
io_u: don't add slat samples if we are in ramp time
Signed-off-by: Jens Axboe <axboe@fb.com>
Sitsofe Wheeler [Fri, 24 Feb 2017 01:38:18 +0000 (01:38 +0000)]
fio: fix overflow trying to use 'd' suffix
Fix overflow that happened when using the 'd' time suffix on platforms
with 32 bit longs which led to a time of less than 10 minutes being
used.
Jens Axboe [Thu, 23 Feb 2017 15:44:32 +0000 (08:44 -0700)]
Fio 2.18
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 22 Feb 2017 16:00:06 +0000 (09:00 -0700)]
configure: disable compile time asserts for !opt and !static_assert
If we don't have _Static_assert(), disable compile time
assertion checks if optimizations are disabled.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 22 Feb 2017 03:53:48 +0000 (20:53 -0700)]
init: use 'bool' for get_new_job()
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 21 Feb 2017 15:16:21 +0000 (08:16 -0700)]
init: exit on failure to add all jobs
It's too late to set do_exit here, so just exit manually if we
fail adding jobs.
Signed-off-by: Jens Axboe <axboe@fb.com>
Sitsofe Wheeler [Sun, 19 Feb 2017 08:52:28 +0000 (08:52 +0000)]
appveyor: add CI building of the Windows version of fio
Add AppVeyor continuous integration build of the Windows port. This also
builds the Windows installer and the resulting MSI can be downloaded.
Note that AppVeyor limits you to one build at a time.
Tomohiro Kusumi [Sun, 19 Feb 2017 18:24:44 +0000 (20:24 +0200)]
Revert "configure: Drop default CONFIG_LITTLE_ENDIAN for Cygwin"
This reverts commit
d0f2828f6e49613d944a980e018cbfc02901264b
to unbreak on Cygwin.
As mentioned at below, it also needed to remove "exit 0",
but I'd rather like to revert this commit for now since there are
some other small niche to be fixed if we remove "exit 0".
https://github.com/axboe/fio/issues/314
The orginal commit was to get rid of redundant config setup on
endianness on Cygwin, but it turned out many of the unconditional
output_sym() calls in this CYGWIN*) case were done under Cygwin
specific way without going through regular configure procedure
(see "Forcing known good options on Windows" part for details),
although there are some unconditional output_sym() calls that need
to be there (e.g. CONFIG_WINDOWSAIO).
Since fixing endianness alone (by removing "exit 0") doesn't
have much meaning as a whole, it makes more sense to just revert
this for the time being.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 19 Feb 2017 18:22:22 +0000 (20:22 +0200)]
Silence Cygwin warning "'vsprintf_s' redeclared without dllimport..."
Silence a compiler warning which used to didn't show up with some
old version of Cygwin.
ad9c0fbc in 2012 added this, but it seems
this prototype should have been declared by an appropriate header
that's already been included here, so drop this prototype.
It also sounds what this message means according to Google.
Feel free to drop this if this is really needed for some reason.
os/windows/posix.c:43:5: warning: 'vsprintf_s' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
int vsprintf_s(
^
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 19 Feb 2017 18:22:21 +0000 (20:22 +0200)]
Remove irrelevant Cygwin config flag CONFIG_FADVISE
This is unused and nothing happens regardless of this flag being
set on Cygwin. The one for POSIX fadvise is CONFIG_POSIX_FADVISE.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 19 Feb 2017 18:22:20 +0000 (20:22 +0200)]
Add details of file number/size related options to HOWTO
File number/size related options for each job/thread are difficult
to understand without looking at source.
fio(1) hasn't been updated (yet). There's already quite significant
amount of diff between these two, and people are basically only
updating HOWTO.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 19 Feb 2017 18:22:19 +0000 (20:22 +0200)]
Avoid irrelevant "offset extend ends" error message
When ->real_file_size is -1 due to unsupported file type/etc,
"if (f->file_offset > f->real_file_size)" conditional is always true
(unless ->file_offset is also negative which is an another problem),
and results in irrelevant error message. To avoid this, just return
1 without showing the irrelevant error message and then return 1.
It's still possible that char_size() returns with ->real_file_size
set to -1 (though platform dependent), and the irrelevant error
message be shown.
Also this message itself isn't likely to show any relevant info
due to the timing it's been called as mentioned in a comment.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 19 Feb 2017 18:22:18 +0000 (20:22 +0200)]
Rename thread_options' ->io_limit to io_size
This is less confusing since io_size is the option name itself,
and not much reason to use io_limit which is an alias of io_size.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 17 Feb 2017 20:30:43 +0000 (13:30 -0700)]
Revert "Always set ->real_file_size to -1 when failed to get file size"
This reverts commit
34c9f82301a584899a9e65e4b9f56d98c38a52e7.
It breaks a very basic use case, ala:
./fio --ioengine=libaio --rw=randread --numjobs=1 --iodepth=256 --bs=1M --size=10G --direct=1 --filename=/tmp/test100 --name=test
if /tmp/test100 doesn't already exist.
Jens Axboe [Thu, 16 Feb 2017 16:00:08 +0000 (09:00 -0700)]
Merge branch 'travis_osx' of https://github.com/sitsofe/fio
Sitsofe Wheeler [Wed, 15 Feb 2017 18:48:10 +0000 (18:48 +0000)]
travis: add OS X builds
Add two enabled OS X builds (Travis' default OS X and macOS 10.12 with
Xcode 8.2) and one disabled OS X build (OS X 10.11 with the 10.12 SDK
but targeting 10.11).
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Sitsofe Wheeler [Wed, 15 Feb 2017 18:44:48 +0000 (18:44 +0000)]
travis: prepare for additional builds
Prepare the .travis.yml file to accept new builds by making the Linux
OS choice more explicit and protecting some Linux specific steps.
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Sitsofe Wheeler [Mon, 6 Feb 2017 07:00:41 +0000 (07:00 +0000)]
travis: run parallel make jobs
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Sitsofe Wheeler [Sat, 11 Feb 2017 10:05:15 +0000 (10:05 +0000)]
Makefile: add test using the null ioengine
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Tomohiro Kusumi [Wed, 15 Feb 2017 20:40:55 +0000 (22:40 +0200)]
Explicitly check td_trim(td) for the direction of next io_u
This else case should explicitly check td_trim(td) since there is
a potential unused enum (e.g. DDIR_WAIT only used by iolog for now).
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Wed, 15 Feb 2017 20:40:54 +0000 (22:40 +0200)]
Drop obsolete comment on a race condition
which is also mentioned in below posts.
http://www.spinics.net/lists/fio/msg05548.html
http://www.spinics.net/lists/fio/msg05552.html
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 14 Feb 2017 15:19:48 +0000 (17:19 +0200)]
Use 0 instead of DDIR_READ to iterate from 0 to DDIR_RWDIR_CNT
I think this is better since we want to count up DDIR_RWDIR_CNT,
but not specifically (count - something) even if something is 0,
and that's basically what DDIR_RWDIR_CNT is there for to equal
SYNC=3 after READ/WRITE/TRIM in io_ddir.h.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 14 Feb 2017 15:19:46 +0000 (17:19 +0200)]
Add missing "rand"/"trimwrite" strings to corresponding ddir slots
though "rand" alone is unused.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 14 Feb 2017 15:19:45 +0000 (17:19 +0200)]
Always set ->real_file_size to -1 when failed to get file size
In some cases it's set to -1, but on others it's not,
while the existing code (e.g. get_fs_free_counts(), setup_files(), etc)
seem to expect ->real_file_size to be -1 in case of any error.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 14 Feb 2017 15:19:44 +0000 (17:19 +0200)]
Drop conditional declaration of disk_list
disk_list is used unconditionally whether it's Linux or not,
so leave the one in libfio.c, and remove the one in diskutil.c.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 14 Feb 2017 15:19:43 +0000 (17:19 +0200)]
configure: Use x86 instead of i386 for $cpu for IA32
fio internally uses "x86" for any sort of IA32, so use x86 for $cpu
as well which gets printed on ./configure.
This change should have been a part of
e12f4ede in 2016.
# grep i386 . -rI
./arch/arch.h:#if defined(__i386__)
./configure:elif check_define __i386__ ; then
./configure: cpu="i386"
./configure: i386|i486|i586|i686|i86pc|BePC)
./configure: cpu="i386"
./crc/sha1.c:#if defined(__i386__) || defined(__x86_64__)
./crc/xxhash.c:#if defined(__ARM_FEATURE_UNALIGNED) || defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 14 Feb 2017 15:19:42 +0000 (17:19 +0200)]
configure: Drop default CONFIG_LITTLE_ENDIAN for Cygwin
It's a bit strange that Cygwin is assumed to be le by default when
no other platforms have such assumption even if they only target
a single or certain arch (e.g. non-Android Linux often runs on x86,
DragonFlyBSD only runs on x86, and so on..).
Endianness will be detected by pointer arithmetic anyway, and it's
better to rely on it to handle any sort of newly supported archs
in the future.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Rebecca Cran [Thu, 9 Feb 2017 22:17:27 +0000 (22:17 +0000)]
Windows: re-enable the mmap ioengine and fix static asserts
Windows supports mmap functionality via the CreateFileMapping and
MapViewOfFile functions. Update posix.c and re-enable the mmap
ioengine in the Makefile.
Also, enable the built-in static asserts, without which the build
breaks when configured with --disable-optimizations.
Signed-off-by: Jens Axboe <axboe@fb.com>
Rebecca Cran [Tue, 7 Feb 2017 16:13:19 +0000 (09:13 -0700)]
Fix the return type of log_err and log_info functions
Signed-off-by: Jens Axboe <axboe@fb.com>
Rebecca Cran [Mon, 6 Feb 2017 16:17:24 +0000 (16:17 +0000)]
Windows: Update the EULA year and add more examples to the installer
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 13 Feb 2017 19:43:17 +0000 (12:43 -0700)]
gfio: fix git location for fio
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 13 Feb 2017 16:13:43 +0000 (18:13 +0200)]
Be more verbose on endianness detection failure
> I think this deserves and enum. That also enables the compiler to check
> if the below switch covers all the potential values.
Updated with enum ENDIAN_XXX, which you can change the naming if it
doesn't sound good.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sat, 11 Feb 2017 14:28:54 +0000 (16:28 +0200)]
steadystate: Use calloc(3)
which guarantees zero clear.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sat, 11 Feb 2017 14:28:53 +0000 (16:28 +0200)]
Add a comment to clarify
941bda94
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Sitsofe Wheeler [Sat, 11 Feb 2017 09:19:46 +0000 (09:19 +0000)]
configure: try to disable weak linking on OSX
macOS 10.12 introduced support for clock_gettime() but when compiling
with Xcode 8 (or later) and targeting 10.11 (or older) the clock_gettime
symbol is now found at configure/compile time but referenced weakly.
Running the created binary on 10.11 results in a "dyld: lazy symbol
binding failed: Symbol not found: _clock_gettime" error.
This drama has played out across other projects:
- https://github.com/Homebrew/homebrew-core/issues/2674
- https://github.com/curl/curl/issues/1069
- https://svn.filezilla-project.org/filezilla?view=revision&revision=7824OO
- https://github.com/mesonbuild/meson/pull/949
- https://github.com/Homebrew/homebrew-core/issues?utf8=%E2%9C%93&q=label%3Aclock_gettime%20
Options for working around this issue include:
1. Turn references to functions that might be weak into compilation
errors (-Werror=partial-availability).
2. Disable visibility of functions that might be weak at compile link
time (-Wl,-no_weak_imports).
3. Change configure tests to directly check the targeted OSX version and
fail the test if it is too old to have the required function.
4. Make an empty function declaration marked with
__attribute__((weak_import)) that is used if the symbol would
otherwise be unavailable. It is then possible to check if the symbol
is NULL at runtime to determine availability.
This commit does 2. when targeting the Darwin platform after checking if
the compiler/linker work with that option. It also changes the clockid_t
configure test to no longer use clock_gettime() because targeting OSX
10.11 when using the 10.12 SDK results in having the clockid_t typedef
without having the clock_gettime function. The combination of these
fixes should solve https://github.com/axboe/fio/issues/305 .
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Jens Axboe [Tue, 7 Feb 2017 22:11:37 +0000 (15:11 -0700)]
fnv: work with non-64-bit aligned chunks of data
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 7 Feb 2017 22:10:26 +0000 (15:10 -0700)]
bloom: if we're not setting bits, break after first failed mask check
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 7 Feb 2017 16:06:16 +0000 (09:06 -0700)]
init: don't crash server on failure to open output log
We don't use it on the server side anyway.
Signed-off-by: Jens Axboe <axboe@fb.com>
Sitsofe Wheeler [Sat, 4 Feb 2017 09:10:13 +0000 (09:10 +0000)]
doc: minor HOWTO fixes
- Add a note to to size/offset to see the other for constraining I/O to
a range (requested in https://github.com/axboe/fio/issues/298 ).
- Minor grammar and typo fixes.
- Update example fio ETA status to match what modern fio would likely
display.
- Explain f= is open files and note that trim may be displayed.
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Dylan Fairchild [Thu, 2 Feb 2017 18:37:00 +0000 (10:37 -0800)]
fix to replay_align on iolog
previous code was rejecting all positive alignment values and
only accepting align to 0 value, opposite of what it should be doing
Sitsofe Wheeler [Sun, 29 Jan 2017 21:20:08 +0000 (21:20 +0000)]
doc: document profiles, minor fixes
- Add documentation for profile to the HOWTO.
- Explictly document the how parameters that take time are interpreted
when the unit is omitted.
- Add disable_bw_measurement default alias.
- Minor sentence rewording.
- Change max_latency to say it returns ETIMEDOUT rather than ETIME
to match the commit
c5b3adc41e0a91be5c6accdbe6506522ebddfbdd .
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Sitsofe Wheeler [Fri, 27 Jan 2017 09:43:12 +0000 (09:43 +0000)]
doc: minor consistency and spelling changes
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Sitsofe Wheeler [Thu, 26 Jan 2017 17:02:47 +0000 (17:02 +0000)]
doc: minor documentation changes
- Change some parameter types to be time in the HOWTO.
- Put a space before the end of sentence but after links in the README.
- Update the Red Hat fio package information.
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Jens Axboe [Thu, 26 Jan 2017 17:07:48 +0000 (10:07 -0700)]
Merge branch 'shm_rm' of https://github.com/sitsofe/fio
Jens Axboe [Thu, 26 Jan 2017 17:04:40 +0000 (10:04 -0700)]
Merge branch 'sphinx-doc' of https://github.com/termim/fio
Sitsofe Wheeler [Tue, 24 Jan 2017 06:31:58 +0000 (06:31 +0000)]
shm: have os remove shared memory if fio dies unexpectedly
When fio doesn't exit cleanly shared memory segments are left behind on
those platforms where shared memory is supported.
Due to how fio manages shared memory lifetime we can combat the above by
marking the shared memory segment as removed shortly after we attach to
it for the first time if the OS offers both the following (non-standard)
behaviours:
1. A shared memory segment marked for removal with IPC_RMID isn't
destroyed until all processes have detached from it.
2. After 1. has occurred it is still possible to (re)attach to the
marked-for-removal shared memory segment.
Linux has always done the above so enable the workaround there. OpenBSD
switched to having the above behaviours in 5.1 (see shmctl in
https://www.openbsd.org/plus51.html ) so add a comment about it in
os/os-openbsd.h . FreeBSD only has the above behaviours if
kern.ipc.shm_allow_removed (introduced in 5.2) is 1 and this only became
the default in FreeBSD 11
(https://svnweb.freebsd.org/base?view=revision&revision=289112 ) so add
a comment in os/os-freebsd.h . DragonFly also has the FreeBSD flag but
at the time of writing it defaults to 0 so add a comment to
os/os-dragonfly.h .
There's a nice (if dated) post discussing how IPC_RMID behaves on
various OSes in https://www.cygwin.com/ml/cygwin/2007-11/msg00078.html
("Re: cygwin stable and cvs snapshot - fork() bug"). While fio doesn't
support the Cygwin "OS", Cygwin itself has the
kern.ipc.shm_allow_removed option in a config file and defaults it to
no.
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:11 +0000 (00:13 +0900)]
Remove/Move Linux specific sysfs_root field from thread_data
struct thread_data is better without having a Linux specific field
(even if sysfs_root is simply unused on non Linux environment) given
that other Linux specific code such as diskutil/cgroup/blktrace/etc
are compiled only on Linux.
This commit uses td->files[0]->du->sysfs_root instead of td->sysfs_root,
but results the same from the way diskutil is currently implemented.
Besides being platform independent, it's also better in terms of data
structure since sysfs_root isn't always per-td attribute as mentioned
below.
For example, when N(>1) files are specified via filename= option
(e.g. filename=/dev/sdb:/dev/sdc for N=2), td:files is 1:N, therefore
td:du and td:du->sysfs_root are also 1:N in case of /dev/sdb:/dev/sdc,
however td:td->sysfs_root is obviously 1:1 which in this case means
td->sysfs_root is sysfs root for /dev/sdb (regardless of other files)
from the way td->sysfs_root is set only if it hasn't yet been set.
In other words, if filename=/dev/sdb:/dev/sdc is given, ioscheduler=
option only works against /dev/sdb, which could be different from what
users would expect, but this commit just removes sysfs_root from
struct thread_data without any functional change.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:10 +0000 (00:13 +0900)]
Fix bad pointer du->sysfs_root
There are two call paths for disk_util_add() (usually the second one)
which assigns ->sysfs_root for a newly allocated disk_util*, but both
temppath/foo are local char[] within their stack, so strdup/free it.
-> find_add_disk_slaves(...)
-> __init_per_file_disk_util(..., temppath)
-> disk_util_add(..., path)
-> du->sysfs_root = path; /* == &temppath[0] */
-> init_per_file_disk_util(...)
-> __init_per_file_disk_util(..., foo)
-> disk_util_add(..., path)
-> du->sysfs_root = path; /* == &foo[0] */
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:09 +0000 (00:13 +0900)]
Add missing free(td->sysfs_root);
->sysfs_root for td (not du) is always strdup'd.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:08 +0000 (00:13 +0900)]
Remove unused disk_util's name field
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:07 +0000 (00:13 +0900)]
Remove unused io_u's priv union field
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:06 +0000 (00:13 +0900)]
Fix wrong comment on exit condition of threads/processes
74f4b020 in 2013 has changed the exit condition from min to max,
so sync the comment with
74f4b020.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:05 +0000 (00:13 +0900)]
Use ARRAY_SIZE()
They can assume ARRAY_SIZE() is defined and usable as far as fio's
internal code is concerned (i.e. FIO_INTERNAL defined).
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 23 Jan 2017 15:13:04 +0000 (00:13 +0900)]
Define pointer alignment macro in fio.h
Define PTR_ALIGN() as a common utility within the entire fio,
but inside FIO_INTERNAL guard since it could be a common name.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Mikhail Terekhov [Sat, 21 Jan 2017 02:44:56 +0000 (21:44 -0500)]
fix manpage heading issue
Sphinx skips zero level headins when generating manpages.
Increasing sections depth solves missing headers problem.
Tomohiro Kusumi [Fri, 20 Jan 2017 17:46:43 +0000 (02:46 +0900)]
Add missing opt/cat group entries
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 20 Jan 2017 17:46:42 +0000 (02:46 +0900)]
Change .category of cpuio to FIO_OPT_C_ENGINE
This is supposed to be ENGINE instead of GENERAL.
# grep "\.category" engines -rI | grep -v ENGINE
engines/cpu.c: .category = FIO_OPT_C_GENERAL,
engines/cpu.c: .category = FIO_OPT_C_GENERAL,
engines/cpu.c: .category = FIO_OPT_C_GENERAL,
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 20 Jan 2017 05:01:48 +0000 (22:01 -0700)]
Merge branch 'sphinx-doc' of https://github.com/termim/fio
Mikhail Terekhov [Fri, 20 Jan 2017 04:50:11 +0000 (23:50 -0500)]
remove documentation output in clean
Jens Axboe [Fri, 20 Jan 2017 02:50:09 +0000 (19:50 -0700)]
Merge branch 'sphinx-doc' of https://github.com/termim/fio
Mikhail Terekhov [Fri, 20 Jan 2017 02:08:39 +0000 (21:08 -0500)]
ignore documentation output directory
Tomohiro Kusumi [Wed, 18 Jan 2017 17:38:27 +0000 (02:38 +0900)]
Change td_var() to take void* for the first arg
Callers don't always pass thread_options* to td_var(),
nor is it dependent on a certain structure type,
so just take void* without pointless cast.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Wed, 18 Jan 2017 17:38:26 +0000 (02:38 +0900)]
Move options_mem_dupe() to parse.c
This function should be in parse.c with fio_option* argument first.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Wed, 18 Jan 2017 17:38:25 +0000 (02:38 +0900)]
Refactor fio_show_ioengine_help()
Since td is there only to call load_ioengine(),
ioengine ops doesn't need to be refered to as td.io_ops.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Wed, 18 Jan 2017 17:38:24 +0000 (02:38 +0900)]
Fix typo for "job" in plural
It seems this message was meant to be 1 or more "job".
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Wed, 18 Jan 2017 17:38:23 +0000 (02:38 +0900)]
Rename FIO_TYPE_BD to FIO_TYPE_BLOCK
Since character device is FIO_TYPE_CHAR, BLOCK (or BLK) makes
better sense for block device.
This may break external ioengines on compile-time, but ioengines
usually don't refer to file type which are regfile/blk/chr/pipe
(which I believe makes sense to commit this change as there's
been changes that break not only api but also abi).
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 18 Jan 2017 16:51:33 +0000 (09:51 -0700)]
Merge branch 'sphinx-doc' of https://github.com/termim/fio into sphinx
Jens Axboe [Wed, 18 Jan 2017 15:18:28 +0000 (08:18 -0700)]
init: fix double free of pid_file
Signed-off-by: Jens Axboe <axboe@fb.com>
Mikhail Terekhov [Wed, 18 Jan 2017 13:56:35 +0000 (08:56 -0500)]
Revert README and HOWTO files renaming.
github doesn't support Sphinx extencions to ReStructured text format.
Mikhail Terekhov [Wed, 18 Jan 2017 02:01:50 +0000 (21:01 -0500)]
add .rst suffix to README and HOWTO
Mikhail Terekhov [Mon, 26 Dec 2016 03:17:57 +0000 (22:17 -0500)]
Convert documentation to reStructured text.
Reshuffle contents of README and HOWTO
Add some job file examples to HTML docs
Automatically generate fio.1 manpage
Mikhail Terekhov [Mon, 26 Dec 2016 03:13:57 +0000 (22:13 -0500)]
run sphinx-quickstart
Jens Axboe [Tue, 17 Jan 2017 15:51:31 +0000 (08:51 -0700)]
Fio 2.17
Signed-off-by: Jens Axboe <axboe@fb.com>