Flexible I/O Tester development
 help / color / mirror / Atom feed
* Add extra_buff_count flag
@ 2009-11-04  0:33 Radha Ramachandran
  2009-11-04  7:35 ` Jens Axboe
  0 siblings, 1 reply; 12+ messages in thread
From: Radha Ramachandran @ 2009-11-04  0:33 UTC (permalink / raw)
  To: Jens Axboe, fio

[-- Attachment #1: Type: text/plain, Size: 704 bytes --]

Hi,
I was trying to use the async_verify option. Looks like if we use this
option for synchronous I/O, then it really doesnt do anything as after
every I/O is completed, we still need the asynchronous verify thread
to complete the verification and release the io_u so the main thread
can allocate this io_u for the next I/O. So to remove this bottle neck
I added a new option extra_buff_count. This takes an integer and the
code will allocate that many more extra io_us. This way when the main
thread has completed the I/O it will have extra io_u and buffers to
issue more I/Os while the asynchronous verify threads do their job.
This can be used with both synchronous and libaio contexts.
Thanks
-radha

[-- Attachment #2: extra_buff_count.patch --]
[-- Type: text/x-diff, Size: 3305 bytes --]

diff --git a/HOWTO b/HOWTO
index cdd6473..71efd10 100644
--- a/HOWTO
+++ b/HOWTO
@@ -872,7 +872,12 @@ verify_async=int	Fio will normally verify IO inline from the submitting
 verify_async_cpus=str	Tell fio to set the given CPU affinity on the
 		async IO verification threads. See cpus_allowed for the
 		format used.
-		
+
+extra_buff_count=int	Allocate extra I/O buffers to continue issuing
+		IO to the file/device. This can be used to keep the device
+		busy with I/Os while the data verification is being
+		done asynchronously.
+
 stonewall	Wait for preceeding jobs in the job file to exit, before
 		starting this one. Can be used to insert serialization
 		points in the job file. A stone wall also implies starting
diff --git a/fio.1 b/fio.1
index 4445d0a..8bee99d 100644
--- a/fio.1
+++ b/fio.1
@@ -627,6 +627,11 @@ allows them to have IO in flight while verifies are running.
 Tell fio to set the given CPU affinity on the async IO verification threads.
 See \fBcpus_allowed\fP for the format used.
 .TP
+.BI extra_buff_count \fR=\fPint
+Allocate extra I/O buffers to continue issuing IO to the file/device.
+This can be used to keep the device busy with I/Os while the data verification
+is being done asynchronously.
+.TP
 .B stonewall
 Wait for preceeding jobs in the job file to exit before starting this one.
 \fBstonewall\fR implies \fBnew_group\fR.
diff --git a/fio.c b/fio.c
index 8f8bb56..ff8d0e7 100644
--- a/fio.c
+++ b/fio.c
@@ -534,7 +534,8 @@ sync_done:
 		 * if we can queue more, do so. but check if there are
 		 * completed io_u's first.
 		 */
-		full = queue_full(td) || ret == FIO_Q_BUSY;
+		full = queue_full(td) || ret == FIO_Q_BUSY ||
+			td->cur_depth == td->o.iodepth;
 		if (full || !td->o.iodepth_batch_complete) {
 			min_events = td->o.iodepth_batch_complete;
 			if (full && !min_events)
@@ -686,7 +687,8 @@ sync_done:
 		/*
 		 * See if we need to complete some commands
 		 */
-		full = queue_full(td) || ret == FIO_Q_BUSY;
+		full = queue_full(td) || ret == FIO_Q_BUSY ||
+			td->cur_depth == td->o.iodepth;
 		if (full || !td->o.iodepth_batch_complete) {
 			min_evts = td->o.iodepth_batch_complete;
 			if (full && !min_evts)
@@ -787,7 +789,7 @@ static int init_io_u(struct thread_data *td)
 	int cl_align, i, max_units;
 	char *p;
 
-	max_units = td->o.iodepth;
+	max_units = td->o.iodepth + td->o.extra_buff_count;
 	max_bs = max(td->o.max_bs[DDIR_READ], td->o.max_bs[DDIR_WRITE]);
 	td->orig_buffer_size = (unsigned long long) max_bs
 					* (unsigned long long) max_units;
diff --git a/fio.h b/fio.h
index e4ed76f..833a03b 100644
--- a/fio.h
+++ b/fio.h
@@ -181,6 +181,7 @@ struct thread_options {
 	unsigned int verify_pattern_bytes;
 	unsigned int verify_fatal;
 	unsigned int verify_async;
+	unsigned int extra_buff_count;
 	unsigned int use_thread;
 	unsigned int unlink;
 	unsigned int do_disk_util;
diff --git a/options.c b/options.c
index 5b88255..71f26fb 100644
--- a/options.c
+++ b/options.c
@@ -1337,6 +1337,13 @@ static struct fio_option options[] = {
 	},
 #endif
 	{
+		.name	= "extra_buff_count",
+		.type	= FIO_OPT_INT,
+		.off1	= td_var_offset(extra_buff_count),
+		.def	= "0",
+		.help	= "Number of extra buffers to allocate",
+	},
+	{
 		.name	= "write_iolog",
 		.type	= FIO_OPT_STR_STORE,
 		.off1	= td_var_offset(write_iolog_file),

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2009-11-05  7:32 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-04  0:33 Add extra_buff_count flag Radha Ramachandran
2009-11-04  7:35 ` Jens Axboe
2009-11-04 17:12   ` Radha Ramachandran
2009-11-04 17:29     ` Jens Axboe
2009-11-04 17:39       ` Radha Ramachandran
2009-11-04 17:41         ` Jens Axboe
2009-11-04 19:22           ` Jens Axboe
2009-11-04 19:31             ` Radha Ramachandran
2009-11-04 19:36               ` Jens Axboe
2009-11-04 20:01                 ` Jens Axboe
2009-11-04 22:50                   ` Radha Ramachandran
2009-11-05  7:32                     ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox