The following changes since commit 47f4463579ab92332ef995774d8578b0191da6e4: configure: show help for bad option (2013-01-24 10:34:14 -0700) are available in the git repository at: git://git.kernel.dk/fio.git gfio Bruce Cran (1): Fix Windows build by defining clock sources and adding include file. Huadong Liu (1): Use RUSAGE_THREAD, if available Jens Axboe (19): Add lib/getrusage.c configure: add that windows has RUSGE_THREAD Correct ifdef checks for posix and linux fallocate hash: make 64-bit type ULL NAN: use __builtin_nanf() if not available configure: fix more old FIO_HAVE_ checks options: add help to experimental_verify configure: solaris and windowsaio fixups configure: kill windows FIO_HAVE_FDATASYNC Drop EXTFLAG and lib references configure: auto-generate a config-host.h configure: add configure header to config-host.h Makefile: remove config-host.ld configure: HPUX warning for empty CC Fix getopt def check Always fsync if asked to configure: add --extra-cflags configure: enable --extra-cflags for Windows Merge branch 'master' into gfio Makefile | 82 ++---------------- backend.c | 4 +- configure | 145 ++++++++++++++++++++----------- engines/guasi.c | 7 +-- engines/rdma.c | 7 +-- filesetup.c | 10 +- fio.h | 4 +- hash.h | 2 +- lib/getopt.h | 2 +- lib/getrusage.c | 14 +++ lib/getrusage.h | 9 ++ options.c | 15 ++-- os/os-solaris.h | 1 - os/os-windows.h | 3 - os/os.h | 2 +- os/windows/posix.c | 14 +++- os/windows/posix/include/sys/resource.h | 1 + parse.c | 3 + stat.c | 8 +-- 19 files changed, 167 insertions(+), 166 deletions(-) create mode 100644 lib/getrusage.c create mode 100644 lib/getrusage.h --- Diff of recent changes: diff --git a/Makefile b/Makefile index 9d3465c..038eacf 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ DEBUGFLAGS = -D_FORTIFY_SOURCE=2 -DFIO_INC_DEBUG -CPPFLAGS= -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 \ - $(DEBUGFLAGS) +CPPFLAGS= -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(DEBUGFLAGS) OPTFLAGS= -O3 -g -ffast-math $(EXTFLAGS) CFLAGS = -std=gnu99 -Wwrite-strings -Wall $(OPTFLAGS) LIBS = -lm -lz $(EXTLIBS) @@ -34,7 +33,7 @@ SOURCE := gettime.c ioengines.c init.c stat.c log.c time.c filesetup.c \ memalign.c server.c client.c iolog.c backend.c libfio.c flow.c \ cconv.c lib/prio_tree.c json.c lib/zipf.c lib/axmap.c \ lib/lfsr.c gettime-thread.c helpers.c lib/flist_sort.c \ - lib/hweight.c + lib/hweight.c lib/getrusage.c ifdef CONFIG_64BIT_LLP64 CFLAGS += -DBITS_PER_LONG=32 @@ -45,22 +44,13 @@ endif ifdef CONFIG_32BIT CFLAGS += -DBITS_PER_LONG=32 endif -ifdef CONFIG_BIG_ENDIAN - CFLAGS += -DCONFIG_BIG_ENDIAN -endif -ifdef CONFIG_LITTLE_ENDIAN - CFLAGS += -DCONFIG_LITTLE_ENDIAN -endif ifdef CONFIG_LIBAIO - CFLAGS += -DCONFIG_LIBAIO SOURCE += engines/libaio.c endif ifdef CONFIG_RDMA - CFLAGS += -DCONFIG_RDMA SOURCE += engines/rdma.c endif ifdef CONFIG_POSIXAIO - CFLAGS += -DCONFIG_POSIXAIO SOURCE += engines/posixaio.c endif ifdef CONFIG_LINUX_FALLOCATE @@ -70,83 +60,29 @@ ifdef CONFIG_LINUX_EXT4_MOVE_EXTENT SOURCE += engines/e4defrag.c endif ifdef CONFIG_LINUX_SPLICE - CFLAGS += -DCONFIG_LINUX_SPLICE SOURCE += engines/splice.c endif ifdef CONFIG_GUASI - CFLAGS += -DCONFIG_GUASI SOURCE += engines/guasi.c endif ifdef CONFIG_FUSION_AW - CFLAGS += -DCONFIG_FUSION_AW SOURCE += engines/fusion-aw.c endif ifdef CONFIG_SOLARISAIO - CFLAGS += -DCONFIG_SOLARISAIO SOURCE += engines/solarisaio.c endif - +ifdef CONFIG_WINDOWSAIO + SOURCE += engines/windowsaio.c +endif ifndef CONFIG_STRSEP - CFLAGS += -DCONFIG_STRSEP SOURCE += lib/strsep.c endif ifndef CONFIG_GETOPT_LONG_ONLY - CFLAGS += -DCONFIG_GETOPT_LONG_ONLY SOURCE += lib/getopt_long.c endif - ifndef CONFIG_INET_ATON - CFLAGS += -DCONFIG_INET_ATON SOURCE += lib/inet_aton.c endif -ifdef CONFIG_CLOCK_GETTIME - CFLAGS += -DCONFIG_CLOCK_GETTIME -endif -ifdef CONFIG_POSIXAIO_FSYNC - CFLAGS += -DCONFIG_POSIXAIO_FSYNC -endif -ifdef CONFIG_FADVISE - CFLAGS += -DCONFIG_FADVISE -endif -ifdef CONFIG_CLOCK_MONOTONIC - CFLAGS += -DCONFIG_CLOCK_MONOTONIC -endif -ifdef CONFIG_CLOCK_MONOTONIC_PRECISE - CFLAGS += -DCONFIG_CLOCK_MONOTONIC_PRECISE -endif -ifdef CONFIG_GETTIMEOFDAY - CFLAGS += -DCONFIG_GETTIMEOFDAY -endif -ifdef CONFIG_SOCKLEN_T - CFLAGS += -DCONFIG_SOCKLEN_T -endif -ifdef CONFIG_SFAA - CFLAGS += -DCONFIG_SFAA -endif -ifdef CONFIG_FDATASYNC - CFLAGS += -DCONFIG_FDATASYNC -endif -ifdef CONFIG_3ARG_AFFINITY - CFLAGS += -DCONFIG_3ARG_AFFINITY -endif -ifdef CONFIG_2ARG_AFFINITY - CFLAGS += -DCONFIG_2ARG_AFFINITY -endif -ifdef CONFIG_SYNC_FILE_RANGE - CFLAGS += -DCONFIG_SYNC_FILE_RANGE -endif -ifdef CONFIG_LIBNUMA - CFLAGS += -DCONFIG_LIBNUMA -endif -ifdef CONFIG_TLS_THREAD - CFLAGS += -DCONFIG_TLS_THREAD -endif -ifdef CONFIG_POSIX_FALLOCATE - CFLAGS += -DCONFIG_POSIX_FALLOCATE -endif -ifdef CONFIG_LINUX_FALLOCATE - CFLAGS += -DCONFIG_LINUX_FALLOCATE -endif ifeq ($(UNAME), Linux) SOURCE += diskutil.c fifo.c blktrace.c cgroup.c trim.c engines/sg.c \ @@ -186,7 +122,7 @@ ifeq ($(UNAME), Darwin) endif ifneq (,$(findstring CYGWIN,$(UNAME))) SOURCE := $(filter-out engines/mmap.c,$(SOURCE)) - SOURCE += engines/windowsaio.c os/windows/posix.c + SOURCE += os/windows/posix.c LIBS += -lpthread -lpsapi -lws2_32 CFLAGS += -DPSAPI_VERSION=1 -Ios/windows/posix/include -Wno-format endif @@ -251,10 +187,10 @@ FIO-VERSION-FILE: FORCE CFLAGS += -DFIO_VERSION='"$(FIO_VERSION)"' .c.o: .depend FORCE - $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $(CPPFLAGS) $< + $(QUIET_CC)$(CC) -o $@ $(CFLAGS) $(CPPFLAGS) -c $< init.o: FIO-VERSION-FILE - $(QUIET_CC)$(CC) -o init.o -c $(CFLAGS) $(CPPFLAGS) -c init.c + $(QUIET_CC)$(CC) -o init.o $(CFLAGS) $(CPPFLAGS) -c init.c gcompat.o: gcompat.c gcompat.h $(QUIET_CC)$(CC) $(CFLAGS) $(GTK_CFLAGS) $(CPPFLAGS) -c gcompat.c @@ -307,7 +243,7 @@ t/axmap: $(T_AXMAP_OBJS) $(PROGS): .depend clean: FORCE - -rm -f .depend $(GFIO_OBJS) $(OBJS) $(T_OBJS) $(PROGS) $(T_PROGS) core.* core gfio FIO-VERSION-FILE config-host.mak config-host.ld cscope.out + -rm -f .depend $(GFIO_OBJS) $(OBJS) $(T_OBJS) $(PROGS) $(T_PROGS) core.* core gfio FIO-VERSION-FILE config-host.mak cscope.out cscope: @cscope -b -R diff --git a/backend.c b/backend.c index 48b00b6..9aa2a28 100644 --- a/backend.c +++ b/backend.c @@ -50,6 +50,7 @@ #include "lib/rand.h" #include "memalign.h" #include "server.h" +#include "lib/getrusage.h" static pthread_t disk_util_thread; static struct fio_mutex *disk_thread_mutex; @@ -1220,8 +1221,7 @@ static void *thread_main(void *data) fio_verify_init(td); fio_gettime(&td->epoch, NULL); - getrusage(RUSAGE_SELF, &td->ru_start); - + fio_getrusage(&td->ru_start); clear_state = 0; while (keep_running(td)) { uint64_t verify_bytes; diff --git a/configure b/configure index af2c1d9..ff87acc 100755 --- a/configure +++ b/configure @@ -24,7 +24,14 @@ trap "rm -f $TMPC $TMPO $TMPE" EXIT INT QUIT TERM rm -rf config.log config_host_mak="config-host.mak" -config_host_ld="config-host.ld" +config_host_h="config-host.h" + +rm -rf $config_host_mak +rm -rf $config_host_h + +# Default CFLAGS +CFLAGS="-D_GNU_SOURCE" +EXTFLAGS="-include config-host.h" # Print a helpful header at the top of config.log echo "# FIO configure log $(date)" >> config.log @@ -33,6 +40,14 @@ printf " '%s'" "$0" "$@" >> config.log echo >> config.log echo "#" >> config.log +# Print configure header at the top of $config_host_h +echo "/*" > $config_host_h +echo " * Automatically generated by configure - do not modify" >> $config_host_h +printf " * Configured with:" >> $config_host_h +printf " * '%s'" "$0" "$@" >> $config_host_h +echo "" >> $config_host_h +echo " */" >> $config_host_h + do_cc() { # Run the compiler, capturing its output to the log. echo $cc "$@" >> config.log @@ -97,15 +112,20 @@ EOF compile_object } +output_sym() { + echo "$1=y" >> $config_host_mak + echo "#define $1" >> $config_host_h +} + targetos="" cpu="" cc="${CC-${cross_prefix}gcc}" # default options -gfio="no" show_help="no" exit_val=0 +gfio="no" # parse options for opt do @@ -114,6 +134,9 @@ for opt do --cc=*) CC="$optarg" ;; + --extra-cflags=*) + CFLAGS="$CFLAGS $optarg" + ;; --enable-gfio) gfio="yes" ;; @@ -129,6 +152,7 @@ done if test "$show_help" = "yes" ; then echo "--cc= Specify compiler to use" + echo "--extra-cflags= Specify extra CFLAGS to pass to compiler" echo "--enable-gfio Enable building of gtk gfio" exit $exit_val fi @@ -169,17 +193,23 @@ CYGWIN*) if test -z "$CC" ; then CC="x86_64-w64-mingw32-gcc" fi - echo "CC=$CC" > $config_host_mak - echo "CONFIG_LITTLE_ENDIAN=y" >> $config_host_mak - echo "CONFIG_64BIT_LLP64=y" >> $config_host_mak - echo "CONFIG_CLOCK_GETTIME=y" >> $config_host_mak - echo "CONFIG_CLOCK_MONOTONIC=y" >> $config_host_mak - echo "CONFIG_GETTIMEOFDAY=y" >> $config_host_mak - echo "CONFIG_FADVISE=y" >> $config_host_mak - echo "CONFIG_SOCKLEN_T=y" >> $config_host_mak - echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak - echo "CONFIG_FADVISE=y" >> $config_host_mak - echo "CONFIG_SFAA=y" >> $config_host_mak + output_sym "CONFIG_LITTLE_ENDIAN" + output_sym "CONFIG_64BIT_LLP64" + output_sym "CONFIG_CLOCK_GETTIME" + output_sym "CONFIG_CLOCK_MONOTONIC" + output_sym "CONFIG_GETTIMEOFDAY" + output_sym "CONFIG_FADVISE" + output_sym "CONFIG_SOCKLEN_T" + output_sym "CONFIG_POSIX_FALLOCATE" + output_sym "CONFIG_FADVISE" + output_sym "CONFIG_SFAA" + output_sym "CONFIG_RUSAGE_THREAD" + output_sym "CONFIG_WINDOWSAIO" + output_sym "CONFIG_FDATASYNC" + output_sym "CONFIG_GETTIMEOFDAY" + output_sym "CONFIG_CLOCK_GETTIME" + echo "CC=$CC" >> $config_host_mak + echo "EXTFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak exit 0 esac @@ -249,7 +279,7 @@ case "$cpu" in ;; esac -if test -z $CC; then +if test -z "$CC" ; then if test "$targetos" = "FreeBSD"; then if has clang; then CC=clang @@ -499,7 +529,6 @@ echo "POSIX fallocate $posix_fallocate" linux_2arg_affinity="no" linux_3arg_affinity="no" cat > $TMPC << EOF -#define _GNU_SOURCE #include <sched.h> int main(int argc, char **argv) { @@ -511,7 +540,6 @@ if compile_prog "" "" "sched_setaffinity(,,)"; then linux_3arg_affinity="yes" else cat > $TMPC << EOF -#define _GNU_SOURCE #include <sched.h> int main(int argc, char **argv) { @@ -620,7 +648,6 @@ sync_file_range="no" cat > $TMPC << EOF #include <stdio.h> #include <unistd.h> -#define _GNU_SOURCE #include <fcntl.h> #include <linux/fs.h> int main(int argc, char **argv) @@ -661,7 +688,6 @@ echo "EXT4 move extent $ext4_me" # splice probe linux_splice="no" cat > $TMPC << EOF -#define _GNU_SOURCE #include <stdio.h> #include <fcntl.h> int main(int argc, char **argv) @@ -845,6 +871,23 @@ fi echo "gfio $gfio" +# Check whether we have getrusage(RUSAGE_THREAD) +rusage_thread="no" +cat > $TMPC << EOF +#include <sys/time.h> +#include <sys/resource.h> +int main(int argc, char **argv) +{ + struct rusage ru; + getrusage(RUSAGE_THREAD, &ru); + return 0; +} +EOF +if compile_prog "" "" "RUSAGE_THREAD"; then + rusage_thread="yes" +fi +echo "RUSAGE_THREAD $rusage_thread" + ############################################################################# echo "# Automatically generated by configure - do not modify" > $config_host_mak @@ -853,97 +896,100 @@ printf " '%s'" "$0" "$@" >> $config_host_mak echo >> $config_host_mak if test "$wordsize" = "64" ; then - echo "CONFIG_64BIT=y" >> $config_host_mak + output_sym "CONFIG_64BIT" elif test "$wordsize" = "32" ; then - echo "CONFIG_32BIT=y" >> $config_host_mak + output_sym "CONFIG_32BIT" else echo "Unknown wordsize!" exit 1 fi if test "$bigendian" = "yes" ; then - echo "CONFIG_BIG_ENDIAN=y" >> $config_host_mak + output_sym "CONFIG_BIG_ENDIAN" else - echo "CONFIG_LITTLE_ENDIAN=y" >> $config_host_mak + output_sym "CONFIG_LITTLE_ENDIAN" fi if test "$libaio" = "yes" ; then - echo "CONFIG_LIBAIO=y" >> $config_host_mak + output_sym "CONFIG_LIBAIO" fi if test "$posix_aio" = "yes" ; then - echo "CONFIG_POSIXAIO=y" >> $config_host_mak + output_sym "CONFIG_POSIXAIO" fi if test "$posix_aio_fsync" = "yes" ; then - echo "CONFIG_POSIXAIO_FSYNC=y" >> $config_host_mak + output_sym "CONFIG_POSIXAIO_FSYNC" fi if test "$linux_fallocate" = "yes" ; then - echo "CONFIG_LINUX_FALLOCATE=y" >> $config_host_mak + output_sym "CONFIG_LINUX_FALLOCATE" fi if test "$posix_fallocate" = "yes" ; then - echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak + output_sym "CONFIG_POSIX_FALLOCATE" fi if test "$fdatasync" = "yes" ; then - echo "CONFIG_FDATASYNC=y" >> $config_host_mak + output_sym "CONFIG_FDATASYNC" fi if test "$sync_file_range" = "yes" ; then - echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak + output_sym "CONFIG_SYNC_FILE_RANGE" fi if test "$sfaa" = "yes" ; then - echo "CONFIG_SFAA=y" >> $config_host_mak + output_sym "CONFIG_SFAA" fi if test "$libverbs" = "yes" -o "rdmacm" = "yes" ; then - echo "CONFIG_RDMA=y" >> $config_host_mak + output_sym "CONFIG_RDMA" fi if test "$clock_gettime" = "yes" ; then - echo "CONFIG_CLOCK_GETTIME=y" >> $config_host_mak + output_sym "CONFIG_CLOCK_GETTIME" fi if test "$clock_monotonic" = "yes" ; then - echo "CONFIG_CLOCK_MONOTONIC=y" >> $config_host_mak + output_sym "CONFIG_CLOCK_MONOTONIC" fi if test "$clock_monotonic_precise" = "yes" ; then - echo "CONFIG_CLOCK_MONOTONIC_PRECISE=y" >> $config_host_mak + output_sym "CONFIG_CLOCK_MONOTONIC_PRECISE" fi if test "$gettimeofday" = "yes" ; then - echo "CONFIG_GETTIMEOFDAY=y" >> $config_host_mak + output_sym "CONFIG_GETTIMEOFDAY" fi if test "$posix_fadvise" = "yes" ; then - echo "CONFIG_POSIX_FADVISE=y" >> $config_host_mak + output_sym "CONFIG_POSIX_FADVISE" fi if test "$linux_3arg_affinity" = "yes" ; then - echo "CONFIG_3ARG_AFFINITY=y" >> $config_host_mak + output_sym "CONFIG_3ARG_AFFINITY" elif test "$linux_2arg_affinity" = "yes" ; then - echo "CONFIG_2ARG_AFFINITY=y" >> $config_host_mak + output_sym "CONFIG_2ARG_AFFINITY" fi if test "$strsep" = "yes" ; then - echo "CONFIG_STRSEP=y" >> $config_host_mak + output_sym "CONFIG_STRSEP" fi if test "$getopt_long_only" = "yes" ; then - echo "CONFIG_GETOPT_LONG_ONLY=y" >> $config_host_mak + output_sym "CONFIG_GETOPT_LONG_ONLY" fi if test "$inet_aton" = "yes" ; then - echo "CONFIG_INET_ATON=y" >> $config_host_mak + output_sym "CONFIG_INET_ATON" fi if test "$socklen_t" = "yes" ; then - echo "CONFIG_SOCKLEN_T=y" >> $config_host_mak + output_sym "CONFIG_SOCKLEN_T" fi if test "$ext4_me" = "yes" ; then - echo "CONFIG_LINUX_EXT4_MOVE_EXTENT=y" >> $config_host_mak + output_sym "CONFIG_LINUX_EXT4_MOVE_EXTENT" fi if test "$linux_splice" = "yes" ; then - echo "CONFIG_LINUX_SPLICE=y" >> $config_host_mak + output_sym "CONFIG_LINUX_SPLICE" fi if test "$guasi" = "yes" ; then - echo "CONFIG_GUASI=y" >> $config_host_mak + output_sym "CONFIG_GUASI" fi if test "$fusion_aw" = "yes" ; then - echo "CONFIG_FUSION_AW=y" >> $config_host_mak + output_sym "CONFIG_FUSION_AW" fi if test "$libnuma" = "yes" ; then - echo "CONFIG_LIBNUMA=y" >> $config_host_mak + output_sym "CONFIG_LIBNUMA" fi if test "$solaris_aio" = "yes" ; then - echo "CONFIG_SOLARISAIO=y" >> $config_host_mak + output_sym "CONFIG_SOLARISAIO" fi if test "$tls_thread" = "yes" ; then - echo "CONFIG_TLS_THREAD=y" >> $config_host_mak + output_sym "CONFIG_TLS_THREAD" +fi +if test "$rusage_thread" = "yes" ; then + output_sym "CONFIG_RUSAGE_THREAD" fi if test "$gfio" = "yes" ; then echo "CONFIG_GFIO=y" >> $config_host_mak @@ -952,3 +998,4 @@ fi echo "LIBS+=$LIBS" >> $config_host_mak echo "CFLAGS+=$CFLAGS" >> $config_host_mak echo "CC=$cc" >> $config_host_mak +echo "EXTFLAGS=$EXTFLAGS $CFLAGS" >> $config_host_mak diff --git a/engines/guasi.c b/engines/guasi.c index 6faae8d..c9c7429 100644 --- a/engines/guasi.c +++ b/engines/guasi.c @@ -3,12 +3,7 @@ * * IO engine using the GUASI library. * - * This is currently disabled. To enable it, execute: - * - * $ export EXTFLAGS="-DFIO_HAVE_GUASI" - * $ export EXTLIBS="-lguasi" - * - * before running make. You'll need the GUASI lib as well: + * Before running make. You'll need the GUASI lib as well: * * http://www.xmailserver.org/guasi-lib.html * diff --git a/engines/rdma.c b/engines/rdma.c index a847b54..e1fb380 100644 --- a/engines/rdma.c +++ b/engines/rdma.c @@ -5,12 +5,7 @@ * Supports both RDMA memory semantics and channel semantics * for the InfiniBand, RoCE and iWARP protocols. * - * This I/O engine is disabled by default. To enable it, execute: - * - * $ export EXTFLAGS+=" -DFIO_HAVE_RDMA " - * $ export EXTLIBS+=" -libverbs -lrdmacm " - * - * before running make. You will need the Linux RDMA software as well, either + * You will need the Linux RDMA software installed, either * from your Linux distributor or directly from openfabrics.org: * * http://www.openfabrics.org/downloads/OFED/ diff --git a/filesetup.c b/filesetup.c index c2170aa..8262ed3 100644 --- a/filesetup.c +++ b/filesetup.c @@ -15,7 +15,7 @@ #include "hash.h" #include "lib/axmap.h" -#ifdef FIO_HAVE_LINUX_FALLOCATE +#ifdef CONFIG_LINUX_FALLOCATE #include <linux/falloc.h> #endif @@ -72,7 +72,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f) return 1; } -#ifdef FIO_HAVE_FALLOCATE +#ifdef CONFIG_POSIX_FALLOCATE if (!td->o.fill_device) { switch (td->o.fallocate_mode) { case FIO_FALLOCATE_NONE: @@ -87,7 +87,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f) strerror(r)); } break; -#ifdef FIO_HAVE_LINUX_FALLOCATE +#ifdef CONFIG_LINUX_FALLOCATE case FIO_FALLOCATE_KEEP_SIZE: dprint(FD_FILE, "fallocate(FALLOC_FL_KEEP_SIZE) " @@ -100,14 +100,14 @@ static int extend_file(struct thread_data *td, struct fio_file *f) td_verror(td, errno, "fallocate"); break; -#endif /* FIO_HAVE_LINUX_FALLOCATE */ +#endif /* CONFIG_LINUX_FALLOCATE */ default: log_err("fio: unknown fallocate mode: %d\n", td->o.fallocate_mode); assert(0); } } -#endif /* FIO_HAVE_FALLOCATE */ +#endif /* CONFIG_POSIX_FALLOCATE */ if (!new_layout) goto done; diff --git a/fio.h b/fio.h index db08aff..f0babaf 100644 --- a/fio.h +++ b/fio.h @@ -42,7 +42,7 @@ struct thread_data; #include "stat.h" #include "flow.h" -#ifdef FIO_HAVE_SOLARISAIO +#ifdef CONFIG_SOLARISAIO #include <sys/asynch.h> #endif @@ -411,8 +411,6 @@ static inline int should_fsync(struct thread_data *td) { if (td->last_was_sync) return 0; - if (td->o.odirect) - return 0; if (td_write(td) || td_rw(td) || td->o.override_sync) return 1; diff --git a/hash.h b/hash.h index 13600f4..02b0614 100644 --- a/hash.h +++ b/hash.h @@ -28,7 +28,7 @@ #error Define GOLDEN_RATIO_PRIME for your wordsize. #endif -#define GR_PRIME_64 0x9e37fffffffc0001UL +#define GR_PRIME_64 0x9e37fffffffc0001ULL static inline unsigned long __hash_long(unsigned long val) { diff --git a/lib/getopt.h b/lib/getopt.h index 84272c0..bc8a268 100644 --- a/lib/getopt.h +++ b/lib/getopt.h @@ -1,4 +1,4 @@ -#ifndef CONFIG_GETOPT_LONG_ONLY +#ifdef CONFIG_GETOPT_LONG_ONLY #include <getopt.h> diff --git a/lib/getrusage.c b/lib/getrusage.c new file mode 100644 index 0000000..96dcf6d --- /dev/null +++ b/lib/getrusage.c @@ -0,0 +1,14 @@ +#include <errno.h> +#include "getrusage.h" + +int fio_getrusage(struct rusage *ru) +{ +#ifdef CONFIG_RUSAGE_THREAD + if (!getrusage(RUSAGE_THREAD, ru)) + return 0; + if (errno != EINVAL) + return -1; + /* Fall through to RUSAGE_SELF */ +#endif + return getrusage(RUSAGE_SELF, ru); +} diff --git a/lib/getrusage.h b/lib/getrusage.h new file mode 100644 index 0000000..49e6427 --- /dev/null +++ b/lib/getrusage.h @@ -0,0 +1,9 @@ +#ifndef FIO_GETRUSAGE_H +#define FIO_GETRUSAGE_H + +#include <sys/time.h> +#include <sys/resource.h> + +extern int fio_getrusage(struct rusage *ru); + +#endif diff --git a/options.c b/options.c index 1461640..9d49ff1 100644 --- a/options.c +++ b/options.c @@ -1300,12 +1300,12 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .help = "POSIX asynchronous IO", }, #endif -#ifdef FIO_HAVE_SOLARISAIO +#ifdef CONFIG_SOLARISAIO { .ival = "solarisaio", .help = "Solaris native asynchronous IO", }, #endif -#ifdef FIO_HAVE_WINDOWSAIO +#ifdef CONFIG_WINDOWSAIO { .ival = "windowsaio", .help = "Windows native asynchronous IO" }, @@ -1355,12 +1355,12 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .help = "Fusion-io atomic write engine", }, #endif -#ifdef FIO_HAVE_E4_ENG +#ifdef CONFIG_LINUX_EXT4_MOVE_EXTENT { .ival = "e4defrag", .help = "ext4 defrag engine", }, #endif -#ifdef FIO_HAVE_FALLOC_ENG +#ifdef CONFIG_LINUX_FALLOCATE { .ival = "falloc", .help = "fallocate() file based engine", }, @@ -1695,7 +1695,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .parent = "nrfiles", .hide = 1, }, -#ifdef FIO_HAVE_FALLOCATE +#ifdef CONFIG_POSIX_FALLOCATE { .name = "fallocate", .lname = "Fallocate", @@ -1714,7 +1714,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .oval = FIO_FALLOCATE_POSIX, .help = "Use posix_fallocate()", }, -#ifdef FIO_HAVE_LINUX_FALLOCATE +#ifdef CONFIG_LINUX_FALLOCATE { .ival = "keep", .oval = FIO_FALLOCATE_KEEP_SIZE, .help = "Use fallocate(..., FALLOC_FL_KEEP_SIZE, ...)", @@ -1731,7 +1731,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { }, }, }, -#endif /* FIO_HAVE_FALLOCATE */ +#endif /* CONFIG_POSIX_FALLOCATE */ { .name = "fadvise_hint", .lname = "Fadvise hint", @@ -2193,6 +2193,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = { .name = "experimental_verify", .off1 = td_var_offset(experimental_verify), .type = FIO_OPT_BOOL, + .help = "Enable experimental verification", .category = FIO_OPT_C_IO, .group = FIO_OPT_G_VERIFY, }, diff --git a/os/os-solaris.h b/os/os-solaris.h index de59f77..e661211 100644 --- a/os/os-solaris.h +++ b/os/os-solaris.h @@ -14,7 +14,6 @@ #include "../file.h" -#define FIO_HAVE_SOLARISAIO #define FIO_HAVE_CPU_AFFINITY #define FIO_HAVE_PSHARED_MUTEX #define FIO_HAVE_CHARDEV_SIZE diff --git a/os/os-windows.h b/os/os-windows.h index f68f654..ef71dd7 100644 --- a/os/os-windows.h +++ b/os/os-windows.h @@ -20,9 +20,6 @@ #define FIO_HAVE_ODIRECT #define FIO_HAVE_CPU_AFFINITY #define FIO_HAVE_CHARDEV_SIZE -#define FIO_HAVE_FDATASYNC -#define FIO_HAVE_WINDOWSAIO -#define FIO_HAVE_FALLOCATE #define FIO_HAVE_GETTID #define FIO_USE_GENERIC_RAND diff --git a/os/os.h b/os/os.h index 28bb631..1e924d3 100644 --- a/os/os.h +++ b/os/os.h @@ -58,7 +58,7 @@ typedef struct aiocb os_aiocb_t; #include <scsi/sg.h> #endif -#ifdef CONFIG_STRSEP +#ifndef CONFIG_STRSEP #include "../lib/strsep.h" #endif diff --git a/os/windows/posix.c b/os/windows/posix.c index 67e71c8..05fa5a9 100755 --- a/os/windows/posix.c +++ b/os/windows/posix.c @@ -547,11 +547,21 @@ int getrusage(int who, struct rusage *r_usage) const uint64_t SECONDS_BETWEEN_1601_AND_1970 = 11644473600; FILETIME cTime, eTime, kTime, uTime; time_t time; + HANDLE h; memset(r_usage, 0, sizeof(*r_usage)); - HANDLE hProcess = GetCurrentProcess(); - GetProcessTimes(hProcess, &cTime, &eTime, &kTime, &uTime); + if (who == RUSAGE_SELF) { + h = GetCurrentProcess(); + GetProcessTimes(h, &cTime, &eTime, &kTime, &uTime); + } else if (who == RUSAGE_THREAD) { + h = GetCurrentThread(); + GetThreadTimes(h, &cTime, &eTime, &kTime, &uTime); + } else { + log_err("fio: getrusage %d is not implemented\n", who); + return -1; + } + time = ((uint64_t)uTime.dwHighDateTime << 32) + uTime.dwLowDateTime; /* Divide by 10,000,000 to get the number of seconds and move the epoch from * 1601 to 1970 */ diff --git a/os/windows/posix/include/sys/resource.h b/os/windows/posix/include/sys/resource.h index 837d657..fd46b28 100644 --- a/os/windows/posix/include/sys/resource.h +++ b/os/windows/posix/include/sys/resource.h @@ -2,6 +2,7 @@ #define SYS_RESOURCE_H #define RUSAGE_SELF 0 +#define RUSAGE_THREAD 1 struct rusage { diff --git a/parse.c b/parse.c index f349744..a0b18e2 100644 --- a/parse.c +++ b/parse.c @@ -1094,6 +1094,9 @@ void option_init(struct fio_option *o) o->maxval = UINT_MAX; } if (o->type == FIO_OPT_FLOAT_LIST) { +#ifndef NAN +#define NAN __builtin_nanf("") +#endif o->minfp = NAN; o->maxfp = NAN; } diff --git a/stat.c b/stat.c index 2e78242..7cf66f0 100644 --- a/stat.c +++ b/stat.c @@ -11,17 +11,13 @@ #include "diskutil.h" #include "lib/ieee754.h" #include "json.h" +#include "lib/getrusage.h" void update_rusage_stat(struct thread_data *td) { struct thread_stat *ts = &td->ts; -#ifdef RUSAGE_THREAD - getrusage(RUSAGE_THREAD, &td->ru_end); -#else - getrusage(RUSAGE_SELF, &td->ru_end); -#endif - + fio_getrusage(&td->ru_end); ts->usr_time += mtime_since(&td->ru_start.ru_utime, &td->ru_end.ru_utime); ts->sys_time += mtime_since(&td->ru_start.ru_stime, -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html