The following changes since commit b24f59ab5ac96a67a016dc921687b0feae9bbf94:
Detect Windows operating system in ./configure (2014-03-06 14:31:57 -0700)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 3939fe853fd146378811a05b78731d7f20d0152f:
Add exceeds_number_ios() helper (2014-03-11 20:16:38 -0600)
----------------------------------------------------------------
Jens Axboe (2):
Try a little harder to honor number_ios more accurately
Add exceeds_number_ios() helper
Sébastien Bouchex Bellomié (1):
Fix pointer alignment bug causing SIGBUS on Sparc64
backend.c | 17 ++++++++++++++++-
io_u.c | 3 ---
os/os.h | 18 ++++++------------
thread_options.h | 2 +-
4 files changed, 23 insertions(+), 17 deletions(-)
---
Diff of recent changes:
diff --git a/backend.c b/backend.c
index 992033c..1ff8b3f 100644
--- a/backend.c
+++ b/backend.c
@@ -623,6 +623,19 @@ reap:
dprint(FD_VERIFY, "exiting loop\n");
}
+static unsigned int exceeds_number_ios(struct thread_data *td)
+{
+ unsigned long long number_ios;
+
+ if (!td->o.number_ios)
+ return 0;
+
+ number_ios = ddir_rw_sum(td->this_io_blocks);
+ number_ios += td->io_u_queued + td->io_u_in_flight;
+
+ return number_ios >= td->o.number_ios;
+}
+
static int io_bytes_exceeded(struct thread_data *td)
{
unsigned long long bytes;
@@ -636,7 +649,7 @@ static int io_bytes_exceeded(struct thread_data *td)
else
bytes = td->this_io_bytes[DDIR_TRIM];
- return bytes >= td->o.size;
+ return bytes >= td->o.size || exceeds_number_ios(td);
}
/*
@@ -1127,6 +1140,8 @@ static int keep_running(struct thread_data *td)
td->o.loops--;
return 1;
}
+ if (exceeds_number_ios(td))
+ return 0;
if (td->o.size != -1ULL && ddir_rw_sum(td->io_bytes) < td->o.size) {
uint64_t diff;
diff --git a/io_u.c b/io_u.c
index 8e27708..0b86d9f 100644
--- a/io_u.c
+++ b/io_u.c
@@ -1595,9 +1595,6 @@ static void account_io_completion(struct thread_data *td,
struct io_u *io_u,
if (!gtod_reduce(td))
add_iops_sample(td, idx, bytes, &icd->time);
-
- if (td->o.number_ios && !--td->o.number_ios)
- td->done = 1;
}
static long long usec_for_io(struct thread_data *td, enum fio_ddir ddir)
diff --git a/os/os.h b/os/os.h
index 7f92d1b..2f2d069 100644
--- a/os/os.h
+++ b/os/os.h
@@ -201,28 +201,22 @@ static inline uint64_t fio_swap64(uint64_t val)
#endif /* FIO_HAVE_BYTEORDER_FUNCS */
#define le16_to_cpu(val) ({ \
- uint16_t *__val = &(val); \
- __le16_to_cpu(*__val); \
+ __le16_to_cpu(val); \
})
#define le32_to_cpu(val) ({ \
- uint32_t *__val = &(val); \
- __le32_to_cpu(*__val); \
+ __le32_to_cpu(val); \
})
#define le64_to_cpu(val) ({ \
- uint64_t *__val = &(val); \
- __le64_to_cpu(*__val); \
+ __le64_to_cpu(val); \
})
#define cpu_to_le16(val) ({ \
- uint16_t *__val = &(val); \
- __cpu_to_le16(*__val); \
+ __cpu_to_le16(val); \
})
#define cpu_to_le32(val) ({ \
- uint32_t *__val = &(val); \
- __cpu_to_le32(*__val); \
+ __cpu_to_le32(val); \
})
#define cpu_to_le64(val) ({ \
- uint64_t *__val = &(val); \
- __cpu_to_le64(*__val); \
+ __cpu_to_le64(val); \
})
#ifndef FIO_HAVE_BLKTRACE
diff --git a/thread_options.h b/thread_options.h
index 4ea6ebd..bacd86b 100644
--- a/thread_options.h
+++ b/thread_options.h
@@ -45,7 +45,7 @@ struct thread_options {
unsigned int kb_base;
unsigned int unit_base;
unsigned int ddir_seq_nr;
- long ddir_seq_add;
+ long long ddir_seq_add;
unsigned int iodepth;
unsigned int iodepth_low;
unsigned int iodepth_batch;
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html