Jens Axboe [Thu, 23 Aug 2007 07:03:26 +0000 (09:03 +0200)]
blktrace: skip notify traces
Fio will not interpret them correctly, resulting in weird behaviour
(like replaying that seems to hang, but is merely just waiting for a
very long time).
Fixes the issue reported by Joshua Root.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 16 Aug 2007 11:07:46 +0000 (13:07 +0200)]
clat/slat display improvements
If the avg and min are small, we'll display in usec. But that can make
the max hard to read, so convert min/max to strings like we do for
other values.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Wed, 15 Aug 2007 07:32:21 +0000 (09:32 +0200)]
README: correct command line description
You can do anything on the command line, it's not limited.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 14 Aug 2007 11:43:05 +0000 (13:43 +0200)]
splice: automatically detect whether vmsplice-to-user works
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 14 Aug 2007 08:23:44 +0000 (10:23 +0200)]
Fio 1.17
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 10 Aug 2007 12:03:20 +0000 (14:03 +0200)]
Allow upper-case 'X' for hexidecimal in parser
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 10 Aug 2007 11:56:08 +0000 (13:56 +0200)]
Remove verify_pattern option, replace with verify=pattern:x
Integrate the pattern verification with the other verify types,
it's much cleaner that way.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 10 Aug 2007 08:32:14 +0000 (10:32 +0200)]
Mark do_verify and verify_fatal as booleans
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 9 Aug 2007 08:20:54 +0000 (10:20 +0200)]
Add verify_fatal option
Causes fio to exit after a single block verification failure, instead of
checking the remainder as well.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 9 Aug 2007 08:16:31 +0000 (10:16 +0200)]
Improve verify pattern failure logging
Show number of bad bits and block offset.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 2 Aug 2007 20:21:36 +0000 (22:21 +0200)]
Note parent option 'verify' for 'do_verify'
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Thu, 2 Aug 2007 20:19:32 +0000 (22:19 +0200)]
[PATCH] Add do_verify option
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Thu, 2 Aug 2007 20:18:29 +0000 (22:18 +0200)]
Verify the pattern we've written
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Thu, 2 Aug 2007 20:17:52 +0000 (22:17 +0200)]
[PATCH] Fix memswp. Its scratch space was too small
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Thu, 2 Aug 2007 19:05:58 +0000 (21:05 +0200)]
[PATCH] Add verify_meta verification type
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 31 Jul 2007 21:12:16 +0000 (23:12 +0200)]
More option help updates
Rearrange some of the entries, and add more parent <-> child links.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 31 Jul 2007 21:06:09 +0000 (23:06 +0200)]
Be a little more clever in finding child options
We don't need ->parent_seen, just start from the next option.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 31 Jul 2007 20:56:53 +0000 (22:56 +0200)]
Parent options didn't recurse properly
It only displayed the first found. Add a ->parent_seen and
find all matches.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 31 Jul 2007 20:51:47 +0000 (22:51 +0200)]
Add parent option to 'verifysort'
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 31 Jul 2007 14:14:34 +0000 (16:14 +0200)]
Add parent link to options
Then we can nest display for --cmdhelp=all, to tie options
together.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 10:29:37 +0000 (12:29 +0200)]
Update non-linux Makefiles
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 10:27:58 +0000 (12:27 +0200)]
Move checksumming files to seperate directory
Too many of them now, move them out-of-sight. They will rarely
be modified anyway.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 10:23:05 +0000 (12:23 +0200)]
Seperate verify_header from the checksum type
If using one of the leaner checksums, we potentially have almost
128 more bytes of real data in a block.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 10:08:14 +0000 (12:08 +0200)]
Prepare for splitting the verify_header from the checksum header
Some of the checksums carry a lot of data. We unionize the checksum
header right now inside the verify header, causing a lot of wasted
space for the leaner variants.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 08:59:33 +0000 (10:59 +0200)]
Add sha256 and sha512 checksums
That should suffice...
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 08:18:06 +0000 (10:18 +0200)]
Properly initialize md5 hash seed
We started from 0, that's not entirely correct.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 07:50:13 +0000 (09:50 +0200)]
Remove .maxval from verify_pattern
Let the parser handle it.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 07:33:12 +0000 (09:33 +0200)]
Add verify_pattern option
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 07:08:01 +0000 (09:08 +0200)]
Document parser int taking hex input
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 07:07:04 +0000 (09:07 +0200)]
Parser: make check_int() accept hex input if prefixed with 0x
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 30 Jul 2007 06:53:27 +0000 (08:53 +0200)]
Rename header_offset and header_interval options
Header doesn't really express that this has to do with io verification.
So rename the options to verify_offset and verify_interval.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sun, 29 Jul 2007 18:59:01 +0000 (20:59 +0200)]
Fix bug in md5 calculation
Commit
8c432325c3df2075a77b27eab8a87704cf7b48ee introduced a bug for
smaller sizes. Just basically revert the optimization, safer to stay
with a 'reference' implementation than skip a memset.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sun, 29 Jul 2007 06:49:16 +0000 (08:49 +0200)]
Fix md5 verify
The header_interval/offset changes introduced a bug, doing sizeof
on a pointer where it should have been the array. So we didn't compare
the full md5, just the first sizeof(pointer) bytes.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sat, 28 Jul 2007 19:30:31 +0000 (21:30 +0200)]
Fix header_interval minimum value
It doesn't make sense to have a value of header size or less, since
then there's no room for actual data. Fio even crashes with a value
less than the header size.
Lets just make the minimum twice the header size, seems reasonable...
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sat, 28 Jul 2007 19:22:03 +0000 (21:22 +0200)]
Abstract out the data offset calculation
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sat, 28 Jul 2007 19:17:50 +0000 (21:17 +0200)]
Cleanup verify pointer casting
Just make 'p' void *, like io_u->buf.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Sat, 28 Jul 2007 19:11:37 +0000 (21:11 +0200)]
[PATCH] Offset verification header by a user-specified distance
Offset verification header by user specified distance.
- Implementation is somewhat simple and probably not ideal but it works. The
header is just swapped with the bytes at offset after the chunk has been
filled during populate. Everything is swapped back before verify.
- Also fixes a bug where we were relying on a moving pointer for increment
size in populate_verify_io_u (which was working until this patch).
- Also cleans up a couple smalls things from the header_interval patch.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Sat, 28 Jul 2007 19:10:37 +0000 (21:10 +0200)]
[PATCH] Allow verification to be done at finer granularity
Allow verification to be done at a finer granularity than blocksize.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
ljzhang,Yaxin Hu,Jianchao Tang [Fri, 27 Jul 2007 13:54:10 +0000 (15:54 +0200)]
[PATCH] Fix file_size_high
It is generating a size between
[file_size_low, file_size_low+file_size_high]
where it should be
[file_size_low, file_size_high].
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 13:42:00 +0000 (15:42 +0200)]
Show md5 as first verify function
It's probably the best/fastest choice.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 13:36:02 +0000 (15:36 +0200)]
Add crc7 and crc64 to HOWTO
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 13:35:06 +0000 (15:35 +0200)]
Add sample crc64 checksum
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
ljzhang,Yaxin Hu,Jianchao Tang [Fri, 27 Jul 2007 11:28:26 +0000 (13:28 +0200)]
[PATCH] Fix fileoffset option
1. The job file we prepared:
----------offset-----------------
[global]
filename=./temp/HOWTO
nrfiles=1
rw=read
size=8K
offset=16k
bs=1k
thread
loops=10
[offset]
description="Option 'offset' doesn't work."
---------------------------------
Besides, we copied the file HOWTO to the directory ./temp/.
So we thought fio would read 8K text sequentially from the point 16K off
the beginning of HOWTO.
we run fio with gdb to see what was read out after the first io, and we
got this:
---------------------------------
... ...
(gdb) bt
from /lib/tls/i686/cmov/libpthread.so.0
(gdb) x/4w io_u->xfer_buf
0x8073f08: 0x6c626154 0x666f2065 0x6e6f6320
0x746e6574
(gdb)
---------------------------------
The above was performed after the first io finished by td_io_queue.
The contents read out as we can see was the ASCII codes for 'Table of
content', which was right from the beginning of file HOWTO.
That means fio read from the beginning but not the point 16K off the
beginning.Is that right?
2. Reason for the problem:
It seems the offset is saved in td->o.start_offset. But it isn't passed
to f->file_offset.And the setting up of f->io_size doesn't refer to
f->file_offset.
--------------------------------------------------------
And now we can check it with gdb:
--------------------------------------------------------
... ...
(gdb) bt
from /lib/tls/i686/cmov/libpthread.so.0
(gdb) x/4w io_u->xfer_buf
0x8073f08: 0x206b636f 0x7420666f 0x66206568
0x20656c69
(gdb)
---------------------------------------------------------
After the first io, I got '0x206b636f 0x7420666f 0x66206568 0x20656c69'
read out.And they represent the string 'ock of the file '.Then i search
the string in HOWTO and got only one line containing the string:
'norandommap Normally fio will cover every block of the file when doing'
I removed the text following that line in HOWTO, and then I found that
the size of the rest text in HOWTO was 16K, which equaled to the offset
we set in job file.
So I think the option 'offset' does work after the changes.
In fact, I am not sure of the fix, but i do hope it can help.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
ljzhang,Yaxin Hu,Jianchao Tang [Fri, 27 Jul 2007 11:21:28 +0000 (13:21 +0200)]
[PATCH] Fix size given larger than filesize given
1. The mission is defined like this:
----------filesize----------------
[global]
directory=./temp
nrfiles=2
rw=randread
filesize=32k
size=96k
thread
[filesize]
description="Filesize less than size."
----------------------------------
This job file caused another non-stop thread, which was asked to read
96K but only provided two files of 32K each. The running information
kept looking like this:
---------------------------------
nonggia@nonggia-desktop:~/fio$ fio --version
fio 1.16.9
nonggia@nonggia-desktop:~/fio$ fio filesize
filesize: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
Starting 1 thread
Jobs: 1 (f=2): [r] [66.7% done] [ 0/ 0 kb/s] [eta 00m:51s]
---------------------------------
2. The reason:
After having covered both the two files, the thread still had 32K to
issued, while there were already no available files on hand.
I agree that it is far from a bug.Maybe it was the job file that we
should blame. It was wrong written from the beginning.But why not make
it more gentle if we can?
3. Fix suggestion:
So what about change it like this?
Just limit the max td->o.size with the total_size that all the files can
provide.
---------------------------------
diff -Nraup fio-7.25/filesetup.c fio-7.25-filesize/filesetup.c
--- fio-7.25/filesetup.c 2007-07-25 14:25:05.
000000000 +0800
+++ fio-7.25-filesize/filesetup.c 2007-07-27 14:17:39.
000000000 +0800
@@ -414,7 +414,7 @@ int setup_files(struct thread_data *td)
}
}
- if (!td->o.size)
+ if (!td->o.size || td->o.size > total_size)
td->o.size = total_size;
/*
---------------------------------
Now it behaves like this, just finishes as much job as it can and comes
to the end:
---------------------------------
nonggia@nonggia-desktop:~/fio$ ./filesize_fio filesize
filesize: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
Starting 1 thread
filesize: (groupid=0, jobs=1): err= 0: pid=8045
Description : ["Filesize less than size."]
read : io=64KiB, bw=32768KiB/s, iops=8000, runt= 2msec
clat (usec): min= 72, max= 907, avg=167.56, stdev=210.90
cpu : usr=0.00%, sys=0.00%, ctx=1
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=16/0, short=0/0
lat (usec): 100=62.50%, 250=25.00%, 500=6.25%, 1000=6.25%
Run status group 0 (all jobs):
READ: io=64KiB, aggrb=32768KiB/s, minb=32768KiB/s, maxb=32768KiB/s,
mint=2msec, maxt=2msec
Disk stats (read/write):
sda: ios=16/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
nonggia@nonggia-desktop:~/fio$
---------------------------------
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 11:16:24 +0000 (13:16 +0200)]
Speed up md5 hash filling/verifying by 20%
Get rid of the on-stack hash copies, hash directly into the buffer.
We need to 'fix' md5 to just initially clear a/b/c/d in md5_update().
Tested, works, generates same checksums.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 10:59:25 +0000 (12:59 +0200)]
Clean up verify_io_u()
Use a switch statement, like in the pre-io filler.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 10:57:25 +0000 (12:57 +0200)]
Speed up verify fill
It's silly to fill an on-stack header, and then copy it to the io_u.
Just map the pointer to the buffer start.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 07:53:14 +0000 (09:53 +0200)]
Type in crc16 verify failure
Should dump crc16, not crc32.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 07:52:40 +0000 (09:52 +0200)]
Add crc7 verify type
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 27 Jul 2007 07:07:17 +0000 (09:07 +0200)]
Add crc16 verify type
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Fri, 27 Jul 2007 06:02:45 +0000 (08:02 +0200)]
[PATCH] Only verify_io_u on reads
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 26 Jul 2007 11:19:57 +0000 (13:19 +0200)]
Add data integrity example to netio sample job file
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 26 Jul 2007 11:13:49 +0000 (13:13 +0200)]
Missed FIO_UNIDIR io ops flags on net engine
Inadvertenly only set it on the netsplice engine, not net.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 26 Jul 2007 10:22:30 +0000 (12:22 +0200)]
IO verification improvements
- Add a FIO_UNIDIR io ops flag. This like networked IO can't be read/write,
so verify only makes sense for data summed by another writer.
- Allow a read workload to verify previously written data.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 26 Jul 2007 09:55:10 +0000 (11:55 +0200)]
Fix verify random bytes filling
Shawn Lewis <shawnlewis@google.com> reports:
---
verify.c: fill_random_bytes() doesn't work as intended.
drand48 on linux returns a double whose value is evenly distributed between
0.0 and 0.1. This is not the same as having an 8-byte value where each bit
has the same chance of being 0 as it does of being 1.
I'd fix this but it should probably be done in a cross-platformish way and
I'm not quite sure how to do it. Maybe just use smaller randoms? Have an
os_random_uint32?
---
I just got rid of os_random_double() and used os_random_long(),
truncating that to an unsigned integer.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
ljzhang,Yaxin Hu,Jianchao Tang [Thu, 26 Jul 2007 09:00:29 +0000 (11:00 +0200)]
[PATCH] empty result
1. The job file looks like this:
---------runtime------------
[global]
directory=./temp
nrfiles=1
rw=randread
size=32k
thread
[runtime]
description="Too tiny a mission using less than 1sec."
----------------------------
Most of the time,it seems like no io has been performed:
----------------------------
nonggia@nonggia-desktop:~/fio$ fio runtime
runtime: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
Starting 1 thread
runtime: (groupid=0, jobs=1): err= 0: pid=7155
Description : ["Too tiny a mission using less than 1sec."]
cpu : usr=0.00%, sys=0.00%, ctx=1
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=8/0, short=0/0
lat (usec): 100=87.50%, 250=12.50%
Run status group 0 (all jobs):
Disk stats (read/write):
sda: ios=8/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
nonggia@nonggia-desktop:~/fio$
----------------------------
2. Reason for the problem:
It is so tiny a job that it may cost less than one second to finish.And
the runtime is rounded down to 0.Just like the io never happened.
We agree that the problem is really trifle, but for testing purpose, we
think it maybe while the fixing.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
ljzhang,Yaxin Hu,Jianchao Tang [Thu, 26 Jul 2007 08:59:25 +0000 (10:59 +0200)]
[PATCH] non-stop thread
1. The job file causing the problem:
-------------------rw-------------------
[global]
directory=./temp
nrfiles=1
rw=randread:8
norandommap
size=32k
bs=2k
thread
[rw]
description="Offset over real file size."
-----------------------------------------
The job file can keep fio running with the eta increasing and the
progress pausing like this:
----------------------------------------
rw: (g=0): rw=randread, bs=2K-2K/2K-2K, ioengine=sync, iodepth=1
Starting 1 thread
Jobs: 1 (f=1): [r] [92.3% done] [ 0/ 0 kb/s] [eta 00m:01s]]
----------------------------------------
If we force it to stop, it prints like this:
--------------------------------------------
fio: terminating on signal 2
rw: (groupid=0, jobs=1): err= 0: pid=6124
Description : ["Offset over real file size."]
read : io=28KiB, bw=0KiB/s, iops=0, runt= 61900msec
clat (usec): min= 5, max= 436, avg=87.79, stdev=123.71
cpu : usr=2.01%, sys=93.48%, ctx=13644
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=14/0, short=0/0
lat (usec): 10=42.86%, 100=35.71%, 250=7.14%, 500=14.29%
Run status group 0 (all jobs):
READ: io=28KiB, aggrb=0KiB/s, minb=0KiB/s, maxb=0KiB/s,
mint=61900msec, maxt=61900msec
Disk stats (read/write):
sda: ios=8/45, merge=0/40, ticks=4/368, in_queue=372, util=0.27%
--------------------------------------------
>From above we can see an uncompleted job with a io 28KiB less than what
is specified by 'size'.
2. Reason for problem:
After looking into the source codes,We guess the problem comes from the
function get_next_offset().If the io reaches the end of the file, the
function fails, and the file will be marked as DONE.We wonder if that is
the planned behavior.Isn't it very common to reach the file's end when
doing a random io?
3. Fix suggestion:
Here is the patch:
-----------------------------------------------------
diff -Nraup fio-7.25/io_u.c fio-7.25-rw/io_u.c
--- fio-7.25/io_u.c 2007-07-25 14:25:05.
000000000 +0800
+++ fio-7.25-rw/io_u.c 2007-07-26 09:55:22.
000000000 +0800
@@ -162,10 +162,12 @@ static int get_next_offset(struct thread
if (get_next_rand_offset(td, f, ddir, &b))
return 1;
} else {
- if (f->last_pos >= f->real_file_size)
- return 1;
-
- b = f->last_pos / td->o.min_bs[ddir];
+ if (f->last_pos >= f->real_file_size) {
+ if (!td_random(td) || get_next_rand_offset(td, f, ddir, &b))
+ return 1;
+ } else {
+ b = f->last_pos / td->o.min_bs[ddir];
+ }
}
io_u->offset = (b * td->o.min_bs[ddir]) + f->file_offset;
------------------------------------------------------
After applying that, we got the job file run to the end normally:
-------------------------------------------------------
nonggia@nonggia-desktop:~/fio$ ./rw_fio rw
rw: (g=0): rw=randread, bs=2K-2K/2K-2K, ioengine=sync, iodepth=1
Starting 1 thread
rw: (groupid=0, jobs=1): err= 0: pid=6519
Description : ["Offset over real file size."]
read : io=32KiB, bw=1560KiB/s, iops=761, runt= 21msec
clat (usec): min= 5, max=14251, avg=1293.50, stdev=3510.37
cpu : usr=0.00%, sys=19.05%, ctx=7
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=16/0, short=0/0
lat (usec): 10=37.50%, 20=12.50%, 250=12.50%, 750=6.25%, 1000=6.25%
lat (msec): 2=18.75%, 20=6.25%
Run status group 0 (all jobs):
READ: io=32KiB, aggrb=1560KiB/s, minb=1560KiB/s, maxb=1560KiB/s,
mint=21msec, maxt=21msec
Disk stats (read/write):
sda: ios=8/0, merge=0/0, ticks=20/0, in_queue=20, util=13.89%
-------------------------------------------------------
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
ljzhang,Yaxin Hu,Jianchao Tang [Thu, 26 Jul 2007 08:51:46 +0000 (10:51 +0200)]
[PATCH] Random map block coverage
1. The job file causing the problem:
----------cover-------------------
[global]
directory=./temp
nrfiles=1
rw=randread
size=256K
bsrange=4k-16k
thread
[cover]
description="Not covering every block."
-----------------------------------------
According to HOWTO,the job file will makes fio to cover every block of
the 256k file.But running that, we sometimes got a io gross more than
256k:
----------------------------------------
nonggia@nonggia-desktop:~$ fio --version
fio 1.16.9
nonggia@nonggia-desktop:~/fio$ fio cover
cover: (g=0): rw=randread, bs=4K-16K/4K-4K, ioengine=sync, iodepth=1
Starting 1 thread
cover: (groupid=0, jobs=1): err= 0: pid=6969
Description : ["Not covering every block."]
read : io=264KiB, bw=90112KiB/s, iops=7666, runt= 3msec
clat (usec): min= 66, max= 438, avg=151.00, stdev=88.90
cpu : usr=0.00%, sys=133.33%, ctx=0
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=23/0, short=0/0
lat (usec): 100=34.78%, 250=56.52%, 500=8.70%
Run status group 0 (all jobs):
READ: io=264KiB, aggrb=90112KiB/s, minb=90112KiB/s, maxb=90112KiB/s,
mint=3msec, maxt=3msec
Disk stats (read/write):
sda: ios=49/0, merge=0/0, ticks=4/0, in_queue=4, util=2.86%
--------------------------------------------
It seems fio doesn't cover every block.And using gdb we can see it in
detail:
--------------------------------------------
(gdb) where
from /lib/tls/i686/cmov/libpthread.so.0
(gdb) p td->files[0].num_maps
$1 = 2
(gdb) x/2w td->files[0].file_map
0x8073ff0: 0x00000000 0x00000000
(gdb) finish
Run till exit from #0 do_io (td=0xb7bec000) at fio.c:423
thread_main (data=0xb7bec000) at fio.c:875 0 kb/s] [eta 00m:00s]
875 clear_state = 1;
(gdb) x/2w td->files[0].file_map
0x8073ff0: 0xffffeffd 0x7ce2df47
(gdb) c
Continuing.
[Thread -
1212236896 (LWP 7099) exited]
cover: (groupid=0, jobs=1): err= 0: pid=7098
Description : ["Not covering every block."]
read : io=264KiB, bw=7KiB/s, iops=0, runt= 37522msec
clat (usec): min= 67, max= 347, avg=143.28, stdev=67.59
bw (KiB/s) : min= 0, max= 0, per=0.00%, avg= 0.00, stdev= 0.00
cpu : usr=0.00%, sys=0.01%, ctx=13
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=29/0, short=0/0
lat (usec): 100=31.03%, 250=62.07%, 500=6.90%
Run status group 0 (all jobs):
READ: io=264KiB, aggrb=7KiB/s, minb=7KiB/s, maxb=7KiB/s,
mint=37522msec, maxt=37522msec
Disk stats (read/write):
sda: ios=50/23, merge=0/32, ticks=0/160, in_queue=160, util=0.13%
Program exited normally.
--------------------------------------------------
2. Reason for problem:
We think when there is no 'norandommap' in the job file, and no ':int'
appended with 'rw',just like the job file above, fio is meant to use
only the blocks not covered yet.
But it seems in the function mark_random_map(), the condition before
calling random_map_free() will never be satisfied.
3. Fix suggestion:
Here is the patch:
-----------------------------------------------------
diff -Nraup fio-7.25/io_u.c fio-7.25-cover/io_u.c
--- fio-7.25/io_u.c 2007-07-25 14:25:05.
000000000 +0800
+++ fio-7.25-cover/io_u.c 2007-07-25 20:43:58.
000000000 +0800
@@ -55,7 +55,7 @@ static void mark_random_map(struct threa
* If we have a mixed random workload, we may
* encounter blocks we already did IO to.
*/
- if (!td->o.ddir_nr && !random_map_free(td, f, block))
+ if (td->o.ddir_nr==1 && !random_map_free(td, f, block))
break;
idx = RAND_MAP_IDX(td, f, block);
------------------------------------------------------
After that, we check it with gdb:
----------------------------------------------------
(gdb) where
from /lib/tls/i686/cmov/libpthread.so.0
(gdb) p td->files[0].num_maps
$2 = 2
(gdb) x/2w td->files[0].file_map
0x8073ff0: 0x00000000 0x00000000
(gdb) finish
Run till exit from #0 do_io (td=0xb7c48000) at fio.c:423
thread_main (data=0xb7c48000) at fio.c:875 0 kb/s] [eta 00m:00s]
875 clear_state = 1;
(gdb) x/2w td->files[0].file_map
0x8073ff0: 0xffffffff 0xffffffff
(gdb) c
Continuing.
[Thread -
1212073056 (LWP 7443) exited] 5/ 0 kb/s] [eta 00m:00s]
cover: (groupid=0, jobs=1): err= 0: pid=7442
Description : ["Not covering every block."]
read : io=256KiB, bw=5KiB/s, iops=0, runt= 46612msec
clat (usec): min= 62, max= 522, avg=119.50, stdev=88.07
bw (KiB/s) : min= 0, max= 0, per=0.00%, avg= 0.00, stdev= 0.00
cpu : usr=0.00%, sys=0.01%, ctx=11
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,
>=64=0.0%
issued r/w: total=38/0, short=0/0
lat (usec): 100=55.26%, 250=39.47%, 500=2.63%, 750=2.63%
Run status group 0 (all jobs):
READ: io=256KiB, aggrb=5KiB/s, minb=5KiB/s, maxb=5KiB/s,
mint=46612msec, maxt=46612msec
Disk stats (read/write):
sda: ios=64/45, merge=0/62, ticks=8/476, in_queue=484, util=0.19%
Program exited normally.
(gdb)
---------------------------------------------------------
Now we can see the expected '0xffffffff 0xffffffff' and the 'io=256KiB'.
By the way, we tested this both on a 32bit machine and a 64bit one.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 26 Jul 2007 08:47:51 +0000 (10:47 +0200)]
Fix problem with io_u being beyond EOF
Bug report from "ljzhang,Yaxin Hu,Jianchao Tang" <nonggia@sjtu.edu.cn> :
1. The job file causing the problem:
----------ranmap-------------------
[global]
directory=./temp
nrfiles=1
rw=randread
size=64K
bsrange=1k-32k
thread
[ranmap]
description="Over-bounded in mark_random_map()."
-----------------------------------------
Running the job file, we have a high possibility to get a core dump like
this:
----------------------------------------
nonggia@nonggia-desktop:~/fio$ fio --version
fio 1.16.9
nonggia@nonggia-desktop:~/fio$ fio ranmap
ranmap: (g=0): rw=randread, bs=1K-32K/4K-4K, ioengine=sync, iodepth=1
Starting 1 thread
file:io_u.c:64, assert idx < f->num_maps failed
Segmentation fault (core dumped)
nonggia@nonggia-desktop:~/fio$ gdb fio core.6135
... ...
Core was generated by `fio ranmap'.
Program terminated with signal 11, Segmentation fault.
io_u.c:64
64 fio_assert(td, idx < f->num_maps);
(gdb) bt
io_u.c:64
io_u.c:348
io_u.c:588
from /lib/tls/i686/cmov/libpthread.so.0
(gdb) p io_u->offset
$1 = 41984
(gdb) p io_u->buflen
$2 = 27648
(gdb) p io_u->file->real_file_size
$3 = 65536
2. Reason for the core dump:
The io_u->offset+io_u->buflen was too large to be map in the map file.
They just produced an idx out of the file_map's range.
The fix I produced made sure that get_next_buflen() doesn't go
beyond the real file size, by shrinking the buflen.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Thu, 26 Jul 2007 05:36:14 +0000 (07:36 +0200)]
[PATCH] Don't hide pthread_mutex_setpshared in os-linux.h
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Shawn Lewis [Wed, 25 Jul 2007 05:51:58 +0000 (07:51 +0200)]
Fix headers for building with some older libs
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 12:36:16 +0000 (14:36 +0200)]
Add ->done variable to force exit when we know we are done
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 12:36:00 +0000 (14:36 +0200)]
Only do the root warning once per thread
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 12:21:17 +0000 (14:21 +0200)]
Missing carriage return in latency print
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 12:16:55 +0000 (14:16 +0200)]
Only warn once for blktrace log open failure
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 09:26:27 +0000 (11:26 +0200)]
One more fio_ddir fixup
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 09:25:39 +0000 (11:25 +0200)]
ddir is of type enum fio_ddir
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 09:23:26 +0000 (11:23 +0200)]
Remove gotos from read_iolog_get()
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 08:38:43 +0000 (10:38 +0200)]
IO log fixes
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Mon, 23 Jul 2007 06:56:43 +0000 (08:56 +0200)]
Add version 2 of the iolog format
The old format had some short comings - notably not supporting > 1
file workloads. So add a new format that defines adding/open/close
of files. Fio will still load the older format iologs, but the new
ones wont work on older fio versions.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 20 Jul 2007 14:08:28 +0000 (16:08 +0200)]
Fio 1.16.9
Lots of good bug reporting from Erwan Velu, so lets celebrate
those fixes with a new release.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 20 Jul 2007 12:25:31 +0000 (14:25 +0200)]
Set minimum value allowed for some options
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 20 Jul 2007 11:25:04 +0000 (13:25 +0200)]
Fix disk zone test case
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 20 Jul 2007 10:43:05 +0000 (12:43 +0200)]
Mention what the [ xxx / xxx kb/s ] means in the status output
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 20 Jul 2007 10:39:22 +0000 (12:39 +0200)]
Don't align memory unless using raw io
If it's not raw io, we didn't align the buffer size. So we cannot
align.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 19:38:35 +0000 (21:38 +0200)]
Default stdev to 0.0, not -1.0
If we only have a single sample, then the deviation is by definition 0.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 13:08:54 +0000 (15:08 +0200)]
Fio 1.16.8
1.16.7 was rather short lived, as it had a stupid bug for
the ordinary malloc() backed buffers.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 13:06:57 +0000 (15:06 +0200)]
malloc memory still needs to be aligned, if we are doing direct IO
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 12:53:01 +0000 (14:53 +0200)]
Treat option outside of job section as fatal and quit
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 12:50:05 +0000 (14:50 +0200)]
Fix memory overflow bugs
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 12:22:50 +0000 (14:22 +0200)]
Fio 1.16.7
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 12:21:08 +0000 (14:21 +0200)]
Make a note of Mandriva package availability
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 08:17:09 +0000 (10:17 +0200)]
Fix bad alignment in buffer size allocation
We typically end up allocating a block more than we need. Usually
not a problem for normal memory, but when we are dealing with
scarce resources such as hugepages, it can be problematic. For many
threads the memory waste could also be a problem.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 08:09:45 +0000 (10:09 +0200)]
Add clue for ENOMEM hugepage allocation
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 08:01:03 +0000 (10:01 +0200)]
Fix typo in shmhuge commit
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Thu, 19 Jul 2007 08:00:05 +0000 (10:00 +0200)]
Detect and print when the OS doesn't support huge pages
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Wed, 18 Jul 2007 11:51:19 +0000 (13:51 +0200)]
git:// url location change
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 6 Jul 2007 12:24:19 +0000 (14:24 +0200)]
Fio 1.16.6
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 6 Jul 2007 12:09:49 +0000 (14:09 +0200)]
Fix bug with FIO_IO_U_M/U_NR being transposed
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sun, 24 Jun 2007 20:41:27 +0000 (22:41 +0200)]
Guard __must_check ifdef
Some systems seem to pick up the kernel definitions, so check
if __must_check is defined before (potentially) redefining it.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sun, 24 Jun 2007 19:41:46 +0000 (21:41 +0200)]
net engine: cleanup the splice handling
The splice and vmsplice bits were largely duplicated, so abstract
the stuff out so it's clearer to see what is going on.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Sun, 24 Jun 2007 19:28:39 +0000 (21:28 +0200)]
net engine: fix listenfd/pipe fd leaks
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 22 Jun 2007 18:41:27 +0000 (20:41 +0200)]
netsplice: use zero-copy if possible
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 22 Jun 2007 18:40:10 +0000 (20:40 +0200)]
netsplice: fix a few typos
It actually works now.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Fri, 22 Jun 2007 13:42:21 +0000 (15:42 +0200)]
Support for 'netsplice' engine
This IO engine does network transfers, but uses splice() to move data
to/from a socket to a pipe and vmsplice() to move that data to/from
user space.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 19 Jun 2007 12:25:46 +0000 (14:25 +0200)]
guasi engine: remove STFU_GCC()
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 19 Jun 2007 10:49:52 +0000 (12:49 +0200)]
Fio 1.16.5
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 19 Jun 2007 10:48:41 +0000 (12:48 +0200)]
Adaptive io latency distrobution "histogram"
Log ranges all the way down to microseconds, and display the most
appropriate values for those ranges.
This makes the latency usable for sub-milisecond devices as well.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 19 Jun 2007 07:53:31 +0000 (09:53 +0200)]
HOWTO: note that clat/slat can be in micro or mili seconds
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe [Tue, 19 Jun 2007 07:50:28 +0000 (09:50 +0200)]
io_u_mark_depth: just set index, don't fall through
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>