Jens Axboe [Wed, 11 Nov 2015 01:13:40 +0000 (18:13 -0700)]
Fix verification error with bsrange and split read/write phase
If you have separate phases for the verify writes and the verify reads,
and fio ends up having to align to the verify interval header size,
then we can end up trimming the buflen on the read side (where
do_verify=1 is set), but not on the write side. This causes a
verification failure. Fix this by always aligning, regardless of
whether do_verify is true or not.
Example job files:
-------------------------------------------------------------------------------
[global]
thread=1
blocksize_range=4k-256k
ioengine=libaio
verify_interval=512
iodepth=64
loops=1
verify_pattern=0x03715998
size=100MB
offset=0
verify_dump=1
filename=/tmp/disk.img
[write-phase]
rw=randwrite
fill_device=1
do_verify=0
-------------------------------------------------------------------------------
[global]
thread=1
blocksize_range=4k-256k
ioengine=libaio
verify_interval=512
iodepth=64
loops=1
verify_pattern=0x03715998
size=100MB
offset=0
verify_dump=1
filename=/tmp/disk.img
[verify-phase]
stonewall
rw=randread
create_serialize=0
do_verify=1
-------------------------------------------------------------------------------
Reported-by: Kevin Vajk <kmv@datera.io>
Fixes:
a9f70b1f5087 ("Make sure io_u->buflen is aligned to the verify_interval")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 10 Nov 2015 02:38:15 +0000 (19:38 -0700)]
smalloc: get rid of global lock
We don't dynamically add pools anymore, so we don't need global
read/write locks.
Also drop the needless wrappers around pool locking.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 10 Nov 2015 01:45:35 +0000 (18:45 -0700)]
Clarify spread/lambda of poisson
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 9 Nov 2015 23:37:33 +0000 (16:37 -0700)]
Rename rate_poisson to rate_process
This will more accurately follow what other options could adopt,
for instance if we want to do a dynamic IO depth.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 9 Nov 2015 23:05:19 +0000 (16:05 -0700)]
Provide some consistency in rate_* options
ratemin and ratecycle are the only ones without an underscore.
Change them to rate_min and rate_cycle, but retain the old
names as an alias for compat reasons.
Signed-off-by: Jens Axboe <axboe@fb.com>
Song Liu [Mon, 9 Nov 2015 22:32:14 +0000 (14:32 -0800)]
In fio.1 and HOWTO, add link to Poisson process in wikipedia
Signed-off-by: Jens Axboe <axboe@fb.com>
Song Liu [Mon, 9 Nov 2015 22:32:13 +0000 (14:32 -0800)]
add example using --rate_poisson
Signed-off-by: Jens Axboe <axboe@fb.com>
Song Liu [Mon, 9 Nov 2015 22:32:12 +0000 (14:32 -0800)]
make sure __rand_0_1 does not return 0.0
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 9 Nov 2015 22:07:14 +0000 (15:07 -0700)]
Add poisson rate selection to FD_RATE output
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 9 Nov 2015 19:54:37 +0000 (12:54 -0700)]
Fixups for poisson rate
- Change name to poisson_rate, we could add other uses for this
functionality (like depth, etc).
- Add "rate" as option parent.
- Ensure we convert the option for client/server, bump protocol
version.
- Add a separate rand state for poisson, so it becomes randomly
controllable (through randrepeat).
- Add random 0..1 helper.
Signed-off-by: Jens Axboe <axboe@fb.com>
Song Liu [Mon, 9 Nov 2015 19:34:56 +0000 (12:34 -0700)]
Enable request flow under Poisson process
To better mimic real world wordload, where incoming requests follow
Poisson process, this patch enables poisson process request flow
for rate limited benchmarks.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Sun, 8 Nov 2015 00:33:38 +0000 (17:33 -0700)]
smalloc: only clear the bitmap, not the whole pool
This reduces startup time, and the memset() isn't useful nor
needed on the full range.
Signed-off-by: Jens Axboe <axboe@fb.com>
Martin Steigerwald [Sun, 8 Nov 2015 00:30:22 +0000 (17:30 -0700)]
Fix spelling error in engines/rdma.c
> lintian -IE fio_2.2.10-1_amd64.changes
I: fio: spelling-error-in-binary usr/bin/fio
Recieve Receive
Signed-off-by: Jens Axboe <axboe@fb.com>
Vincent Fu [Fri, 6 Nov 2015 15:46:44 +0000 (08:46 -0700)]
Add latency bin output to the json output format
We add a new format for this, json+, as it generates a lot of data.
As of now, the only difference between json and json+ is the full
dump of all latency bins.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 5 Nov 2015 16:05:15 +0000 (09:05 -0700)]
Fio 2.2.11
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Sat, 31 Oct 2015 01:34:21 +0000 (19:34 -0600)]
output_buffer: only realloc once, and memset just what we need
No need looping around a realloc(), just alloc what we need upfront.
Additionally, don't memset the parts we'll be copying into anyway.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 30 Oct 2015 02:52:23 +0000 (11:52 +0900)]
Bump the client ETA timeout from 5s to 30s
5 seconds is low enough that we sometimes falsely trigger the timeout.
It's meant to catch clients that have disappeared, so 5 seconds is
arguably way too low. Bump it to 30 seconds instead.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 28 Oct 2015 05:04:24 +0000 (14:04 +0900)]
Update documentation for mmapshared (MMAP_SHARED)
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 28 Oct 2015 00:29:33 +0000 (09:29 +0900)]
Fixup bw/iops logging for short runs
If an IO loop lasts less than the window for bw or iops logging,
we won't log any entries. Make that persist across loops.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 21:27:41 +0000 (06:27 +0900)]
Merge branch 'mmap_shared' of git://github.com/lsgunth/fio
Logan Gunthorpe [Tue, 27 Oct 2015 16:20:53 +0000 (10:20 -0600)]
Add mmapshared option to use mmaped files with the MAP_SHARED flag.
This is primarily useful for benchmarking DAX files. If they are mmaped
with the MAP_PRIVATE flag they will still have copy on write semantics
and the test will not actually run against the memory that backs the
DAX file. This memory option allows tests to be constructed that use the
MAP_SHARED flag which allows running directly with the memory backed
by a DAX file.
Jens Axboe [Tue, 27 Oct 2015 12:30:40 +0000 (21:30 +0900)]
Fixup -Wshadow warnings
Usually harmless, but some of them we can actually kill
variables.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 09:34:33 +0000 (18:34 +0900)]
client/backend: fix incomplete output_format checks
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 09:33:23 +0000 (18:33 +0900)]
stat: fix potential segfault for json output on network client
Fixes:
b01af66b13f0 ("add eta and elapsed to root of json output")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 09:16:12 +0000 (18:16 +0900)]
stat: collapse buf output flush and free
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 08:44:01 +0000 (17:44 +0900)]
Unbreak output buffer logging over the network
log_local_buf() is for the server to log locally, use
log_info_buf() to log over the specified channel.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 08:43:32 +0000 (17:43 +0900)]
log: abstract out and use generic buffer logger
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 07:47:35 +0000 (16:47 +0900)]
jobs_eta alloc padding
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 07:43:44 +0000 (16:43 +0900)]
Don't setup output buffers we are not going to use
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 07:33:43 +0000 (16:33 +0900)]
Proper size return from output buffers
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 07:25:02 +0000 (16:25 +0900)]
Re-instate --append-terse
This wasn't well documented, but ensure that we don't people's
setup. The new way of doing multiple formats is to add them
to the output format. Which means that this:
fio --append-terse --output-format=normal
is now equivalent to
fio --output-format=normal,terse
Please use the latter.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 05:02:06 +0000 (14:02 +0900)]
Update fio man page
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 27 Oct 2015 04:45:21 +0000 (13:45 +0900)]
Enable the use of multiple output formats
You can now do
./fio --output-format=normal,json jobfile.fio
and get both types of output.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Sun, 25 Oct 2015 02:55:34 +0000 (11:55 +0900)]
Add support for multiple output formats
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 20 Oct 2015 15:07:31 +0000 (09:07 -0600)]
client: remove duplicated code
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 20 Oct 2015 04:37:39 +0000 (22:37 -0600)]
strlcat: fix header guard typo
FIO_STRLCAT_h -> FIO_STRLCAT_H
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 20 Oct 2015 03:53:13 +0000 (21:53 -0600)]
verify: add faster 'memory is all zeroes' helper
Signed-off-by: Jens Axboe <axboe@fb.com>
Jason Dillaman [Tue, 13 Oct 2015 19:40:47 +0000 (15:40 -0400)]
engines/rbd: potential re-use of active fio_rbd_iou
Running multiple concurrent RBD jobs can result in a segfault
attempting to retrieve the RBD AIO completion status from a
prematurely reused fio_rbd_iou object.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Bruce Cran [Tue, 6 Oct 2015 00:18:50 +0000 (18:18 -0600)]
Fix Windows build by using lib/strcasestr.{c,h}
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 1 Oct 2015 06:55:18 +0000 (08:55 +0200)]
server: bump protocol version
Commit
82407585a3b3 added options to the thread_options structures,
so we need to bump the client/server protocol version to signal
we are incompatible with previous versions.
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Sun, 27 Sep 2015 19:24:55 +0000 (21:24 +0200)]
Introduce new option: iodepth_batch_complete_max
By now there is an option which is called 'iodepth_batch_complete'.
This option provides a possibility to read exact amount of events
of completed IOs, e.g. by default it is set to 1, so only 1 event
will be read on each io_getevents system call:
7945 io_getevents(
139876985688064, 1, 1, {...}NULL) = 1
This option can be set to any desired amount, say the whole iodepth
size can be used, e.g. 128:
7952 io_getevents(
140303500259328, 128, 128, {...}NULL) = 128
We will not exit the system call till the whole queue will be completed.
Sounds not so efficient.
In this patch I add the 'iodepth_batch_complete_max' option and rename
'iodepth_batch_complete' to 'iodepth_batch_complete_min' to have a
possibility to specify a range of events which I want to read.
(of course because of compatibility's sake 'iodepth_batch_complete_min'
is an alias for 'iodepth_batch_complete').
So finally if options are set to:
# or iodepth_batch_complete_min=1
iodepth_batch_complete=1
# take the iodepth value
iodepth_batch_complete_max=128
The io_getevents call will look like:
7961 io_getevents(
140173245206528, 1, 128, {...}NULL) = 73
and we will exit the system call with any amount of completed
IOs >= 1.
What are the benefits? Fetching events from the queue can be
done more efficiently on some testing on specific configurations,
e.g. stacked block devices based on null_blk devices, where
completion happens immediately and events should be retried from
the queue ASAP.
Let's take a simple example.
BASE CONFIG:
[global]
fadvise_hint=0
rw=randrw:2
direct=1
size=256M
ioengine=libaio
iodepth=128
time_based=1
runtime=60
ramp_time=10
[job1]
filename=/dev/nullb0
[job2]
filename=/dev/nullb1
[job3]
filename=/dev/nullb2
[job4]
filename=/dev/nullb3
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Sun, 27 Sep 2015 19:24:54 +0000 (21:24 +0200)]
fio.1,HOWTO: keep 'iodepth_batch' option in sync
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Cc: fio@vger.kernel.org
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 30 Sep 2015 16:31:12 +0000 (18:31 +0200)]
sg: fix short reads
We can't assume that if we read some data, we read all of it.
Check for this condition.
Don't error out if a read failed, but we already got valid
events.
Signed-off-by: Jens Axboe <axboe@fb.com>
Kris Davis [Wed, 30 Sep 2015 16:00:00 +0000 (18:00 +0200)]
Use line buffering on stdout
Line Buffer stdio to prevent multi-thread output from
mixing within a line
Signed-off-by: Jens Axboe <axboe@fb.com>
Kris Davis [Wed, 30 Sep 2015 15:57:16 +0000 (17:57 +0200)]
sg: 16-byte cdb support and lots of fixes
-- Fixed prob with queue depths > 1 (usually would work at qd = 2,
but had fundimental prob with retrieving multiple events)
Only works up to QD 16 due to kernel limitation.
-- Fix problem with check and report scsi operation errors.
There was no check, so op errors were being ignored.
Added support to retrieve and print sense data to output.
-- Fix problem with op timeouts. No timeouts op time out was being set.
Hardcoded to 30 seconds.
-- Support switch to 16 Byte operations when LBA range needed.
-- Set default size based on maxlba of device retrieved
from ReadCapacity command.
Updated by Jens to:
- ->errdetails() must be reentrant. Return an allocated buffer, have
the caller free it when done.
- Bump io engine version number, the ops have changed.
- Add strlcat() as a real helper, don't stuff it in sg.c
- Lots of style cleanups
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 25 Sep 2015 02:35:44 +0000 (20:35 -0600)]
Fix integer overflow in rate_iops
For the following job file:
[bla]
rw=randread
bs=1024m
rate_iops=100
We end up overflowing in multiplication, making the bps field 0.
Fio exits by reporting:
rate lower than supported
Fix this by casting to uint64_t, the type of the output.
Signed-off-by: Jens Axboe <axboe@fb.com>
Thomas Findelkind [Thu, 17 Sep 2015 17:42:34 +0000 (19:42 +0200)]
Update fio2gnuplot
Should fix the "No log file..." with default pattern -b and -i and
user generated a log file per thread/numjob with per_numjobs_log=1
Jens Axboe [Wed, 16 Sep 2015 21:43:28 +0000 (15:43 -0600)]
Merge branch 'patch-1' of git://github.com/Tfindelkind/fio
Tfindelkind [Wed, 16 Sep 2015 21:38:12 +0000 (23:38 +0200)]
Update fio2gnuplot
Stephen Bates [Tue, 15 Sep 2015 21:37:53 +0000 (15:37 -0600)]
Reduced minimum for option log_gz
Reduced the permissable minimium for log_sz from 32MB to 1KB to avoid
a latency log issue associated with the reallocation of the buffer logs.
Jens Axboe [Fri, 11 Sep 2015 21:13:37 +0000 (15:13 -0600)]
Fio 2.2.10
Signed-off-by: Jens Axboe <axboe@fb.com>
Andrey Kuzmin [Tue, 8 Sep 2015 15:10:55 +0000 (09:10 -0600)]
workqueue: Ensure submission offload worker inherits parent's options
Properly initialize sibling's eo, as otherwise it will miss parent's
options.
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Sat, 5 Sep 2015 17:01:02 +0000 (19:01 +0200)]
verify: move meta header to generic verify_header
fio does not provide any possibility to verify checksum of a block with meta
information inside. You can create configuration for verifincation checksum
of random data either you can verify meta information with some pattern or
random data, but not both.
Why checksumming and meta together can be useful? Meta helps to figure out internally
on filesystem or storage what block was written in case of corruption, i.e. offset
of the block and block number explicitly tell us the virtual address of the block.
On the other hand checksum of random data helps to detect corruption. Using meta
and pattern together do not help a lot, since 'verify_interval' can be big enough
and same sequence of pattern bytes will be undistinguishable internally on filesystem
or storage.
Also, it seems to me that keeping meta header separately from generic verify header
does not make a lot of sense, since generic verify header can include all members
of meta header without any performance or other impact.
In this patch I move all members from vhdr_meta structure to generic verify_header,
always verifying meta with the possiblity to checksum the following data: random
or pattern.
You are allowed to specify verify_pattern=str with any of the possible verification
methods and have also meta verification, i.e.
verify=md5
verify_pattern=0xfe
or
verify=sha1
verify_pattern=0xff
etc.
To keep everything compatible with old configurations it is still possible to specify
verify=meta
but this option marked and depricated and kept only for compatibility reasons.
Before that patch the verification layout according to the specified options looks
as the following, e.g.:
#1
--
verify=meta
verify_pattern=0xff
--
result layout of each block: [hdr|meta|pattern]
#2
--
verify_pattern=0xff
--
result layout of each block: [hdr|pattern]
#3
--
verify=pattern
verify_pattern=0xff
--
result layout of each block: [pattern]
After applying of the patch 'vhdr_meta' is always embedded into 'verify_header' and layout
looks as the following, e.g.:
#1
--
verify=meta
verify_pattern=0xff
--
result layout of each block: [hdr+meta|pattern]
#2
--
verify=md5|sha1|etc
verify_pattern=0xff
--
result layout of each block: [hdr+meta|cksum|pattern]
#3
--
verify_pattern=0xff
--
result layout of each block: [hdr+meta|pattern]
#4
--
verify=pattern
verify_pattern=0xff
--
result layout of each block: [pattern]
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Cc: fio@vger.kernel.org
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Sat, 5 Sep 2015 17:01:01 +0000 (19:01 +0200)]
fio.1: update description for 'buffer_pattern' and 'verify_pattern'
Now those two support combined input and 'verify_pattern' supports '%o' format.
Update corresponding doc.
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Cc: fio@vger.kernel.org
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Wed, 19 Aug 2015 10:33:11 +0000 (12:33 +0200)]
use 'lib/pattern' to parse patterns and paste formats into buffers
Switch to new 'lib/pattern' helpers.
Now 'buffer_pattern' and 'verify_pattern' options support combined input
and strings like:
buffer_pattern="1234"0xface"5678"
verify_pattern=0xface"1234"-12+14
can be specified.
Also, 'verify_pattern' supports '%o' format, which means that buffer will
be patched on each iteration with real 'block offset' number.
So, f.e. 'verify_pattern' such combined input is valid:
verify_pattern=%o
or
verify_pattern=%o"123"%o
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Wed, 19 Aug 2015 10:33:10 +0000 (12:33 +0200)]
add FIELD_SIZE macro to calculate the size of the specified field
Will use this stuff later.
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Wed, 19 Aug 2015 10:33:09 +0000 (12:33 +0200)]
verify: use 'cmp_pattern' from 'lib/pattern.c' to compare pattern and buffer
'cmp_pattern' function should be faster, since it does not use loops
and while doing 'memcmp' the same CPU cache line is used.
Keep in mind, that now single-byte pattern becomes the string of 512 bytes.
In that case this optimization will not work as expected, since 'memcmp'
will be called twice for the whole pattern, but in next patches this
behaviour will be avoided and single-byte pattern will stay single-byte
pattern without any attempt to duplicate it.
Also print buffer and pattern bytes as unsigned chars.
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Wed, 19 Aug 2015 10:33:08 +0000 (12:33 +0200)]
replace 'fill_pattern' with 'cpy_pattern' from 'lib/pattern.c'
All pattern helpers are now located inside 'lib/pattern.c',
and 'cpy_pattern' should be sligtly faster, since it does
copy doubling the size on every iteration.
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Wed, 19 Aug 2015 10:33:07 +0000 (12:33 +0200)]
lib/pattern: add set of functions to parse combined pattern input
The idea of this patch is to have several helpers to parse combined
pattern input, which can consists of strings, numbers and formats.
For example now pattern can be combined and look like this string:
input : 0xdeadbeef"123"0xdeadface
output: de ad be ef 31 32 33 de ad fa ce
or
input : -99"some string"0x66
output: 9d ff ff ff 73 6f 6d 65 20 73 74 72 69 6e 67 66
or with formats
input : 0xdeadface0xffff%o
output: de ad fa ce ff ff 00 00 00 00 00 00 00 00
where %o - offset of the block, reserved 8 bytes
Space for formats is reserved in output buffer.
When buffer will be ready to be written to disk - 'paste' callback
should be called for each pattern format. Each callback is responsible
for writing data inside the reserved space in the output buffer.
Format array can be extended at any time, all you need is to provide
the name of the format and correct 'paste' callback.
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Roman Pen [Wed, 19 Aug 2015 10:33:06 +0000 (12:33 +0200)]
lib/strntol: add 'strntol' function
In future patches I will need it.
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Ken Raeburn [Fri, 4 Sep 2015 19:30:58 +0000 (13:30 -0600)]
Retry bdev cache invalidation for EAGAIN errors
I've hit a couple test failures where fio quickly died thusly:
fio 2.0.7
Starting 1 thread
fio: pid=6196, err=11/file:filesetup.c:404, func=invalidate_cache, error=Resource temporarily unavailable
(Yeah, we're a little behind. But I think the relevant code is similar.)
We're testing against Linux (RHEL 6.6) multipath block devices, and it
appears that at the time the fio test starts, the multipath maps for
those devices may still be in flux. I poked around a bit with systemtap,
and it appears that while updating the maps, multipathd "suspends" its
multipath device for a few tens of milliseconds, and the kernel
multipath code rejects ioctl calls with EAGAIN if the device is
suspended. It's a small window, but we've managed to hit it multiple
times, though it's not reliably reproducible.
I know the current sources treat failure here as non-fatal, but if we're
using fio for performance tests, trying a little harder to do the
invalidation seems like a good idea. My approach is to add a retry loop
in __file_invalidate_cache; a patch is attached.
It could also be pushed down into blockdev_invalidate_cache, where it
could be local to the Linux (and Android?) implementation, since none of
the others actually do anything. (They return either EAGAIN or zero,
both of which are taken as success indicators.)
Signed-off-by: Jens Axboe <axboe@fb.com>
Andrey Kuzmin [Fri, 4 Sep 2015 19:23:49 +0000 (13:23 -0600)]
backend: fix comparison of 'ret' pointer
Commit
e9d512d8e7d2 abstracted out this code, but the assert()
was never changed.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 21 Aug 2015 18:09:03 +0000 (11:09 -0700)]
Fix aux_path for verify state saving
Botched the string copies.
Fixes:
d264264a08 ("Add --aux-path support"
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 21 Aug 2015 18:01:29 +0000 (11:01 -0700)]
parse: only print option mismatch help, if the distance is close enough
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 20 Aug 2015 19:02:05 +0000 (12:02 -0700)]
Add --aux-path support
For certain files, fio just stores them in the current working
directory. This can create a bit of a mess. These files might
be verification dump files, or verification state saves.
Add --aux-path to enable storing these files in an arbitrary
directory instead.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 20 Aug 2015 18:59:08 +0000 (11:59 -0700)]
README: update for trigger options
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 18 Aug 2015 18:26:00 +0000 (11:26 -0700)]
configure: cleanup strsep() test case
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 18 Aug 2015 18:23:00 +0000 (11:23 -0700)]
configure: fixup using wrong var for endmntent()
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Tue, 18 Aug 2015 17:19:50 +0000 (11:19 -0600)]
Merge branch 'master' of git://github.com/DaveGlen/fio
Dave [Tue, 18 Aug 2015 16:39:11 +0000 (10:39 -0600)]
Correct handleing of rate_iops_min and ratemin
change to allow ratemin to be set without rate disabled ratemin checking in __check_min_rate.
Separate from the change to ratemin parsing, rate_iops_min check did not result in "return 1;" so jobs would not terminate on a failure to maintain rate_iops_min.
Jens Axboe [Mon, 17 Aug 2015 21:47:42 +0000 (15:47 -0600)]
mtd: expand configure check
SLES 11.4 has enough of mtd to pass the configure checks, but not
to compile it. Expand the checks to hopefully be enough.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 17 Aug 2015 21:46:22 +0000 (15:46 -0600)]
gettime: silence bogus gcc warnings
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 17 Aug 2015 21:39:23 +0000 (15:39 -0600)]
Merge branch 'master' of git://github.com/DaveGlen/fio
DaveGlen [Mon, 17 Aug 2015 16:04:09 +0000 (10:04 -0600)]
allow for ratemin to be used without setting rate
Only check if ratemin < rate when rate is set.
Jens Axboe [Fri, 14 Aug 2015 18:25:20 +0000 (12:25 -0600)]
filesetup: make random generator block auto-switch on huge files
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 14 Aug 2015 15:45:46 +0000 (09:45 -0600)]
client: make it explicit that we don't reuse 'eta' after freeing it
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 14 Aug 2015 15:42:55 +0000 (09:42 -0600)]
eta: ensure we include terminating 0 space in je->run_str[]
Signed-off-by: Jens Axboe <axboe@fb.com>
Chandan Rajendra [Tue, 11 Aug 2015 09:41:26 +0000 (15:11 +0530)]
arch-ppc.h: Add ilog2 implementation for ppc64
On a ppc64 machine, when fio is invoked with the following configuration file
(generated by fstests' generic/300 test), it loops indefinitely.
[global]
directory=/mnt/btrfs-xfstest-scratch
filesize=
536870912
size=999G
continue_on_error=write
ignore_error=,ENOSPC
error_dump=0
create_on_open=1
fallocate=none
exitall=1
[direct_aio_raicer]
ioengine=libaio
iodepth=128*1
bs=128k
direct=1
numjobs=4
rw=randwrite
runtime=100*1
time_based
filename=racer
[falloc_raicer]
ioengine=falloc
runtime=100*1
iodepth=1
bssplit=128k/80:512k/10:32k/10
rw=randwrite
numjobs=1
filename=racer
[punch_hole_raicer]
ioengine=falloc
runtime=100*1
bs=4k
time_based=10
rw=randtrim
numjobs=2
filename=racer
time_based
[aio-dio-verifier]
ioengine=libaio
iodepth=128*1
numjobs=1
verify=crc32c-intel
verify_fatal=1
verify_dump=1
verify_backlog=1024
verify_async=4
verifysort=1
direct=1
bs=4k
rw=randwrite
filename=aio-dio-verifier
This is because arch_ffz() ends up invoking the 32-bit version of __ilog2()
which always returns a bit number in the range 0 - 31. This can cause
"overlap" variable in axmap_set_fn() to never becomes zero.
To fix this the commit adds a 64-bit version of __ilog2() (obtained from the
Linux kernel's arch/powerpc/include/asm/bitops.h).
Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 13 Aug 2015 15:31:17 +0000 (09:31 -0600)]
Whitespace fixup
Introduced by commit
50a8ce864e2c.
Signed-off-by: Jens Axboe <axboe@fb.com>
DaveGlen [Mon, 10 Aug 2015 19:39:31 +0000 (13:39 -0600)]
initialize rate_io_issue_bytes
DaveGlen [Mon, 10 Aug 2015 18:47:53 +0000 (12:47 -0600)]
Implement new Rate Control
Current implementation of rate control has the potential for bursts and
stalls when iodepth>1 due to feedback delay while IO is pending. more
description here:
https://docs.google.com/drawings/d/1EG-9eGlNvw-m9m0wMSb_C_lyJcaPlhEFbkHRsVpt4wo/edit?usp=sharing
This commit changes the rate control mechanisms to use feed forward io
issues for rate feedback. Moving the rate control on submissions
instead of completions eliminates feedback delay. More details on the
change here:
https://docs.google.com/drawings/d/1NphdZGjYGuOLWJzvXHv44zuy0nnSunvFrROCVfA67Y8/edit?usp=sharing
Jens Axboe [Wed, 29 Jul 2015 15:00:03 +0000 (09:00 -0600)]
server: make the setsockopt() error output a bit more informative
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 27 Jul 2015 21:10:00 +0000 (15:10 -0600)]
configure: add --disable-optimizations
Sometimes we want to build without optimizations enabled for
debugging issues, make this possible without editing the
Makefile.
Also fixup --disable-shm to not output a symbol until after
we have initialized config-host.*.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 27 Jul 2015 18:29:55 +0000 (12:29 -0600)]
Fix potential divide-by-zero in calc_iops()
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 27 Jul 2015 18:26:12 +0000 (12:26 -0600)]
Fix potential divide-by-zero in calc_rate()
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 27 Jul 2015 18:22:14 +0000 (12:22 -0600)]
configure: make __sync_fetch_and_add() test use 64-bit types
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 27 Jul 2015 18:08:33 +0000 (12:08 -0600)]
libfio: add runstate names
Enables --debug=process to show the actual transitions, instead of
numbers you have to look up in the source:
process 12113 pid=12123: runstate CREATED -> INITIALIZED
instead of
process 12113 pid=12123: runstate 1 -> 2
Signed-off-by: Jens Axboe <axboe@fb.com>
Dave [Thu, 16 Jul 2015 20:56:00 +0000 (14:56 -0600)]
Re-seed random generator correctly between loops
re-seeding random generator in this way means that random patterns will
precisely repeat between iterations. if rand_repeatable is set, this is
desirable, otherwise it may produce unexpected IO patterns in random IO
testing.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 15 Jul 2015 14:43:03 +0000 (08:43 -0600)]
README: no delay on sync to backup git hosts anymore
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 13 Jul 2015 20:33:19 +0000 (14:33 -0600)]
HOWTO: spelling error
Another auto-sync test.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 13 Jul 2015 20:30:03 +0000 (14:30 -0600)]
HOWTO: fix long line
Testing to see if the inline mirroring works.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 13 Jul 2015 18:41:51 +0000 (12:41 -0600)]
Update README for DragonFly
Signed-off-by: Jens Axboe <axboe@fb.com>
Logan Gunthorpe [Fri, 10 Jul 2015 18:23:55 +0000 (12:23 -0600)]
RDMA engine server mode flow fix ups.
When running fio in RDMA server mode, the user just sees an ever
increasing ETA line. Which is rather uninfromative. This patch
adds a waiting for connection message and sets the thread to SETTING_UP
while waiting.
Then when the server is running the ETA is disabled. (The RDMA server
has no access to progress information.)
Logan Gunthorpe [Fri, 10 Jul 2015 17:54:25 +0000 (11:54 -0600)]
Error when the block size on the RDMA server is less than the client
When running an rdma client with a block size set less than
the block size set on the server, currently the code crashes.
This patch has the two sides exchange max_bs values and errors
out gracefully if the server side is too small.
Jens Axboe [Fri, 10 Jul 2015 15:27:02 +0000 (09:27 -0600)]
buffer: only set refill_buffers, it it wasn't set manually
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Fri, 10 Jul 2015 15:11:26 +0000 (09:11 -0600)]
Make td flags be shifts
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 9 Jul 2015 19:13:43 +0000 (13:13 -0600)]
verify: fix bad 'from_verify' setting in do_io()
Signed-off-by: Jens Axboe <axboe@fb.com>
Jeremy Fitzhardinge [Wed, 8 Jul 2015 20:50:35 +0000 (13:50 -0700)]
configure: don't be so eager to overwrite an existing Makefile
Jeremy Fitzhardinge [Wed, 8 Jul 2015 20:27:35 +0000 (13:27 -0700)]
fio: allow for build in separate build directory
Change configure so that it will use its current directory for building,
and the path to the script itself as the source directory.
Change the Makefile to use VPATH to find the source files. Only a few other
things needed to be touched:
- use the full path to the source in wildcard, then strip it off again
- search both build and source for header files
- FIO-VERSION-GEN is in source
- make directories in build as needed
- use $< to refer to input files
- install non-executables from source
Signed-off-by: Jeremy Fitzhardinge <jeremy@exablox.com>
Jens Axboe [Fri, 3 Jul 2015 20:26:08 +0000 (14:26 -0600)]
t/debug: fix 'fio_debug' declaration
debug.h:38:22: warning: type of ‘fio_debug’ does not match original declaration
extern unsigned long fio_debug;
^
t/debug.c:5:14: note: previously declared here
unsigned int fio_debug = 0;
Signed-off-by: Jens Axboe <axboe@fb.com>