Jens Axboe [Mon, 5 Jun 2017 20:05:43 +0000 (14:05 -0600)]
stat: correct json 'io_bytes' output
Since the dawn of time, this has outputted kilobytes, not bytes.
Correct this oversight, and also add a 'io_kbytes' key that shows
the old output.
Fixes: 378
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Jens Axboe [Mon, 5 Jun 2017 16:54:04 +0000 (10:54 -0600)]
Merge branch 'more-minimal-info-in-docs' of https://github.com/ianchakeres/fio
Ian Chakeres [Mon, 5 Jun 2017 16:02:06 +0000 (09:02 -0700)]
Added information about minimal output to documentation
Specifically, add a single line that contains a single word short-name for each of the fields included in the terse minimal output.
This information can be used in conjunction with minimal output to more easily identify which results are associated with which field.
Jens Axboe [Mon, 5 Jun 2017 15:36:23 +0000 (09:36 -0600)]
Merge branch 'master' of https://github.com/cbwest3/fio
Brantley West [Tue, 16 May 2017 21:10:05 +0000 (17:10 -0400)]
allow a percent value for the offset parameter
Jens Axboe [Mon, 5 Jun 2017 15:26:56 +0000 (09:26 -0600)]
Merge branch 'size_perc' of https://github.com/sitsofe/fio
Sitsofe Wheeler [Sun, 4 Jun 2017 07:22:08 +0000 (08:22 +0100)]
filesetup: fix size percentage calculations when using offset
"When an fio job uses a non-zero offset value and a non-zero size
parameter, the working set size on disk is skewed. For a 64k file, the
job provided touches the following blocks:
dd if=/dev/zero of=/tmp/fiofile bs=64k count=1
fio --stonewall --filename=/tmp/fiofile --rw=write \
--name=firstquarter --size=25% --offset=0 --buffer_pattern=0x11 \
--name=secondquarter --size=25% --offset=16k --buffer_pattern=0x22 \
--name=thirdquarter --size=25% --offset=32k --buffer_pattern=0x33
|
1111111111111111|
222222222222----|
33333333--------|----------------|
0 16k 32k 48k 64k
1=written by firstquarter, 2=written by secondquarter, 3=written by
thirdquarter
It seems the expected vs. actual math on working set size is
(size_param_percent * size_of_file) vs.
(size_param_percent * (size_of_file - offset))."
Fix this by always calculating the percentage of the full file's size.
Also bound the I/O to be within the existing file's size when using a
size percentage to handle the case where the addition of an offset would
otherwise force I/O to go beyond the existing file size e.g.:
dd if=/dev/zero of=/tmp/fiofile bs=64k count=1
fio --stonewall --filename=/tmp/fiofile --rw=write \
--name=beyond --size=100% --offset=32k --buffer_pattern=0x11
In the above, we ensure we only do 32k of I/O (rather than the 64k
implied by size=100%).
Fixes: https://github.com/axboe/fio/issues/377 ("Non-zero offset and
non-zero size skew disk working set size")
Reported-by: Brantley West <cbwest@gmail.com>
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Tomohiro Kusumi [Fri, 2 Jun 2017 19:21:27 +0000 (22:21 +0300)]
use correct syscall name in log_err()
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 2 Jun 2017 19:21:26 +0000 (22:21 +0300)]
use true/false for bool type
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 26 May 2017 19:25:11 +0000 (22:25 +0300)]
manpage: update URL links to HOWTO/README
Web frontend of the official git repository seems to have been changed
after
9040e236 (manpage: Add URL links to HOWTO/README).
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 26 May 2017 19:25:10 +0000 (22:25 +0300)]
verify: mention some default option values
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 26 May 2017 19:25:09 +0000 (22:25 +0300)]
verify: add missing free(ptr);
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 24 May 2017 16:21:27 +0000 (10:21 -0600)]
lib/output_buffer: harden buf_output_free() and kill buf_output_clear()
The clear is superfluous. Kill the caller and the function.
Ensure that we leave the output buffer in a sane state, once
buf_output_free() has been called on it.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 24 May 2017 16:15:20 +0000 (10:15 -0600)]
log: unify the logging handlers
Just provide one handler that does the va args and buffer
printing/allocation, and make the rest of them use that.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 24 May 2017 03:51:59 +0000 (21:51 -0600)]
log: ensure we don't truncate the final '\0' in the log
Fixes:
7d64aa48 ("log: make the logging functions handle > 1024 bytes correctly")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 24 May 2017 03:45:31 +0000 (21:45 -0600)]
log: make the logging functions handle > 1024 bytes correctly
We simply truncate the output if it's larger than our static
buffer. Make it dynamically allocated instead, and ensure that
we loop correctly to handle the full amount asked for.
This fixes a problem with truncated output. One example is
json output, with file names (for multiple files) that are
larger than 1024 bytes. With the truncated output, we would
truncate the file name and hence also miss the terminating
'"'. The latter means the json was no longer valid, either.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 24 May 2017 03:43:44 +0000 (21:43 -0600)]
log: make log_buf() return how much it wrote
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:44:49 +0000 (21:44 +0300)]
Move Linux/ppc64 specific cpu_online() to os/os-linux.h
cpu_online() implementation for ppc64 added to os/os.h by
c5dd5d97
(powerpc: fix cpus_online() to get correct max CPU number for powerpc64)
seems Linux specific, thus it should be moved to os/os-linux.h.
For example, non standard sysconf values _SC_NPROCESSORS_ONLN and
_SC_NPROCESSORS_CONF do the same thing with libc in FreeBSD, whereas
they aren't always the same with glibc. This implies
c5dd5d97 is about
Linux, and wouldn't be a general solution that needs to be in os/os.h.
sysconf(3) in FreeBSD
https://github.com/freebsd/freebsd/blob/master/lib/libc/gen/sysconf.c#L588
Another possibility is AIX in addition to Linux, but below website
has an example of both _SC_NPROCESSORS_ONLN and _SC_NPROCESSORS_CONF
having the same value under SMT.
Topic: prtconf and sysconf produce different numbers of processors
https://www.ibm.com/developerworks/community/forums/html/topic?id=
77777777-0000-0000-0000-
000014250083
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:44:48 +0000 (21:44 +0300)]
Include sg headers in os/os-linux.h
Since sg is Linux kernel's SCSI subsystem specific interface, it's
better to include required headers in os/os-linux.h which also defines
FIO_HAVE_SGIO, rather than conditionally including them in os/os.h.
Android has FIO_HAVE_SGIO disabled, so no need to do this for Android.
Even if another platform implements sg (compatible) ioctls within
their SCSI driver, there is no guarantee the required kernel header
will be "linux/fs.h", which then fails to compile.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:44:47 +0000 (21:44 +0300)]
Drop circular dependency in log.c and lib/output_buffer.c
Two files log.c and lib/output_buffer.c have dependency on each other,
i.e. log.c is using buf_output_add() in lib/output_buffer.c, while
lib/output_buffer.c is using log_info_buf() in log.c.
This commit removes this dependency from lib/output_buffer.c by
dropping log_info_buf() call from a library function buf_output_flush(),
and then as a result rename buf_output_flush() to buf_output_clear()
since it's no longer flusing anything. log_info_buf() is now called
independently by __show_run_stats() which was the only caller of
buf_output_flush().
log_info_buf() returning 0 on !len is necessary to keep this commit
without making functional difference. dprint()/log_info() basically
never pass NULL or "" to log_info_buf(), but __show_run_stats() would
pass NULL with length 0 for unused output modes which then needs to
be avoided as a special case.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:44:46 +0000 (21:44 +0300)]
Drop struct thread_data dependency from os headers
Since os/os.h is included by fio.h before other functions/structures
are even defined, it's better for os/os*.h not to have dependency on
those (in this case it's struct thread_data and duplicated td_fill_
rand_seeds() prototypes) unless really needed. os/os*.h are basically
collections of small wrappers over syscalls/etc whose idea is similar
but with difference interface among supported platforms, thus they
normally don't need to have dependency on fio functions/structures,
and in fact they're normally designed that way.
This commit gets rid of struct thread_data argument from an inlined
function init_random_state(), which was needed only to call another
function td_fill_rand_seeds(td). This can simply be called from
setup_random_seeds() after init_random_state() without making any
functional difference. Also rename init_random_state() to
init_random_seeds() as it only initializes random seeds now.
With this commit, struct thread_data is completely gone from os/.
struct fio_file is still there, but this is needed by Windows where
the idea of fd differs from unix like in general.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:44:45 +0000 (21:44 +0300)]
Move {is,load}_blktrace() to a new header blktrace.h
This commit does exactly the same as what cgroup.h does for cgroup
support.
Since blktrace is Linux specific feature and api compiled only on
Linux and Android, these two could be defined in blktrace.h rather
than in os/os.h which is basically intended to be something generic
whose implementation vary depending on supported platforms.
The reason for adding a new header blktrace.h instead of using
blktrace_api.h is because blktrace_api.h seems to have been added
for blktrace.c to include which gets compiled only on Linux where
blktrace apis are basically guaranteed to exist (unless really old
kernels), whereas these prototypes or inline functions are needed
by all platforms.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:43:58 +0000 (21:43 +0300)]
configure: Add print_config() for "<config>... <yes|no>" outputs
Hide alignment detail (30 spaces between two columns) from callers.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 23 May 2017 18:43:57 +0000 (21:43 +0300)]
configure: Use single square brackets (POSIX)
Avoid "if [[...]]" format which seems to be bash extension.
The script uses "if [...]" except for this one.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 24 May 2017 01:59:28 +0000 (19:59 -0600)]
Revert "Fixed json_print_value so that ending double quote of JSON string value will not disappear"
This reverts commit
002e57665ed7eebe920de6f1729ef2e403b7c6cc.
This commit breaks client/server with json output, since buf == NULL
for that case.
Jens Axboe [Mon, 22 May 2017 16:23:25 +0000 (10:23 -0600)]
Merge branch 'bugfix' of https://github.com/YukiKita/fio
Jens Axboe [Mon, 22 May 2017 16:22:46 +0000 (10:22 -0600)]
Merge branch 'android_cgroup' of https://github.com/omor1/fio
Jens Axboe [Mon, 22 May 2017 16:18:15 +0000 (10:18 -0600)]
Merge branch 'alignment' of https://github.com/sitsofe/fio
Commit
dbf285f75b4a ("fio: fix some struct alignment issues")
modified some structs we pass over the wire, so we need to
bump the protocol version.
Sitsofe Wheeler [Mon, 22 May 2017 16:14:14 +0000 (17:14 +0100)]
server: bump protocol version
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Sitsofe Wheeler [Sat, 20 May 2017 17:41:35 +0000 (18:41 +0100)]
fio: fix some struct alignment issues
Fix unaligned/misaligned accesses related to struct thread_stat and
struct jobs_eta seen when running a build produced by
CC=~/clang-3.9/build/bin/clang ./configure --disable-optimizations \
--extra-cflags="-D__compiler_offsetof=__builtin_offsetof \
-fsanitize=undefined"
and add to the compile time asserts to make these problems more visible.
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Jens Axboe [Mon, 22 May 2017 14:52:58 +0000 (08:52 -0600)]
Fix typo in man page / HOWTO for block size defaults
One 'writes' should be 'trims', same error in both places.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Mon, 22 May 2017 14:44:29 +0000 (08:44 -0600)]
Merge branch 'alignment' of https://github.com/omor1/fio
Jens Axboe [Mon, 22 May 2017 14:43:38 +0000 (08:43 -0600)]
Merge branch 'android-26-shm' of https://github.com/omor1/fio
Omri Mor [Mon, 22 May 2017 07:13:10 +0000 (00:13 -0700)]
os/os-android.h: fix compilation for Android O
Signed-off-by: Omri Mor <omor1@asu.edu>
Omri Mor [Mon, 22 May 2017 05:17:08 +0000 (22:17 -0700)]
os/os-android.h: fix alignment problems in shared memory functions
Fixes: #356 ("Android: SIGBUS due to unaligned access")
Signed-off-by: Omri Mor <omor1@asu.edu>
Omri Mor [Mon, 22 May 2017 00:43:01 +0000 (17:43 -0700)]
configure: fix _Static_assert check
Signed-off-by: Omri Mor <omor1@asu.edu>
Omri Mor [Sat, 20 May 2017 09:09:45 +0000 (02:09 -0700)]
Android: add support for cgroups
Signed-off-by: Omri Mor <omor1@asu.edu>
Omri Mor [Sat, 20 May 2017 08:55:34 +0000 (01:55 -0700)]
flist.h: replace offsetof macros by stddef.h include
Signed-off-by: Omri Mor <omor1@asu.edu>
Jens Axboe [Fri, 19 May 2017 14:25:27 +0000 (08:25 -0600)]
Fio 2.20
Signed-off-by: Jens Axboe <axboe@fb.com>
Andreas Herrmann [Fri, 19 May 2017 14:09:27 +0000 (16:09 +0200)]
stat: Re-add output of basic bw information if bw_log is not written
Starting with
9e4438f ("stat: don't trust per_unit_log() if log is
NULL") fio no longer provides basic bw information (e.g. min, max,
p_agg, mean, stdev) when write_bw_log is not used. Thus you have to
write a bw_log to obtain these values. (But in this case you can
compute those values yourself.) I think this doesn't make sense. Not
writing entire bw log shouldn't prevent general sampling and
calculation of bw stats.
This patch reactivates sampling for bw and iops to be able to
calculate basic stats for both independend of writing of entire
{bw,iops}_logs.
Also check for log that is really of interest in __add_samples() it
doesn't make sense to check for bw_log if iops information needs to be
written.
Signed-off-by: Andreas Herrmann <aherrmann@suse.com>
Fixes:
9e4438f ("stat: don't trust per_unit_log() if log is NULL")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 18 May 2017 18:53:38 +0000 (12:53 -0600)]
Remove leftover warnings
Previous commit that fixed up the preadv2/pwritev2 wrappers
left some debug #warning in there by accident. Kill them.
Fixes:
7b5c648f6a5c ("Fix wrap issue with 64-bit pwritev2/preadv2")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 18 May 2017 17:59:09 +0000 (11:59 -0600)]
Fix wrap issue with 64-bit pwritev2/preadv2
Apparently I missed that Linux does a clever trick to optimize
how we pass in lo/hi offsets for 64-bit, and it encodes the
full offset in just the low part. This caused corruption when
writing with pwritev2 for laver sizes, and bad data for preadv2
for larger sizes.
Signed-off-by: Jens Axboe <axboe@fb.com>
YukiKita [Wed, 17 May 2017 00:05:29 +0000 (09:05 +0900)]
Fixed json_print_value so that ending double quote of JSON string value will not disappear
Jens Axboe [Wed, 10 May 2017 03:08:12 +0000 (21:08 -0600)]
man page: include reference to version 4 of the terse format
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Thu, 4 May 2017 14:43:27 +0000 (08:43 -0600)]
options: force refill_buffers with pattern and any reads
This will cause writes to always refill the buffer, which is needed
to avoid having the reads garble the contents.
Signed-off-by: Jens Axboe <axboe@fb.com>
Vincent Fu [Sun, 16 Apr 2017 19:04:28 +0000 (15:04 -0400)]
gettime: make utime_since_now and mtime_since_now consistent in how they record the caller and put this all behind FIO_DEBUG_TIME
Signed-off-by: Jens Axboe <axboe@fb.com>
Vincent Fu [Sun, 16 Apr 2017 19:04:27 +0000 (15:04 -0400)]
client/server: make sure that all elements in io_u_lat_m[] are transferred and received
FIO_IO_U_LAT_U_NR is 10 whereas FIO_IO_U_LAT_M_NR is 12. So we must iterate
over io_u_lat_u and io_u_lat_m separately.
Signed-off-by: Jens Axboe <axboe@fb.com>
Vincent Fu [Sun, 16 Apr 2017 19:04:26 +0000 (15:04 -0400)]
stat: reset_io_stats: fix a problem, rearrange some code
1) Make sure all the io_u_lat_u/m are reset
2) Only need to zero out total_submit/complete once
3) Reset total/short/drop_io_u inside the other loop that iterates over data directions
Signed-off-by: Jens Axboe <axboe@fb.com>
Vincent Fu [Sun, 16 Apr 2017 19:04:24 +0000 (15:04 -0400)]
Revert "tools/fio_latency2csv.py: add tool that converts json+ to CSV"
This reverts commit
6cd4d583c75042bf1edd3d2d5c6626883755bfe4.
The script is no longer needed because the json+ output format now
automatically does the transformation carried out by the script.
Signed-off-by: Jens Axboe <axboe@fb.com>
Vincent Fu [Sun, 16 Apr 2017 19:04:23 +0000 (15:04 -0400)]
stat: change json+ output format so that instead of printing the raw clat data structure, use actual durations instead of array indices and print only bins with nonzero counts
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 3 May 2017 14:14:09 +0000 (08:14 -0600)]
Merge branch 'wip-remove-disconnect' of https://github.com/liupan1111/fio
Pan Liu [Wed, 3 May 2017 11:20:14 +0000 (19:20 +0800)]
remove redundant _fio_rbd_disconnect, which is already called in
fio_rbd_cleaup
Signed-off-by: Pan Liu <wanjun.lp@alibaba-inc.com>
Pan Liu [Wed, 3 May 2017 11:18:14 +0000 (19:18 +0800)]
remove out-of-date comment
Signed-off-by: Pan Liu <wanjun.lp@alibaba-inc.com>
Tomohiro Kusumi [Mon, 1 May 2017 18:48:19 +0000 (21:48 +0300)]
configure: Add missing $val != "yes" test to override compile_prog() result
Since it's possible for some platforms to use statically configured
configurations (e.g. see around L350 for Cygwin), it should test if
the variable hasn't been set to "yes" before initializing the variable
with "no", so that compile_prog() result can be safely ignored when
the platform knows it's supported.
ca205a75 (configure: Make Cygwin take regular configure path) started
this due to a major change in the configuration path, which changed
Cygwin to take the normal path taken by all other platforms, and
these two were added after that change.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 1 May 2017 18:48:18 +0000 (21:48 +0300)]
configure: Add missing ##########...
And remove unneeded blank lines from embedded test C code.
Both are just for better readability.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 1 May 2017 18:48:17 +0000 (21:48 +0300)]
configure: Check gfio test result via return value (not printf)
Test code compiled by compile_prog() mostly return 0 on success
whether binaries are executed or not. This one actually runs and
the result can be checked without printf.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 1 May 2017 18:48:16 +0000 (21:48 +0300)]
configure: Add void* cast to avoid bogus warning
This warning has nothing to do with what the code is trying to test.
This test code should keep it volatile, so cast to void* to silence
a warning on discarding volatile.
--
# uname
Linux
# grep memset config.log -A2 | head -3
/tmp/fio-conf-15226-60011-1419.c:6:10: warning: passing argument 1 of 'memset' discards 'volatile' qualifier from pointer target type [-Wdiscarded-qualifiers]
memset(&cid, 0, sizeof(cid));
^
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 1 May 2017 18:48:15 +0000 (21:48 +0300)]
configure: Add missing <string.h> to avoid bogus warning
This warning has nothing to do with what the code is trying to test.
This isn't testing if memset(3) is available, so just silence the
warning by including an appropriate header.
--
# uname
Linux
# grep memset config.log -A2 | head -3
/tmp/fio-conf-23441-58170-6422.c:5:3: warning: implicit declaration of function 'memset' [-Wimplicit-function-declaration]
memset(&cid, 0, sizeof(cid));
^~~~~~
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Mon, 1 May 2017 18:48:14 +0000 (21:48 +0300)]
configure: output_sym CONFIG_GFIO
No reason not to output_sym CONFIG_GFIO, when all others do this.
Having CONFIG_GFIO in config-host.h doesn't harm anything.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Omri Mor [Mon, 1 May 2017 00:09:22 +0000 (17:09 -0700)]
os/os-android.h: fix shared memory support
Fixes: #352 ("Android and shared memory")
Signed-off-by: Omri Mor <omor1@asu.edu>
Tomohiro Kusumi [Sun, 30 Apr 2017 17:41:00 +0000 (20:41 +0300)]
Drop triple X for cpu affinity for OpenBSD
(Sorry, resending this as gmail refused an email title including triple X)
This isn't really a fio's TODO item since no such thing seems to
exist (or have existed) in OpenBSD as of 2017, according to below
reference.
NetBSD is in more or less similar situation, except that NetBSD
has pthread_[gs]etaffinity_np() for threads, though it has another
problem that they don't take pid/tid.
CPU affinity comes to OpenBSD (2009)
http://undeadly.org/cgi?action=article&sid=
20090324210236
tedu old comment about cpu affinity. (2012)
http://openbsd-archive.7691.n7.nabble.com/tedu-old-comment-about-cpu-affinity-tt172330.html
how to use cpu affinity from user space (2013)
http://openbsd-archive.7691.n7.nabble.com/how-to-use-cpu-affinity-from-user-space-td222323.html
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 30 Apr 2017 17:35:10 +0000 (20:35 +0300)]
Implement shm_attach_to_open_removed() for OpenBSD
Add implementation which had been left by
0cfe2089 (Add runtime handlers for
97900ebf for FreeBSD/DragonFlyBSD).
This implementation is based on what
97900ebf (shm: have os remove shared memory if fio dies unexpectedly)
says. There seems to be no easy way to statically test versions like
KERNEL_VERSION() in Linux kernel.
The code assumes major/minor are both < 10. The minor has never been
10 or above. The major won't be 10 anytime soon based on the past
release cycle (current version is 6.1 after more than 2 decades).
https://en.wikipedia.org/wiki/OpenBSD_version_history
--
# uname
OpenBSD
# uname -r
6.1
# cat ./test1.c
#include <stdio.h>
#include "./os/os.h"
#include "./os/os-openbsd.h"
int main(void) {
printf("%d\n", shm_attach_to_open_removed());
return 0;
}
# gcc -Wall -g ./test1.c
# ./a.out
1
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 30 Apr 2017 17:35:09 +0000 (20:35 +0300)]
Turn off lex by default on OpenBSD
Do the same as what AIX does. OpenBSD (at least recent ones) hits
below syntax error. Feel free to revert this commit and properly
fix this if possible.
CC y.tab.c
exp/expression-parser.y:68: syntax error
%parse-param { long long *result }
^
gmake: *** [Makefile:341: y.tab.c] Error 1
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 30 Apr 2017 17:35:08 +0000 (20:35 +0300)]
Fix "'RB_ROOT' undeclared" error on OpenBSD
OpenBSD has below compiler error due to RB_ROOT name conflict between
lib/rbtree.h and OpenBSD header. os/os-{net,open}bsd.h actually have
had a workaround for this by undefing their RB_XXX macros (which fio
doesn't use) for possible conflicts, but then "lib/rbtree.h" needs
to be included after os/os.h which includes os/os-openbsd.h.
t/dedupe.c: In function 'main':
t/dedupe.c:583: error: 'RB_ROOT' undeclared (first use in this function)
t/dedupe.c:583: error: (Each undeclared identifier is reported only once
t/dedupe.c:583: error: for each function it appears in.)
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 30 Apr 2017 17:35:07 +0000 (20:35 +0300)]
Fix "C99 inline functions are not supported" warning on OpenBSD
OpenBSD has below compiler warning due to hist_sum() being inlined.
It should be fine with no inline (or move it to iolog.h with static
if we somehow want to keep it inlined).
iolog.c:702: warning: C99 inline functions are not supported; using GNU89
iolog.c:702: warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Sun, 30 Apr 2017 17:35:06 +0000 (20:35 +0300)]
Fix "cast from pointer to integer of different size" warning on OpenBSD
OpenBSD has below compiler warning due to pthread_t being typedef'd
to struct pthread*.
os/os-openbsd.h: In function 'gettid':
os/os-openbsd.h:71: warning: cast from pointer to integer of different size
--
# uname
OpenBSD
# grep pthread_t /usr/include -rI | grep typedef | head -1
/usr/include/pthread.h:typedef struct pthread *pthread_t;
# cat ./p1.c
#include <stdio.h>
#include <pthread.h>
int main(void) {
pthread_t id = 1234;
printf("%d\n", (int)id);
return 0;
}
# gcc -Wall -g ./p1.c
./p1.c: In function 'main':
./p1.c:4: warning: initialization makes pointer from integer without a cast
./p1.c:5: warning: cast from pointer to integer of different size
# ./a.out
1234
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Sun, 30 Apr 2017 22:49:22 +0000 (16:49 -0600)]
Merge branch 'zero_ioengine_flags' of https://github.com/sitsofe/fio
Jens Axboe [Sun, 30 Apr 2017 22:48:24 +0000 (16:48 -0600)]
Merge branch 'fix-348' of https://github.com/omor1/fio
Omri Mor [Sun, 30 Apr 2017 22:25:06 +0000 (15:25 -0700)]
os/os-linux.h: fix broken byte swap intrinsics
Signed-off-by: Omri Mor <omor1@asu.edu>
Omri Mor [Sun, 30 Apr 2017 22:23:39 +0000 (15:23 -0700)]
os/os-android.h: use byte swap intrinsics if available
Signed-off-by: Omri Mor <omor1@asu.edu>
Omri Mor [Sun, 30 Apr 2017 21:32:03 +0000 (14:32 -0700)]
os/os-android.h: fix broken shmget() due to ndk-r15
Fixes: #346 ("Compiling for Android using ndk-r15")
Signed-off-by: Omri Mor <omor1@asu.edu>
Sitsofe Wheeler [Sat, 29 Apr 2017 08:46:43 +0000 (09:46 +0100)]
fio.h: zero old flag bits when setting new ioengine flags
Fix a small bug in td_set_ioengine_flags() where it wouldn't zero old
bits in td->flags before setting new flag bits.
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Jens Axboe [Wed, 26 Apr 2017 21:24:36 +0000 (15:24 -0600)]
configure: fix broken test for cuda
Fixes:
03553853 ("GPUDirect RDMA support")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 21:22:50 +0000 (15:22 -0600)]
thread_options: kill two unused pads
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 21:06:24 +0000 (15:06 -0600)]
server: bump protocol version
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 21:05:07 +0000 (15:05 -0600)]
gpu: kill a lot of useless ifdefs
We just have to guard how we set the mem type, we don't have
to guard any check for MEM_CUDA_MALLOC inside CONFIG_CUDA
ifdefs.
Additionally, fix up some bad style.
Fixes:
03553853 ("GPUDirect RDMA support")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 21:04:21 +0000 (15:04 -0600)]
gpu: ensure that we convert gpu_dev_id options
Fixes:
03553853 ("GPUDirect RDMA support")
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 20:54:22 +0000 (14:54 -0600)]
Merge branch 'gpudirect' of https://github.com/yufeiren/fio
Yufei Ren [Wed, 19 Apr 2017 19:42:13 +0000 (15:42 -0400)]
GPUDirect RDMA support
Jens Axboe [Wed, 26 Apr 2017 20:20:21 +0000 (14:20 -0600)]
seqlock: add simple user space code for sequence locks
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:26 +0000 (00:06 +0300)]
Make oslib/linux-dev-lookup.c a stand-alone library
It needs to include linux-dev-lookup.h from local directory where
linux-dev-lookup.c is also located, to be able to use this as
a stand-alone library, which is useful for debugging purpose.
In fact, most of the files under oslib/ directory do things this way.
It also doesn't need to include os/os.h as it has no dependency.
--
# cat ./test10.c
#include <stdio.h>
#include "oslib/linux-dev-lookup.h"
int main(void) {
/* just to see if it compiles */
blktrace_lookup_device(NULL, NULL, 0, 0);
return 0;
}
# gcc -Wall -g ./test10.c oslib/linux-dev-lookup.c
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:25 +0000 (00:06 +0300)]
Make oslib/strlcat.c a stand-alone library
It needs to include strlcat.h from local directory where strlcat.c
is also located, to be able to use this as a stand-alone library,
which is useful for debugging purpose. In fact, most of the files
under oslib/ directory do things this way.
--
# cat ./test9.c
#include <stdio.h>
#include "oslib/strlcat.h"
int main(void) {
/* just to see if it compiles */
strlcat(NULL, NULL, 0);
return 0;
}
# gcc -Wall -g ./test9.c ./oslib/strlcat.c
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:24 +0000 (00:06 +0300)]
Make lib/mountcheck.c a stand-alone library
It needs to include mountcheck.h from local directory where
mountcheck.c is also located, to be able to use this as
a stand-alone library, which is useful for debugging purpose.
In fact, most of the files under lib/ directory do things this way.
--
# cat ./test11.c
#include <stdio.h>
#include "lib/mountcheck.h"
int main(int argc, char **argv) {
printf("%d\n", device_is_mounted(argv[1]));
return 0;
}
--
# uname
Linux
# gcc -Wall -g -DCONFIG_GETMNTENT ./test11.c ./lib/mountcheck.c
# ./a.out /dev/sda1
1
--
# uname
DragonFly
# gcc -Wall -g -DCONFIG_GETMNTINFO ./test11.c ./lib/mountcheck.c
# ./a.out /dev/da0s1a
1
--
# uname
NetBSD
# gcc -Wall -g -DCONFIG_GETMNTINFO_STATVFS ./test11.c ./lib/mountcheck.c
# ./a.out /dev/sd0a
1
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:23 +0000 (00:06 +0300)]
Make lib/zipf.c a stand-alone library
lib/zipf.c not having dependency on fio header (log.h) enables it
to be a stand-alone library, which is useful for debugging purpose.
In fact, most of the files under lib/ directory do things this way.
lib/zipf.c doesn't use log.h (log(3) is apparently from -lm).
This requires the previous commit.
--
# cat ./test8.c
#include <stdio.h>
#include "lib/zipf.h"
int main(void) {
/* just to see if it compiles */
zipf_init(NULL, 0, 0, 0);
return 0;
}
# gcc -Wall -g -lm -DBITS_PER_LONG=64 ./test8.c ./lib/zipf.c ./lib/rand.c ./lib/pattern.c ./lib/strntol.c
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:22 +0000 (00:06 +0300)]
Make lib/rand.c a stand-alone library
It needs to include pattern.h from local directory where rand.c
is also located, to be able to use this as a stand-alone library,
which is useful for debugging purpose. In fact, most of the files
under lib/ directory do things this way.
--
# cat ./test7.c
#include <stdio.h>
#include "lib/rand.h"
int main(void) {
/* just to see if it compiles */
init_rand(NULL, 0);
return 0;
}
# gcc -Wall -g -DBITS_PER_LONG=64 ./test7.c ./lib/rand.c ./lib/pattern.c ./lib/strntol.c
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:21 +0000 (00:06 +0300)]
Make lib/pattern.c a stand-alone library
lib/pattern.c not having dependency on fio.h enables it to be
a stand-alone library, which is useful for debugging purpose.
In fact, most of the files under lib/ directory do things this way.
This requires the previous commit.
--
# cat ./test6.c
#include <stdio.h>
#include "lib/pattern.h"
int main(void) {
/* just to see if it compiles */
paste_format_inplace(NULL, 0, NULL, 0, NULL);
return 0;
}
# gcc -Wall -g ./test6.c ./lib/pattern.c ./lib/strntol.c
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:20 +0000 (00:06 +0300)]
Make lib/strntol.c a stand-alone library
It needs to include strntol.h from local directory where strntol.c
is also located, to be able to use this as a stand-alone library,
which is useful for debugging purpose. In fact, most of the files
under lib/ directory do things this way.
--
# cat ./test5.c
#include <stdio.h>
#include "lib/strntol.h"
int main(void) {
/* just to see if it compiles */
strntol(NULL, 0, NULL, 0);
return 0;
}
# gcc -Wall -g ./test5.c ./lib/strntol.c
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:19 +0000 (00:06 +0300)]
Drop the only local variable declaration within a for-loop (C99)
Nothing happens at least with gcc by default, but this is the only
C99 (or after) specific declaration, so change it to normal style.
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Fri, 14 Apr 2017 21:06:18 +0000 (00:06 +0300)]
Fix num2str() output when modulo != -1U
I'm not sure what
05463816 actually fixed (as it only says "fix"),
but this isn't properly working at least for some input numbers unless
".%s" part of sprintf() is meant to be something other than decimal
part of the input number.
This commit might be breaking something that
05463816 had fixed,
which then needs to be rejected, but it at least prints decimal number
as expected. For example, when 12345 is 12.
0556640625 KiB, and 23456
is 22.90625 KiB,
# python -c "print(12345.0 / 1024)"
12.
0556640625
# python -c "print(23456.0 / 1024)"
22.90625
running this code as well as fio result in
# cat ./test1.c
#include <stdio.h>
#include "lib/num2str.h"
int main(void) {
printf("%s-%s\n",
num2str(12345, 4, 1, 1, N2S_BYTE),
num2str(23456, 4, 1, 1, N2S_BYTE));
return 0;
}
# gcc -Wall -g -DCONFIG_STATIC_ASSERT ./test1.c ./lib/num2str.c
below with the current implementation
# ./a.out
12.6KiB-22.1KiB
# ./fio --name=xxxxx --ioengine=sync --rw=read --size=1m --unlink=1 --bsrange=12345:23456 | grep "rw=read"
xxxxx: (g=0): rw=read, bs=(R) 12.6KiB-22.1KiB, (W) 12.6KiB-22.1KiB, (T) 12.6KiB-22.1KiB, ioengine=sync, iodepth=1
whereas below with this commit.
# ./a.out
12.1KiB-22.9KiB
# ./fio --name=xxxxx --ioengine=sync --rw=read --size=1m --unlink=1 --bsrange=12345:23456 | grep "rw=read"
xxxxx: (g=0): rw=read, bs=(R) 12.1KiB-22.9KiB, (W) 12.1KiB-22.9KiB, (T) 12.1KiB-22.9KiB, ioengine=sync, iodepth=1
-- Also see below
http://www.spinics.net/lists/fio/msg05720.html
> > + sprintf(fmt, "%%.%df", (int)(maxlen - strlen(tmp) - 1));
> > + sprintf(tmp, fmt, (double)modulo / (double)thousand[!!pow2]);
>
> I suspect one of the goals of that function was to restrict itself
> to integer math and avoid invoking the floating point unit (which
> might not even exist on some CPUs).
-- These are some more verification with various parameters
# cat ./testx.c
#include <stdio.h>
#include "lib/num2str.h"
static void f(uint64_t n, int maxlen, int base, int pow2, int units) {
printf("%10jd %s\n", n, num2str(n, maxlen, base, pow2, units));
}
int main(void) {
/* 1 */
f(1, 1, 1, 1, N2S_BYTE);
f(1, 1, 1, 0, N2S_BYTE);
printf("====================\n");
/* 10 */
f(10, 2, 1, 1, N2S_BYTE);
f(10, 2, 1, 0, N2S_BYTE);
printf("====================\n");
/* 1000 */
f(1000, 5, 1, 1, N2S_BYTE);
f(1000, 5, 1, 0, N2S_BYTE);
f(1000, 4, 1, 1, N2S_BYTE);
f(1000, 4, 1, 0, N2S_BYTE);
f(1000, 3, 1, 1, N2S_BYTE);
f(1000, 3, 1, 0, N2S_BYTE);
f(1000, 2, 1, 1, N2S_BYTE);
f(1000, 2, 1, 0, N2S_BYTE);
f(1000, 1, 1, 1, N2S_BYTE);
f(1000, 1, 1, 0, N2S_BYTE);
printf("====================\n");
/* 1024 */
f(1024, 5, 1, 1, N2S_BYTE);
f(1024, 5, 1, 0, N2S_BYTE);
f(1024, 4, 1, 1, N2S_BYTE);
f(1024, 4, 1, 0, N2S_BYTE);
f(1024, 3, 1, 1, N2S_BYTE);
f(1024, 3, 1, 0, N2S_BYTE);
f(1024, 2, 1, 1, N2S_BYTE);
f(1024, 2, 1, 0, N2S_BYTE);
f(1024, 1, 1, 1, N2S_BYTE);
f(1024, 1, 1, 0, N2S_BYTE);
printf("====================\n");
/* 12345 */
f(12345, 6, 1, 1, N2S_BYTE);
f(12345, 6, 1, 0, N2S_BYTE);
f(12345, 5, 1, 1, N2S_BYTE);
f(12345, 5, 1, 0, N2S_BYTE);
f(12345, 4, 1, 1, N2S_BYTE);
f(12345, 4, 1, 0, N2S_BYTE);
f(12345, 3, 1, 1, N2S_BYTE);
f(12345, 3, 1, 0, N2S_BYTE);
f(12345, 2, 1, 1, N2S_BYTE);
f(12345, 2, 1, 0, N2S_BYTE);
f(12345, 1, 1, 1, N2S_BYTE);
f(12345, 1, 1, 0, N2S_BYTE);
printf("====================\n");
/*
1234567 */
f(
1234567, 8, 1, 1, N2S_BYTE);
f(
1234567, 8, 1, 0, N2S_BYTE);
f(
1234567, 7, 1, 1, N2S_BYTE);
f(
1234567, 7, 1, 0, N2S_BYTE);
f(
1234567, 6, 1, 1, N2S_BYTE);
f(
1234567, 6, 1, 0, N2S_BYTE);
f(
1234567, 5, 1, 1, N2S_BYTE);
f(
1234567, 5, 1, 0, N2S_BYTE);
f(
1234567, 4, 1, 1, N2S_BYTE);
f(
1234567, 4, 1, 0, N2S_BYTE);
f(
1234567, 3, 1, 1, N2S_BYTE);
f(
1234567, 3, 1, 0, N2S_BYTE);
f(
1234567, 2, 1, 1, N2S_BYTE);
f(
1234567, 2, 1, 0, N2S_BYTE);
f(
1234567, 1, 1, 1, N2S_BYTE);
f(
1234567, 1, 1, 0, N2S_BYTE);
printf("====================\n");
/*
1234567 with base 1024 */
f(
1234567, 8, 1024, 1, N2S_BYTE);
f(
1234567, 8, 1024, 0, N2S_BYTE);
f(
1234567, 7, 1024, 1, N2S_BYTE);
f(
1234567, 7, 1024, 0, N2S_BYTE);
f(
1234567, 6, 1024, 1, N2S_BYTE);
f(
1234567, 6, 1024, 0, N2S_BYTE);
f(
1234567, 5, 1024, 1, N2S_BYTE);
f(
1234567, 5, 1024, 0, N2S_BYTE);
f(
1234567, 4, 1024, 1, N2S_BYTE);
f(
1234567, 4, 1024, 0, N2S_BYTE);
f(
1234567, 3, 1024, 1, N2S_BYTE);
f(
1234567, 3, 1024, 0, N2S_BYTE);
f(
1234567, 2, 1024, 1, N2S_BYTE);
f(
1234567, 2, 1024, 0, N2S_BYTE);
f(
1234567, 1, 1024, 1, N2S_BYTE);
f(
1234567, 1, 1024, 0, N2S_BYTE);
printf("====================\n");
/*
1234567 with base 1024 with N2S_BIT */
f(
1234567, 9, 1024, 1, N2S_BIT);
f(
1234567, 9, 1024, 0, N2S_BIT);
f(
1234567, 8, 1024, 1, N2S_BIT);
f(
1234567, 8, 1024, 0, N2S_BIT);
f(
1234567, 7, 1024, 1, N2S_BIT);
f(
1234567, 7, 1024, 0, N2S_BIT);
f(
1234567, 6, 1024, 1, N2S_BIT);
f(
1234567, 6, 1024, 0, N2S_BIT);
f(
1234567, 5, 1024, 1, N2S_BIT);
f(
1234567, 5, 1024, 0, N2S_BIT);
f(
1234567, 4, 1024, 1, N2S_BIT);
f(
1234567, 4, 1024, 0, N2S_BIT);
f(
1234567, 3, 1024, 1, N2S_BIT);
f(
1234567, 3, 1024, 0, N2S_BIT);
f(
1234567, 2, 1024, 1, N2S_BIT);
f(
1234567, 2, 1024, 0, N2S_BIT);
f(
1234567, 1, 1024, 1, N2S_BIT);
f(
1234567, 1, 1024, 0, N2S_BIT);
printf("====================\n");
return 0;
}
# gcc -Wall -g -DCONFIG_STATIC_ASSERT ./testx.c ./lib/num2str.c
# ./a.out
1 1B
1 1B
====================
10 10B
10 10B
====================
1000 1000B
1000 1000B
1000 1000B
1000 1000B
1000 0.0KiB
1000 1.0kB
1000 1KiB
1000 1kB
1000 1KiB
1000 1kB
====================
1024 1024B
1024 1024B
1024 1024B
1024 1024B
1024 1.0KiB
1024 1.0kB
1024 1KiB
1024 1kB
1024 1KiB
1024 1kB
====================
12345 12345B
12345 12345B
12345 12345B
12345 12345B
12345 12.1KiB
12345 12.3kB
12345 12KiB
12345 12kB
12345 12KiB
12345 12kB
12345 0MiB
12345 0MB
====================
1234567 1234567B
1234567 1234567B
1234567 1234567B
1234567 1234567B
1234567 1205.6KiB
1234567 1234.6kB
1234567 1206KiB
1234567 1235kB
1234567 1206KiB
1234567 1235kB
1234567 1.2MiB
1234567 1.2MB
1234567 1MiB
1234567 1MB
1234567 1MiB
1234567 1MB
====================
1234567 1234567KiB
1234567 1234567kB
1234567 1234567KiB
1234567 1234567kB
1234567 1205.6MiB
1234567 1234.6MB
1234567 1206MiB
1234567 1235MB
1234567 1206MiB
1234567 1235MB
1234567 1.2GiB
1234567 1.2GB
1234567 1GiB
1234567 1GB
1234567 1GiB
1234567 1GB
====================
1234567 9876536Kibit
1234567 9876536kbit
1234567 9876536Kibit
1234567 9876536kbit
1234567 9876536Kibit
1234567 9876536kbit
1234567 9645.1Mibit
1234567 9876.5Mbit
1234567 9645Mibit
1234567 9877Mbit
1234567 9645Mibit
1234567 9877Mbit
1234567 9.4Gibit
1234567 9.9Gbit
1234567 9Gibit
1234567 10Gbit
1234567 9Gibit
1234567 10Gbit
====================
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 17:13:25 +0000 (11:13 -0600)]
stat: cleanup iops/bw logging functions
They are basically identical. Abstract out into a helper, and
use it for both iops and bw logging.
Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe [Wed, 26 Apr 2017 00:14:00 +0000 (18:14 -0600)]
stat: make next log time decision cleaner
Signed-off-by: Jens Axboe <axboe@fb.com>
mychoxin [Wed, 19 Apr 2017 12:34:19 +0000 (20:34 +0800)]
Return non-negtive error in order to print right error msg
Signed-off-by: Pan Liu <liupan1111@gmail.com>
Jens Axboe [Mon, 10 Apr 2017 17:41:09 +0000 (11:41 -0600)]
Merge branch 'pull-2' of https://github.com/dmonakhov/fio
Sitsofe Wheeler [Mon, 10 Apr 2017 15:37:00 +0000 (18:37 +0300)]
doc: add ftruncate engine documentation and example jobfile
Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Tomohiro Kusumi [Tue, 4 Apr 2017 20:22:17 +0000 (23:22 +0300)]
Fix num2str() output when maxlen <= strlen(tmp)
Since a local variable decimals is unsigned int, this conditional
if (decimals <= 1)
needs cast as shown below.
if ((int)decimals <= 1)
Otherwise it results in showing some garbage in case of maxlen == 0,
# cat ./test0.c
#include <stdio.h>
#include "lib/num2str.h"
int main(void) {
printf("%s\n", num2str(123, 3, 1, 1, N2S_BYTE));
printf("%s\n", num2str(123, 2, 1, 1, N2S_BYTE));
printf("%s\n", num2str(123, 1, 1, 1, N2S_BYTE));
printf("%s\n", num2str(123, 0, 1, 1, N2S_BYTE));
return 0;
}
# gcc -Wall -g -DCONFIG_STATIC_ASSERT ./test0.c ./lib/num2str.c
# ./a.out
123B
0KiB
0KiB
0.0?$-JB
# ./a.out
123B
0KiB
0KiB
0.0#;bB
# ./a.out
123B
0KiB
0KiB
0.0|B
whereas with this commit it prints "0B".
# gcc -Wall -g -DCONFIG_STATIC_ASSERT ./test0.c ./lib/num2str.c
# ./a.out
123B
0KiB
0KiB
0B
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 4 Apr 2017 20:22:16 +0000 (23:22 +0300)]
Make lib/num2str.c a stand-alone library by adding lib/num2str.h
lib/num2str.c not having dependency on fio.h by adding a new header
lib/num2str.h enables it to be a stand-alone library function, which
is useful for debugging purpose. In fact, most of the files under
lib/ directory do things this way.
--
# cat ./test1.c
#include <stdio.h>
#include "lib/num2str.h"
int main(void) {
printf("%s\n", num2str(1024, 4, 1, 1, N2S_BYTE));
return 0;
}
# gcc -Wall -g -DCONFIG_STATIC_ASSERT ./test1.c ./lib/num2str.c
# ./a.out
1024B
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 4 Apr 2017 20:22:15 +0000 (23:22 +0300)]
Make lib/memalign.c a stand-alone library
lib/memalign.c not having dependency on fio.h enables it to be
a stand-alone library, which is useful for debugging purpose.
In fact, most of the files under lib/ directory do things this way.
(For lib/memalign.c, it was actually myself who introduced this
dependency as a part of changes made by
248c9436, so this commit
is partially reverting that)
--
# cat ./test3.c
#include <stdio.h>
#include "lib/memalign.h"
int main(void) {
char *p = fio_memalign(4096,
1000000);
printf("%p\n", p);
fio_memfree(p,
1000000);
return 0;
}
# gcc -Wall -g ./test3.c ./lib/memalign.c
# ./a.out
0x7fbb7bbbc000
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 4 Apr 2017 20:22:14 +0000 (23:22 +0300)]
Make lib/prio_tree.c a stand-alone library
lib/prio_tree.c not having dependency on fio.h enables it to be
a stand-alone library, which is useful for debugging purpose.
In fact, most of the files under lib/ directory do things this way.
--
# cat ./test2.c
#include <stdio.h>
#include "lib/prio_tree.h"
int main(void) {
struct prio_tree_root tree;
struct prio_tree_node node;
INIT_PRIO_TREE_ROOT(&tree);
INIT_PRIO_TREE_NODE(&node);
prio_tree_insert(&tree, &node);
prio_tree_remove(&tree, &node);
printf("%d\n", prio_tree_empty(&tree));
return 0;
}
# gcc -Wall -g -DBITS_PER_LONG=64 ./test2.c ./lib/prio_tree.c
# ./a.out
1
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 4 Apr 2017 20:22:12 +0000 (23:22 +0300)]
dump_td_info() doesn't really need to be a function
since it's short enough, and too specific to be called as dump_td_info().
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Tomohiro Kusumi [Tue, 4 Apr 2017 20:22:11 +0000 (23:22 +0300)]
Don't silently terminate td when no I/O performed due to error
Some runtime configurations can cause threads/processes to terminate
without any I/O performed, yet with no explicit error message, which
is quite confusing. In the example below, fio finishes with neither
error nor regular statistics due to file offset + bs being larger
than the file size while in get_io_u().
This commit calls log_err() when this happens. Since it's difficult
to tell the exact reason after thread has left the main I/O loop[*],
it gives advice to use a command line option --debug=io, similar to
the way td_io_init() gives advice.
[*] It can't just replace dprint(FD_IO, ...) calls with td_verror()
for e.g. while in get_io_u(), since those are also used by non error
paths too.
--
# ./fio --name=xxxxx --ioengine=sync --rw=read --bs=2k --size=1m --nrfiles=1k --unlink=1
xxxxx: (g=0): rw=read, bs=(R) 2048B-2048B, (W) 2048B-2048B, (T) 2048B-2048B, ioengine=sync, iodepth=1
fio-2.18-59-g618e
Starting 1 process
xxxxx: Laying out IO files (1024 files / total 1MiB)
Run status group 0 (all jobs):
Disk stats (read/write):
dm-0: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=0/0, aggrmerge=0/0, aggrticks=0/0, aggrin_queue=0, aggrutil=0.00%
sda: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
Signed-off-by: Jens Axboe <axboe@fb.com>