Recent changes

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

 



The following changes since commit c04e4661e4da3b6079f415897e4507cf8e610c54:

  time_based: Avoid restarting main I/O loop (2012-03-16 18:54:15 +0100)

are available in the git repository at:
  git://git.kernel.dk/fio.git master

Jens Axboe (2):
      Enable read/write sequential offset to be a non-multiple of the block size
      Add regression test for 37cf9e3c

Steven Lang (1):
      Added 99.95 and 99.99 default percentiles.

 init.c                    |   32 +++++++++++++++++---------------
 io_u.c                    |   39 +++++++++++++++++++++++++--------------
 t/jobs/t0007-37cf9e3c.fio |   10 ++++++++++
 3 files changed, 52 insertions(+), 29 deletions(-)
 create mode 100644 t/jobs/t0007-37cf9e3c.fio

---

Diff of recent changes:

diff --git a/init.c b/init.c
index 6c74ea6..69ed30c 100644
--- a/init.c
+++ b/init.c
@@ -74,21 +74,23 @@ static char cmd_optstr[256];
 static int did_arg;
 
 const fio_fp64_t def_percentile_list[FIO_IO_U_LIST_MAX_LEN] = {
-	{ .u.f	=  1.0 },
-	{ .u.f	=  5.0 },
-	{ .u.f	= 10.0 },
-	{ .u.f	= 20.0 },
-	{ .u.f	= 30.0 },
-	{ .u.f	= 40.0 },
-	{ .u.f	= 50.0 },
-	{ .u.f	= 60.0 },
-	{ .u.f	= 70.0 },
-	{ .u.f	= 80.0 },
-	{ .u.f	= 90.0 },
-	{ .u.f	= 95.0 },
-	{ .u.f	= 99.0 },
-	{ .u.f	= 99.5 },
-	{ .u.f	= 99.9 },
+	{ .u.f	=  1.00 },
+	{ .u.f	=  5.00 },
+	{ .u.f	= 10.00 },
+	{ .u.f	= 20.00 },
+	{ .u.f	= 30.00 },
+	{ .u.f	= 40.00 },
+	{ .u.f	= 50.00 },
+	{ .u.f	= 60.00 },
+	{ .u.f	= 70.00 },
+	{ .u.f	= 80.00 },
+	{ .u.f	= 90.00 },
+	{ .u.f	= 95.00 },
+	{ .u.f	= 99.00 },
+	{ .u.f	= 99.50 },
+	{ .u.f	= 99.90 },
+	{ .u.f	= 99.95 },
+	{ .u.f	= 99.99 },
 };
 
 #define FIO_CLIENT_FLAG		(1 << 16)
diff --git a/io_u.c b/io_u.c
index 65a144d..a4f378d 100644
--- a/io_u.c
+++ b/io_u.c
@@ -251,8 +251,8 @@ static int get_next_rand_block(struct thread_data *td, struct fio_file *f,
 	return 1;
 }
 
-static int get_next_seq_block(struct thread_data *td, struct fio_file *f,
-			      enum fio_ddir ddir, unsigned long long *b)
+static int get_next_seq_offset(struct thread_data *td, struct fio_file *f,
+			       enum fio_ddir ddir, unsigned long long *offset)
 {
 	assert(ddir_rw(ddir));
 
@@ -269,7 +269,7 @@ static int get_next_seq_block(struct thread_data *td, struct fio_file *f,
 		if (pos)
 			pos += td->o.ddir_seq_add;
 
-		*b = pos / td->o.min_bs[ddir];
+		*offset = pos;
 		return 0;
 	}
 
@@ -277,31 +277,33 @@ static int get_next_seq_block(struct thread_data *td, struct fio_file *f,
 }
 
 static int get_next_block(struct thread_data *td, struct io_u *io_u,
-			  enum fio_ddir ddir, int rw_seq, unsigned long long *b)
+			  enum fio_ddir ddir, int rw_seq)
 {
 	struct fio_file *f = io_u->file;
+	unsigned long long b, offset;
 	int ret;
 
 	assert(ddir_rw(ddir));
 
+	b = offset = -1ULL;
+
 	if (rw_seq) {
 		if (td_random(td))
-			ret = get_next_rand_block(td, f, ddir, b);
+			ret = get_next_rand_block(td, f, ddir, &b);
 		else
-			ret = get_next_seq_block(td, f, ddir, b);
+			ret = get_next_seq_offset(td, f, ddir, &offset);
 	} else {
 		io_u->flags |= IO_U_F_BUSY_OK;
 
 		if (td->o.rw_seq == RW_SEQ_SEQ) {
-			ret = get_next_seq_block(td, f, ddir, b);
+			ret = get_next_seq_offset(td, f, ddir, &offset);
 			if (ret)
-				ret = get_next_rand_block(td, f, ddir, b);
+				ret = get_next_rand_block(td, f, ddir, &b);
 		} else if (td->o.rw_seq == RW_SEQ_IDENT) {
 			if (f->last_start != -1ULL)
-				*b = (f->last_start - f->file_offset)
-					/ td->o.min_bs[ddir];
+				offset = f->last_start - f->file_offset;
 			else
-				*b = 0;
+				offset = 0;
 			ret = 0;
 		} else {
 			log_err("fio: unknown rw_seq=%d\n", td->o.rw_seq);
@@ -309,6 +311,17 @@ static int get_next_block(struct thread_data *td, struct io_u *io_u,
 		}
 	}
 	
+	if (!ret) {
+		if (offset != -1ULL)
+			io_u->offset = offset;
+		else if (b != -1ULL)
+			io_u->offset = b * td->o.ba[ddir];
+		else {
+			log_err("fio: bug in offset generation\n");
+			ret = 1;
+		}
+	}
+
 	return ret;
 }
 
@@ -320,7 +333,6 @@ static int get_next_block(struct thread_data *td, struct io_u *io_u,
 static int __get_next_offset(struct thread_data *td, struct io_u *io_u)
 {
 	struct fio_file *f = io_u->file;
-	unsigned long long b;
 	enum fio_ddir ddir = io_u->ddir;
 	int rw_seq_hit = 0;
 
@@ -331,10 +343,9 @@ static int __get_next_offset(struct thread_data *td, struct io_u *io_u)
 		td->ddir_seq_nr = td->o.ddir_seq_nr;
 	}
 
-	if (get_next_block(td, io_u, ddir, rw_seq_hit, &b))
+	if (get_next_block(td, io_u, ddir, rw_seq_hit))
 		return 1;
 
-	io_u->offset = b * td->o.ba[ddir];
 	if (io_u->offset >= f->io_size) {
 		dprint(FD_IO, "get_next_offset: offset %llu >= io_size %llu\n",
 					io_u->offset, f->io_size);
diff --git a/t/jobs/t0007-37cf9e3c.fio b/t/jobs/t0007-37cf9e3c.fio
new file mode 100644
index 0000000..fd70c21
--- /dev/null
+++ b/t/jobs/t0007-37cf9e3c.fio
@@ -0,0 +1,10 @@
+# Expected result: fio reads 87040KB of data
+# Buggy result: fio reads the full 128MB of data
+[foo]
+size=128mb
+rw=read:512k
+bs=1m
+time_based
+norandommap
+write_iolog=log
+direct=1
--
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