Re: Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jens,
With the new io_limit option, is it possible to do the following:
Have the disk size be 1TB and use 1GB file size and make it use the 1TB
space randomly and not confine to the first 1GB.
I.e. Use the entire disk in a sparse and random order repeatedly for n
iterations. If yes can you provide a config.

Thanks
-ajoy

On 5/2/14 7:18 AM, "Jens Axboe" <axboe@xxxxxxxxx> wrote:

>The following changes since commit
>8b89b91bb0b6e6321652619ce405a702c2b4e4e0:
>
>  Merge branch 'master' of ssh://git.kernel.dk/data/git/fio (2014-04-23
>09:59:05 -0600)
>
>are available in the git repository at:
>
>
>  git://git.kernel.dk/fio.git master
>
>for you to fetch changes up to 435228488ffd062f4eac710aaa862e04cd20dfee:
>
>  Avoid buildenv conditional in thread_option struct (2014-05-01 11:21:56
>-0600)
>
>----------------------------------------------------------------
>Bruce Cran (1):
>      Windows: always open files in binary mode
>
>Daniel Gollub (7):
>      Fix gfio build due to disk_stat struct seperation
>      Rename time.h for third-party include of fio.h
>      Replace CONFIG_CPU_COUNT with plain CPU_COUNT
>      distinguish internal/ext. builds with FIO_INTERNAL
>      Avoid double-declaration of ARRAY_SIZE
>      Avoid double declaration of leXX_to_cpu
>      Avoid buildenv conditional in thread_option struct
>
>Danny Al-Gaaf (1):
>      crc/test.c: fix include of time.h
>
>Jens Axboe (2):
>      Add option for io_limit
>      Makefile: clean all *.d dependency files on make clean
>
> HOWTO                |    8 ++++++++
> Makefile             |    4 ++--
> backend.c            |   36 +++++++++++++++++++++++++++++-------
> cconv.c              |    2 ++
> configure            |   19 -------------------
> crc/test.c           |    2 +-
> filesetup.c          |   18 +++++++++++++++---
> fio.1                |   12 ++++++++++--
> fio.h                |    4 +++-
> time.h => fio_time.h |    0
> gclient.c            |   24 ++++++++++++------------
> mutex.c              |    2 +-
> options.c            |   24 ++++++++++++++++++++----
> os/os.h              |    5 ++++-
> server.h             |    2 +-
> thread_options.h     |    8 ++++----
> 16 files changed, 112 insertions(+), 58 deletions(-)
> rename time.h => fio_time.h (100%)
>
>---
>
>Diff of recent changes:
>
>diff --git a/HOWTO b/HOWTO
>index f74360d..1c89d75 100644
>--- a/HOWTO
>+++ b/HOWTO
>@@ -430,6 +430,14 @@ size=int	The total size of file io for this job. Fio
>will run until
> 		is given, fio will use 20% of the full size of the given
> 		files or devices.
> 
>+io_limit=int	Normally fio operates within the region set by 'size', which
>+		means that the 'size' option sets both the region and size of
>+		IO to be performed. Sometimes that is not what you want. With
>+		this option, it is possible to define just the amount of IO
>+		that fio should do. For instance, if 'size' is set to 20G and
>+		'io_limit' is set to 5G, fio will perform IO within the first
>+		20G but exit when 5G have been done.
>+
> filesize=int	Individual file sizes. May be a range, in which case fio
> 		will select sizes for files at random within the given range
> 		and limited to 'size' in total (if that is given). If not
>diff --git a/Makefile b/Makefile
>index 3c9e0ee..a0f0f71 100644
>--- a/Makefile
>+++ b/Makefile
>@@ -15,7 +15,7 @@ include config-host.mak
> endif
> 
> DEBUGFLAGS = -D_FORTIFY_SOURCE=2 -DFIO_INC_DEBUG
>-CPPFLAGS= -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(DEBUGFLAGS)
>+CPPFLAGS= -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DFIO_INTERNAL
>$(DEBUGFLAGS)
> OPTFLAGS= -O3 -g -ffast-math
> CFLAGS	= -std=gnu99 -Wwrite-strings -Wall -Wdeclaration-after-statement
>$(OPTFLAGS) $(EXTFLAGS) $(BUILD_CFLAGS)
> LIBS	+= -lm $(EXTLIBS)
>@@ -274,7 +274,7 @@ t/lfsr-test: $(T_LFSR_TEST_OBJS)
> 	$(QUIET_LINK)$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(T_LFSR_TEST_OBJS)
>$(LIBS)
> 
> clean: FORCE
>-	-rm -f .depend $(FIO_OBJS) $(GFIO_OBJS) $(OBJS) $(T_OBJS) $(PROGS)
>$(T_PROGS) core.* core gfio FIO-VERSION-FILE *.d config-host.mak
>config-host.h
>+	-rm -f .depend $(FIO_OBJS) $(GFIO_OBJS) $(OBJS) $(T_OBJS) $(PROGS)
>$(T_PROGS) core.* core gfio FIO-VERSION-FILE *.d lib/*.d crc/*.d
>engines/*.d profiles/*.d t/*.d config-host.mak config-host.h
> 
> distclean: clean FORCE
> 	@rm -f cscope.out fio.pdf fio_generate_plots.pdf fio2gnuplot.pdf
>diff --git a/backend.c b/backend.c
>index 12e562b..9deef28 100644
>--- a/backend.c
>+++ b/backend.c
>@@ -645,7 +645,7 @@ static unsigned int exceeds_number_ios(struct
>thread_data *td)
> 
> static int io_bytes_exceeded(struct thread_data *td)
> {
>-	unsigned long long bytes;
>+	unsigned long long bytes, limit;
> 
> 	if (td_rw(td))
> 		bytes = td->this_io_bytes[DDIR_READ] + td->this_io_bytes[DDIR_WRITE];
>@@ -656,7 +656,12 @@ static int io_bytes_exceeded(struct thread_data *td)
> 	else
> 		bytes = td->this_io_bytes[DDIR_TRIM];
> 
>-	return bytes >= td->o.size || exceeds_number_ios(td);
>+	if (td->o.io_limit)
>+		limit = td->o.io_limit;
>+	else
>+		limit = td->o.size;
>+
>+	return bytes >= limit || exceeds_number_ios(td);
> }
> 
> /*
>@@ -1141,6 +1146,8 @@ static int switch_ioscheduler(struct thread_data
>*td)
> 
> static int keep_running(struct thread_data *td)
> {
>+	unsigned long long limit;
>+
> 	if (td->done)
> 		return 0;
> 	if (td->o.time_based)
>@@ -1152,14 +1159,19 @@ static int keep_running(struct thread_data *td)
> 	if (exceeds_number_ios(td))
> 		return 0;
> 
>-	if (td->o.size != -1ULL && ddir_rw_sum(td->io_bytes) < td->o.size) {
>+	if (td->o.io_limit)
>+		limit = td->o.io_limit;
>+	else
>+		limit = td->o.size;
>+
>+	if (limit != -1ULL && ddir_rw_sum(td->io_bytes) < limit) {
> 		uint64_t diff;
> 
> 		/*
> 		 * If the difference is less than the minimum IO size, we
> 		 * are done.
> 		 */
>-		diff = td->o.size - ddir_rw_sum(td->io_bytes);
>+		diff = limit - ddir_rw_sum(td->io_bytes);
> 		if (diff < td_max_bs(td))
> 			return 0;
> 
>@@ -1327,6 +1339,7 @@ static void *thread_main(void *data)
> #ifdef CONFIG_LIBNUMA
> 	/* numa node setup */
> 	if (o->numa_cpumask_set || o->numa_memmask_set) {
>+		struct bitmask *mask;
> 		int ret;
> 
> 		if (numa_available() < 0) {
>@@ -1335,7 +1348,9 @@ static void *thread_main(void *data)
> 		}
> 
> 		if (o->numa_cpumask_set) {
>-			ret = numa_run_on_node_mask(o->numa_cpunodesmask);
>+			mask = numa_parse_nodestring(o->numa_cpunodes);
>+			ret = numa_run_on_node_mask(mask);
>+			numa_free_nodemask(mask);
> 			if (ret == -1) {
> 				td_verror(td, errno, \
> 					"numa_run_on_node_mask failed\n");
>@@ -1345,12 +1360,16 @@ static void *thread_main(void *data)
> 
> 		if (o->numa_memmask_set) {
> 
>+			mask = NULL;
>+			if (o->numa_memnodes)
>+				mask = numa_parse_nodestring(o->numa_memnodes);
>+
> 			switch (o->numa_mem_mode) {
> 			case MPOL_INTERLEAVE:
>-				numa_set_interleave_mask(o->numa_memnodesmask);
>+				numa_set_interleave_mask(mask);
> 				break;
> 			case MPOL_BIND:
>-				numa_set_membind(o->numa_memnodesmask);
>+				numa_set_membind(mask);
> 				break;
> 			case MPOL_LOCAL:
> 				numa_set_localalloc();
>@@ -1363,6 +1382,9 @@ static void *thread_main(void *data)
> 				break;
> 			}
> 
>+			if (mask)
>+				numa_free_nodemask(mask);
>+
> 		}
> 	}
> #endif
>diff --git a/cconv.c b/cconv.c
>index ee3b0ca..2f7177d 100644
>--- a/cconv.c
>+++ b/cconv.c
>@@ -80,6 +80,7 @@ void convert_thread_options_to_cpu(struct
>thread_options *o,
> 	o->iodepth_batch = le32_to_cpu(top->iodepth_batch);
> 	o->iodepth_batch_complete = le32_to_cpu(top->iodepth_batch_complete);
> 	o->size = le64_to_cpu(top->size);
>+	o->io_limit = le64_to_cpu(top->io_limit);
> 	o->size_percent = le32_to_cpu(top->size_percent);
> 	o->fill_device = le32_to_cpu(top->fill_device);
> 	o->file_append = le32_to_cpu(top->file_append);
>@@ -428,6 +429,7 @@ void convert_thread_options_to_net(struct
>thread_options_pack *top,
> 	memcpy(top->buffer_pattern, o->buffer_pattern, MAX_PATTERN_SIZE);
> 
> 	top->size = __cpu_to_le64(o->size);
>+	top->io_limit = __cpu_to_le64(o->io_limit);
> 	top->verify_backlog = __cpu_to_le64(o->verify_backlog);
> 	top->start_delay = __cpu_to_le64(o->start_delay);
> 	top->start_delay_high = __cpu_to_le64(o->start_delay_high);
>diff --git a/configure b/configure
>index 4757d67..2ba1daf 100755
>--- a/configure
>+++ b/configure
>@@ -652,22 +652,6 @@ echo "sched_setaffinity(3 arg)
>$linux_3arg_affinity"
> echo "sched_setaffinity(2 arg)      $linux_2arg_affinity"
> 
> ##########################################
>-# CPU_COUNT test
>-cpu_count="no"
>-cat > $TMPC << EOF
>-#include <sched.h>
>-int main(int argc, char **argv)
>-{
>-  cpu_set_t mask;
>-  return CPU_COUNT(&mask);
>-}
>-EOF
>-if compile_prog "" "" "cpu_count"; then
>-  cpu_count="yes"
>-fi
>-echo "CPU_COUNT                     $cpu_count"
>-
>-##########################################
> # clock_gettime probe
> clock_gettime="no"
> cat > $TMPC << EOF
>@@ -1335,9 +1319,6 @@ fi
> if test "$rbd" = "yes" ; then
>   output_sym "CONFIG_RBD"
> fi
>-if test "$cpu_count" = "yes" ; then
>-  output_sym "CONFIG_CPU_COUNT"
>-fi
> if test "$setvbuf" = "yes" ; then
>   output_sym "CONFIG_SETVBUF"
> fi
>diff --git a/crc/test.c b/crc/test.c
>index 2cc7c0f..3773b71 100644
>--- a/crc/test.c
>+++ b/crc/test.c
>@@ -4,7 +4,7 @@
> 
> #include "../fio.h"
> #include "../gettime.h"
>-#include "../time.h"
>+#include "../fio_time.h"
> #include "../verify.h"
> 
> #include "../crc/md5.h"
>diff --git a/filesetup.c b/filesetup.c
>index 79eea9f..ad7fb85 100644
>--- a/filesetup.c
>+++ b/filesetup.c
>@@ -69,6 +69,10 @@ static int extend_file(struct thread_data *td, struct
>fio_file *f)
> 	if (new_layout)
> 		flags |= O_TRUNC;
> 
>+#ifdef WIN32
>+	flags |= _O_BINARY;
>+#endif
>+
> 	dprint(FD_FILE, "open file %s, flags %x\n", f->file_name, flags);
> 	f->fd = open(f->file_name, flags, 0644);
> 	if (f->fd < 0) {
>@@ -481,6 +485,10 @@ int file_lookup_open(struct fio_file *f, int flags)
> 		from_hash = 0;
> 	}
> 
>+#ifdef WIN32
>+	flags |= _O_BINARY;
>+#endif
>+
> 	f->fd = open(f->file_name, flags, 0600);
> 	return from_hash;
> }
>@@ -944,8 +952,12 @@ int setup_files(struct thread_data *td)
> 	 * iolog already set the total io size, if we read back
> 	 * stored entries.
> 	 */
>-	if (!o->read_iolog_file)
>-		td->total_io_size = o->size * o->loops;
>+	if (!o->read_iolog_file) {
>+		if (o->io_limit)
>+			td->total_io_size = o->io_limit * o->loops;
>+		else
>+			td->total_io_size = o->size * o->loops;
>+	}
> 
> done:
> 	if (o->create_only)
>@@ -1036,7 +1048,7 @@ int init_random_map(struct thread_data *td)
> 			unsigned long seed;
> 
> 			seed = td->rand_seeds[FIO_RAND_BLOCK_OFF];
>-			
>+
> 			if (!lfsr_init(&f->lfsr, blocks, seed, 0))
> 				continue;
> 		} else if (!td->o.norandommap) {
>diff --git a/fio.1 b/fio.1
>index 8cf3778..eeb036e 100644
>--- a/fio.1
>+++ b/fio.1
>@@ -369,8 +369,16 @@ Unless \fBnrfiles\fR and \fBfilesize\fR options are
>given, this amount will be
> divided between the available files for the job. If not set, fio will
>use the
> full size of the given files or devices. If the files do not exist, size
> must be given. It is also possible to give size as a percentage between
>1 and
>-100. If size=20% is given, fio will use 20% of the full size of the
>given files
>-or devices.
>+100. If size=20% is given, fio will use 20% of the full size of the given
>+files or devices.
>+.TP
>+.BI io_limit \fR=\fPint
>+Normally fio operates within the region set by \fBsize\fR, which means
>that
>+the \fBsize\fR option sets both the region and size of IO to be
>performed.
>+Sometimes that is not what you want. With this option, it is possible to
>+define just the amount of IO that fio should do. For instance, if
>\fBsize\fR
>+is set to 20G and \fBio_limit\fR is set to 5G, fio will perform IO within
>+the first 20G but exit when 5G have been done.
> .TP
> .BI fill_device \fR=\fPbool "\fR,\fB fill_fs" \fR=\fPbool
> Sets size to something really large and waits for ENOSPC (no space left
>on
>diff --git a/fio.h b/fio.h
>index 9eecba3..4d4af0a 100644
>--- a/fio.h
>+++ b/fio.h
>@@ -30,7 +30,7 @@
> #include "helpers.h"
> #include "options.h"
> #include "profile.h"
>-#include "time.h"
>+#include "fio_time.h"
> #include "gettime.h"
> #include "lib/getopt.h"
> #include "lib/rand.h"
>@@ -618,7 +618,9 @@ static inline void td_io_u_free_notify(struct
>thread_data *td)
> extern const char *fio_get_arch_string(int);
> extern const char *fio_get_os_string(int);
> 
>+#ifdef FIO_INTERNAL
> #define ARRAY_SIZE(x) (sizeof((x)) / (sizeof((x)[0])))
>+#endif
> 
> enum {
> 	FIO_OUTPUT_TERSE	= 0,
>diff --git a/fio_time.h b/fio_time.h
>new file mode 100644
>index 0000000..c550a55
>--- /dev/null
>+++ b/fio_time.h
>@@ -0,0 +1,19 @@
>+#ifndef FIO_TIME_H
>+#define FIO_TIME_H
>+
>+extern uint64_t utime_since(struct timeval *, struct timeval *);
>+extern uint64_t utime_since_now(struct timeval *);
>+extern uint64_t mtime_since(struct timeval *, struct timeval *);
>+extern uint64_t mtime_since_now(struct timeval *);
>+extern uint64_t time_since_now(struct timeval *);
>+extern uint64_t mtime_since_genesis(void);
>+extern uint64_t utime_since_genesis(void);
>+extern void usec_spin(unsigned int);
>+extern void usec_sleep(struct thread_data *, unsigned long);
>+extern void fill_start_time(struct timeval *);
>+extern void set_genesis_time(void);
>+extern int ramp_time_over(struct thread_data *);
>+extern int in_ramp_time(struct thread_data *);
>+extern void fio_time_init(void);
>+
>+#endif
>diff --git a/gclient.c b/gclient.c
>index 4360aea..d236f86 100644
>--- a/gclient.c
>+++ b/gclient.c
>@@ -195,39 +195,39 @@ static int __gfio_disk_util_show(GtkWidget
>*res_notebook,
> 	vbox = gtk_hbox_new(TRUE, 3);
> 	gtk_container_add(GTK_CONTAINER(frame), vbox);
> 	entry = new_info_entry_in_frame(vbox, "IOs");
>-	entry_set_int_value(entry, p->dus.ios[0]);
>+	entry_set_int_value(entry, p->dus.s.ios[0]);
> 	entry = new_info_entry_in_frame(vbox, "Merges");
>-	entry_set_int_value(entry, p->dus.merges[0]);
>+	entry_set_int_value(entry, p->dus.s.merges[0]);
> 	entry = new_info_entry_in_frame(vbox, "Sectors");
>-	entry_set_int_value(entry, p->dus.sectors[0]);
>+	entry_set_int_value(entry, p->dus.s.sectors[0]);
> 	entry = new_info_entry_in_frame(vbox, "Ticks");
>-	entry_set_int_value(entry, p->dus.ticks[0]);
>+	entry_set_int_value(entry, p->dus.s.ticks[0]);
> 
> 	frame = gtk_frame_new("Write");
> 	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 2);
> 	vbox = gtk_hbox_new(TRUE, 3);
> 	gtk_container_add(GTK_CONTAINER(frame), vbox);
> 	entry = new_info_entry_in_frame(vbox, "IOs");
>-	entry_set_int_value(entry, p->dus.ios[1]);
>+	entry_set_int_value(entry, p->dus.s.ios[1]);
> 	entry = new_info_entry_in_frame(vbox, "Merges");
>-	entry_set_int_value(entry, p->dus.merges[1]);
>+	entry_set_int_value(entry, p->dus.s.merges[1]);
> 	entry = new_info_entry_in_frame(vbox, "Sectors");
>-	entry_set_int_value(entry, p->dus.sectors[1]);
>+	entry_set_int_value(entry, p->dus.s.sectors[1]);
> 	entry = new_info_entry_in_frame(vbox, "Ticks");
>-	entry_set_int_value(entry, p->dus.ticks[1]);
>+	entry_set_int_value(entry, p->dus.s.ticks[1]);
> 
> 	frame = gtk_frame_new("Shared");
> 	gtk_box_pack_start(GTK_BOX(box), frame, FALSE, FALSE, 2);
> 	vbox = gtk_hbox_new(TRUE, 3);
> 	gtk_container_add(GTK_CONTAINER(frame), vbox);
> 	entry = new_info_entry_in_frame(vbox, "IO ticks");
>-	entry_set_int_value(entry, p->dus.io_ticks);
>+	entry_set_int_value(entry, p->dus.s.io_ticks);
> 	entry = new_info_entry_in_frame(vbox, "Time in queue");
>-	entry_set_int_value(entry, p->dus.time_in_queue);
>+	entry_set_int_value(entry, p->dus.s.time_in_queue);
> 
> 	util = 0.0;
>-	if (p->dus.msec)
>-		util = (double) 100 * p->dus.io_ticks / (double) p->dus.msec;
>+	if (p->dus.s.msec)
>+		util = (double) 100 * p->dus.s.io_ticks / (double) p->dus.s.msec;
> 	if (util > 100.0)
> 		util = 100.0;
> 
>diff --git a/mutex.c b/mutex.c
>index 466e20e..9d10c2c 100644
>--- a/mutex.c
>+++ b/mutex.c
>@@ -15,7 +15,7 @@
> #include "arch/arch.h"
> #include "os/os.h"
> #include "helpers.h"
>-#include "time.h"
>+#include "fio_time.h"
> #include "gettime.h"
> 
> void fio_mutex_remove(struct fio_mutex *mutex)
>diff --git a/options.c b/options.c
>index 50af7b4..9dcb255 100644
>--- a/options.c
>+++ b/options.c
>@@ -554,6 +554,7 @@ static int str_verify_cpus_allowed_cb(void *data,
>const char *input)
> static int str_numa_cpunodes_cb(void *data, char *input)
> {
> 	struct thread_data *td = data;
>+	struct bitmask *verify_bitmask;
> 
> 	if (parse_dryrun())
> 		return 0;
>@@ -563,13 +564,15 @@ static int str_numa_cpunodes_cb(void *data, char
>*input)
> 	 * numa_allocate_nodemask(), so it should be freed by
> 	 * numa_free_nodemask().
> 	 */
>-	td->o.numa_cpunodesmask = numa_parse_nodestring(input);
>-	if (td->o.numa_cpunodesmask == NULL) {
>+	verify_bitmask = numa_parse_nodestring(input);
>+	if (verify_bitmask == NULL) {
> 		log_err("fio: numa_parse_nodestring failed\n");
> 		td_verror(td, 1, "str_numa_cpunodes_cb");
> 		return 1;
> 	}
>+	numa_free_nodemask(verify_bitmask);
> 
>+	td->o.numa_cpunodes = strdup(input);
> 	td->o.numa_cpumask_set = 1;
> 	return 0;
> }
>@@ -581,6 +584,7 @@ static int str_numa_mpol_cb(void *data, char *input)
> 		{ "default", "prefer", "bind", "interleave", "local", NULL };
> 	int i;
> 	char *nodelist;
>+	struct bitmask *verify_bitmask;
> 
> 	if (parse_dryrun())
> 		return 0;
>@@ -660,12 +664,15 @@ static int str_numa_mpol_cb(void *data, char *input)
> 		break;
> 	case MPOL_INTERLEAVE:
> 	case MPOL_BIND:
>-		td->o.numa_memnodesmask = numa_parse_nodestring(nodelist);
>-		if (td->o.numa_memnodesmask == NULL) {
>+		verify_bitmask = numa_parse_nodestring(nodelist);
>+		if (verify_bitmask == NULL) {
> 			log_err("fio: numa_parse_nodestring failed\n");
> 			td_verror(td, 1, "str_numa_memnodes_cb");
> 			return 1;
> 		}
>+		td->o.numa_memnodes = strdup(nodelist);
>+		numa_free_nodemask(verify_bitmask);
>+                
> 		break;
> 	case MPOL_LOCAL:
> 	case MPOL_DEFAULT:
>@@ -1595,6 +1602,15 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
> 		.group	= FIO_OPT_G_INVALID,
> 	},
> 	{
>+		.name	= "io_limit",
>+		.lname	= "IO Limit",
>+		.type	= FIO_OPT_STR_VAL,
>+		.off1	= td_var_offset(io_limit),
>+		.interval = 1024 * 1024,
>+		.category = FIO_OPT_C_IO,
>+		.group	= FIO_OPT_G_INVALID,
>+	},
>+	{
> 		.name	= "fill_device",
> 		.lname	= "Fill device",
> 		.alias	= "fill_fs",
>diff --git a/os/os.h b/os/os.h
>index 2f2d069..b8eee66 100644
>--- a/os/os.h
>+++ b/os/os.h
>@@ -200,6 +200,7 @@ static inline uint64_t fio_swap64(uint64_t val)
> #endif
> #endif /* FIO_HAVE_BYTEORDER_FUNCS */
> 
>+#ifdef FIO_INTERNAL
> #define le16_to_cpu(val) ({			\
> 	__le16_to_cpu(val);			\
> })
>@@ -209,6 +210,8 @@ static inline uint64_t fio_swap64(uint64_t val)
> #define le64_to_cpu(val) ({			\
> 	__le64_to_cpu(val);				\
> })
>+#endif
>+
> #define cpu_to_le16(val) ({			\
> 	__cpu_to_le16(val);			\
> })
>@@ -321,7 +324,7 @@ static inline unsigned int cpus_online(void)
> }
> #endif
> 
>-#ifndef CONFIG_CPU_COUNT
>+#ifndef CPU_COUNT
> #ifdef FIO_HAVE_CPU_AFFINITY
> static inline int CPU_COUNT(os_cpu_mask_t *mask)
> {
>diff --git a/server.h b/server.h
>index 2958e73..4f09f28 100644
>--- a/server.h
>+++ b/server.h
>@@ -38,7 +38,7 @@ struct fio_net_cmd_reply {
> };
> 
> enum {
>-	FIO_SERVER_VER			= 33,
>+	FIO_SERVER_VER			= 34,
> 
> 	FIO_SERVER_MAX_FRAGMENT_PDU	= 1024,
> 	FIO_SERVER_MAX_CMD_MB		= 2048,
>diff --git a/thread_options.h b/thread_options.h
>index 4642120..57d84db 100644
>--- a/thread_options.h
>+++ b/thread_options.h
>@@ -52,6 +52,7 @@ struct thread_options {
> 	unsigned int iodepth_batch_complete;
> 
> 	unsigned long long size;
>+	unsigned long long io_limit;
> 	unsigned int size_percent;
> 	unsigned int fill_device;
> 	unsigned int file_append;
>@@ -157,14 +158,12 @@ struct thread_options {
> 	os_cpu_mask_t verify_cpumask;
> 	unsigned int verify_cpumask_set;
> 	unsigned int cpus_allowed_policy;
>-#ifdef CONFIG_LIBNUMA
>-	struct bitmask *numa_cpunodesmask;
>+	char *numa_cpunodes;
> 	unsigned int numa_cpumask_set;
> 	unsigned short numa_mem_mode;
> 	unsigned int numa_mem_prefer_node;
>-	struct bitmask *numa_memnodesmask;
>+	char *numa_memnodes;
> 	unsigned int numa_memmask_set;
>-#endif
> 	unsigned int iolog;
> 	unsigned int rwmixcycle;
> 	unsigned int rwmix[DDIR_RWDIR_CNT];
>@@ -280,6 +279,7 @@ struct thread_options_pack {
> 	uint32_t iodepth_batch_complete;
> 
> 	uint64_t size;
>+	uint64_t io_limit;
> 	uint32_t size_percent;
> 	uint32_t fill_device;
> 	uint32_t file_append;
>diff --git a/time.h b/time.h
>deleted file mode 100644
>index c550a55..0000000
>--- a/time.h
>+++ /dev/null
>@@ -1,19 +0,0 @@
>-#ifndef FIO_TIME_H
>-#define FIO_TIME_H
>-
>-extern uint64_t utime_since(struct timeval *, struct timeval *);
>-extern uint64_t utime_since_now(struct timeval *);
>-extern uint64_t mtime_since(struct timeval *, struct timeval *);
>-extern uint64_t mtime_since_now(struct timeval *);
>-extern uint64_t time_since_now(struct timeval *);
>-extern uint64_t mtime_since_genesis(void);
>-extern uint64_t utime_since_genesis(void);
>-extern void usec_spin(unsigned int);
>-extern void usec_sleep(struct thread_data *, unsigned long);
>-extern void fill_start_time(struct timeval *);
>-extern void set_genesis_time(void);
>-extern int ramp_time_over(struct thread_data *);
>-extern int in_ramp_time(struct thread_data *);
>-extern void fio_time_init(void);
>-
>-#endif
>--
>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


--
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




[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux