Merge branch 'master' into gfio
authorJens Axboe <axboe@kernel.dk>
Tue, 29 Jan 2013 09:09:55 +0000 (10:09 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 29 Jan 2013 09:09:55 +0000 (10:09 +0100)
Conflicts:
Makefile
configure
options.c

Signed-off-by: Jens Axboe <axboe@kernel.dk>
19 files changed:
Makefile
backend.c
configure
engines/guasi.c
engines/rdma.c
filesetup.c
fio.h
hash.h
lib/getopt.h
lib/getrusage.c [new file with mode: 0644]
lib/getrusage.h [new file with mode: 0644]
options.c
os/os-solaris.h
os/os-windows.h
os/os.h
os/windows/posix.c
os/windows/posix/include/sys/resource.h
parse.c
stat.c

index 9d3465c40086719b52ccc161d8ff3455992b5637..038eacf14f91420e1450d732e5a57f59f0faaca1 100644 (file)
--- 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
index 48b00b685ae7bb0310b3df48d2044b08e80b1081..9aa2a28551234220b6b1ba12c3f504eff0e16075 100644 (file)
--- 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;
index af2c1d97f6667aa20a4de571b09abc022e3fe3df..ff87acc58b54d2ed460a29658b41656ac0c5db8e 100755 (executable)
--- 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
index 6faae8d0bfc2054ea542f31181b3f888437ea06c..c9c742959902793f34e98f94acb9b61be7a7bb86 100644 (file)
@@ -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
  *
index a847b541d3a0927dd3b575fa5a38fb3dc5832ff4..e1fb380a044c6680ee03e4b2a526164495a6aaf7 100644 (file)
@@ -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/
index c2170aae2ad44401d04231d1fdceefc8b81dabb2..8262ed3deddd71440724aad527d3480ce0c00573 100644 (file)
@@ -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 db08aff8bdfcc07cbe51981b0380f67f1e064925..f0babafede7119fbda8200199e7d1f36b1b4c5a0 100644 (file)
--- 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 13600f4e5e4b3602df1e59636e3d687b1ce0dc82..02b06140146b469abd05772406102fec845747fc 100644 (file)
--- 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)
 {
index 84272c0c8c288a3d0e5e8a6c2ce493d78c583999..bc8a2684495cf4cafa692dea4f11597823347ecf 100644 (file)
@@ -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 (file)
index 0000000..96dcf6d
--- /dev/null
@@ -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 (file)
index 0000000..49e6427
--- /dev/null
@@ -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
index 14616408dcd0da3953f764289b0196309220af70..9d49ff1702977a06d846ff82bf6800e3ddbc2c56 100644 (file)
--- 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,
        },
index de59f774d7fb1a8c51b9da20acf00c61923444da..e6612118ace4baf7afcae38eb9a7126ca45af10e 100644 (file)
@@ -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
index f68f654c8c832ba8be0aea618d3b622c7377cc48..ef71dd708c56c04912f40f8d5a4c8a97f1a18370 100644 (file)
@@ -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 28bb6319f216e095c04324163cd3bf90b65a2077..1e924d3360b423201cab1cfce1288864d8559c5e 100644 (file)
--- 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
 
index 67e71c8eabe57a0f2041c78a10cab9ac7c133ec0..05fa5a97a6e115c3c424563e8d832ef4761eeb1c 100755 (executable)
@@ -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 */
index 837d65778456a7cb51db564569c1a37c824abc09..fd46b2887fc4e7a97532aed79c50bdf0ea735914 100644 (file)
@@ -2,6 +2,7 @@
 #define SYS_RESOURCE_H\r
 \r
 #define RUSAGE_SELF    0\r
+#define RUSAGE_THREAD  1\r
 \r
 struct rusage\r
 {\r
diff --git a/parse.c b/parse.c
index f3497440aade02ca875dc7c0f9e07469c4030595..a0b18e26e85af4081fc32b982250e5e500b1d874 100644 (file)
--- 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 2e7824295600385430d724db60c4dfd574870907..7cf66f0075217c238cd7fc93846e39fd476e3c11 100644 (file)
--- a/stat.c
+++ b/stat.c
 #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,