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)
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
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
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 \
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
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
$(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
#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;
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;
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
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
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
--cc=*)
CC="$optarg"
;;
+ --extra-cflags=*)
+ CFLAGS="$CFLAGS $optarg"
+ ;;
--enable-gfio)
gfio="yes"
;;
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
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
;;
esac
-if test -z $CC; then
+if test -z "$CC" ; then
if test "$targetos" = "FreeBSD"; then
if has clang; then
CC=clang
linux_2arg_affinity="no"
linux_3arg_affinity="no"
cat > $TMPC << EOF
-#define _GNU_SOURCE
#include <sched.h>
int main(int argc, char **argv)
{
linux_3arg_affinity="yes"
else
cat > $TMPC << EOF
-#define _GNU_SOURCE
#include <sched.h>
int main(int argc, char **argv)
{
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)
# splice probe
linux_splice="no"
cat > $TMPC << EOF
-#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char **argv)
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
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
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
*
* 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
*
* 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/
#include "hash.h"
#include "lib/axmap.h"
-#ifdef FIO_HAVE_LINUX_FALLOCATE
+#ifdef CONFIG_LINUX_FALLOCATE
#include <linux/falloc.h>
#endif
return 1;
}
-#ifdef FIO_HAVE_FALLOCATE
+#ifdef CONFIG_POSIX_FALLOCATE
if (!td->o.fill_device) {
switch (td->o.fallocate_mode) {
case FIO_FALLOCATE_NONE:
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) "
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;
#include "stat.h"
#include "flow.h"
-#ifdef FIO_HAVE_SOLARISAIO
+#ifdef CONFIG_SOLARISAIO
#include <sys/asynch.h>
#endif
{
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;
#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)
{
-#ifndef CONFIG_GETOPT_LONG_ONLY
+#ifdef CONFIG_GETOPT_LONG_ONLY
#include <getopt.h>
--- /dev/null
+#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);
+}
--- /dev/null
+#ifndef FIO_GETRUSAGE_H
+#define FIO_GETRUSAGE_H
+
+#include <sys/time.h>
+#include <sys/resource.h>
+
+extern int fio_getrusage(struct rusage *ru);
+
+#endif
.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"
},
.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",
},
.parent = "nrfiles",
.hide = 1,
},
-#ifdef FIO_HAVE_FALLOCATE
+#ifdef CONFIG_POSIX_FALLOCATE
{
.name = "fallocate",
.lname = "Fallocate",
.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, ...)",
},
},
},
-#endif /* FIO_HAVE_FALLOCATE */
+#endif /* CONFIG_POSIX_FALLOCATE */
{
.name = "fadvise_hint",
.lname = "Fadvise hint",
.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,
},
#include "../file.h"
-#define FIO_HAVE_SOLARISAIO
#define FIO_HAVE_CPU_AFFINITY
#define FIO_HAVE_PSHARED_MUTEX
#define FIO_HAVE_CHARDEV_SIZE
#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
#include <scsi/sg.h>
#endif
-#ifdef CONFIG_STRSEP
+#ifndef CONFIG_STRSEP
#include "../lib/strsep.h"
#endif
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 */
#define SYS_RESOURCE_H\r
\r
#define RUSAGE_SELF 0\r
+#define RUSAGE_THREAD 1\r
\r
struct rusage\r
{\r
o->maxval = UINT_MAX;
}
if (o->type == FIO_OPT_FLOAT_LIST) {
+#ifndef NAN
+#define NAN __builtin_nanf("")
+#endif
o->minfp = NAN;
o->maxfp = NAN;
}
#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,