Flexible I/O Tester development
 help / color / mirror / Atom feed
From: Glen Ogilvie <gogilvie@oss.co.nz>
To: fio@vger.kernel.org
Cc: Michael O'Sullivan <michael.osullivan@auckland.ac.nz>
Subject: fio-1.34.1, what we are doing with it and some patches we use.
Date: Fri, 30 Oct 2009 15:25:21 +1300 (NZDT)	[thread overview]
Message-ID: <336580134.59771256869521664.JavaMail.root@zimbra.oss.co.nz> (raw)
In-Reply-To: <321292794.59661256869305878.JavaMail.root@zimbra.oss.co.nz>

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

Dear Jens Axboe and the FIO mailing list.

I have been working with Mike O'Sullivan, a senior lecturer at the University of
Auckland, New Zealand. He has been adapting fio 1.34.1 to work with
iolog files and also to be able to read a "wait" command to allow the iolog file to
specify a wait (in millisecs) before the next io. Mike's not completely
confident that his changes are correct in the overall fio picture, but
they are working with the iolog files we are using. What we did:

1) We incorporated wait into iolog file reading;
2) We made some modifications so that read_iolog worked.

We have attached a patch for fio-1.34.1.tar.bz2 along with some demonstration fio config files and
iolog files.

We are doing this so we can use an open source SPC-1 emulator to
generate SPC-1 like workloads and then run them in fio.

Hope some of this work is useful.   Feed back is welcome, we are not experts in FIO and SPC-1, so this may have problems.

Kind regards, Mike & Glen

[-- Attachment #2: fio-1.34.1-wait.patch --]
[-- Type: text/x-patch, Size: 4937 bytes --]

diff -urN fio-1.34.1-mike/fio.c fio-1.34.1/fio.c
--- fio-1.34.1-mike/fio.c	2009-10-25 17:09:12.000000000 +1300
+++ fio-1.34.1/fio.c	2009-10-02 06:45:31.000000000 +1300
@@ -581,8 +581,7 @@
 	else
 		td_set_runstate(td, TD_RUNNING);
 
-	while ( (td->o.read_iolog_file && !flist_empty(&td->io_log_list)) ||
-	        ((td->this_io_bytes[0] + td->this_io_bytes[1]) < td->o.size) ) {
+	while ((td->this_io_bytes[0] + td->this_io_bytes[1]) < td->o.size) {
 		struct timeval comp_time;
 		unsigned long bytes_done[2] = { 0, 0 };
 		int min_evts = 0;
@@ -620,7 +619,6 @@
 			td_set_runstate(td, TD_RUNNING);
 
 		ret = td_io_queue(td, io_u);
-
 		switch (ret) {
 		case FIO_Q_COMPLETED:
 			if (io_u->error) {
diff -urN fio-1.34.1-mike/io_ddir.h fio-1.34.1/io_ddir.h
--- fio-1.34.1-mike/io_ddir.h	2009-10-23 09:47:25.000000000 +1300
+++ fio-1.34.1/io_ddir.h	2009-10-02 06:45:31.000000000 +1300
@@ -6,7 +6,6 @@
 	DDIR_WRITE,
 	DDIR_SYNC,
 	DDIR_DATASYNC,
-	DDIR_WAIT,
 	DDIR_INVAL = -1,
 };
 
diff -urN fio-1.34.1-mike/io_u.c fio-1.34.1/io_u.c
--- fio-1.34.1-mike/io_u.c	2009-10-25 17:08:37.000000000 +1300
+++ fio-1.34.1/io_u.c	2009-10-02 06:45:31.000000000 +1300
@@ -897,7 +897,6 @@
 	/*
 	 * If using an iolog, grab next piece if any available.
 	 */
-	 
 	if (td->o.read_iolog_file) {
 		if (read_iolog_get(td, io_u))
 			goto err_put;
diff -urN fio-1.34.1-mike/log.c fio-1.34.1/log.c
--- fio-1.34.1-mike/log.c	2006-01-02 08:12:22.000000000 +1300
+++ fio-1.34.1/log.c	2009-10-02 06:45:31.000000000 +1300
@@ -86,7 +86,10 @@
 	switch (ipo->file_action) {
 	case FIO_LOG_OPEN_FILE:
 		ret = td_io_open_file(td, f);
-		if (!ret) break;
+		if (!ret) {
+			free(ipo);
+			break;
+		}
 		td_verror(td, ret, "iolog open file");
 		return -1;
 	case FIO_LOG_CLOSE_FILE:
@@ -106,8 +109,7 @@
 int read_iolog_get(struct thread_data *td, struct io_u *io_u)
 {
 	struct io_piece *ipo;
-	unsigned long elapsed;
-	
+
 	while (!flist_empty(&td->io_log_list)) {
 		int ret;
 
@@ -123,26 +125,20 @@
 			continue;
 		}
 
+		io_u->offset = ipo->offset;
+		io_u->buflen = ipo->len;
 		io_u->ddir = ipo->ddir;
-		if (ipo->ddir != DDIR_WAIT) {
-			io_u->offset = ipo->offset;
-			io_u->buflen = ipo->len;
-			io_u->file = td->files[ipo->fileno];
-			get_file(io_u->file);
-
-			dprint(FD_IO, "iolog: get %llu/%lu/%s\n", io_u->offset,
-						io_u->buflen, io_u->file->file_name);
-			if (ipo->delay) iolog_delay(td, ipo->delay);
-		} else {
-			elapsed = mtime_since_genesis();
-			if (ipo->delay > elapsed)
-				usec_sleep(td, (ipo->delay - elapsed) * 1000);
-				
-		}
+		io_u->file = td->files[ipo->fileno];
+		get_file(io_u->file);
+
+		dprint(FD_IO, "iolog: get %llu/%lu/%s\n", io_u->offset,
+					io_u->buflen, io_u->file->file_name);
+
+		if (ipo->delay)
+			iolog_delay(td, ipo->delay);
 
 		free(ipo);
-		
-		if (ipo->ddir != DDIR_WAIT)	return 0;
+		return 0;
 	}
 
 	td->done = 1;
@@ -245,7 +241,7 @@
 {
 	unsigned long long offset;
 	unsigned int bytes;
-	int reads, writes, waits, fileno = 0, file_action = 0; /* stupid gcc */
+	int reads, writes, fileno = 0, file_action = 0; /* stupid gcc */
 	char *fname, *act;
 	char *str, *p;
 	enum fio_ddir rw;
@@ -260,7 +256,7 @@
 	fname = malloc(256+16);
 	act = malloc(256+16);
 
-	reads = writes = waits = 0;
+	reads = writes = 0;
 	while ((p = fgets(str, 4096, f)) != NULL) {
 		struct io_piece *ipo;
 		int r;
@@ -271,9 +267,6 @@
 			/*
 			 * Check action first
 			 */
-			if (!strcmp(act, "wait")) { /* MJO. 22 Oct 2009 - add wait to the iolog files */
-				rw = DDIR_WAIT;
-			} else 
 			if (!strcmp(act, "read"))
 				rw = DDIR_READ;
 			else if (!strcmp(act, "write"))
@@ -319,9 +312,6 @@
 			if (read_only)
 				continue;
 			writes++;
-		} else if (rw == DDIR_WAIT) {
-			waits++;
-		} else if (rw == DDIR_INVAL) {
 		} else if (!ddir_sync(rw)) {
 			log_err("bad ddir: %d\n", rw);
 			continue;
@@ -333,18 +323,15 @@
 		ipo = malloc(sizeof(*ipo));
 		memset(ipo, 0, sizeof(*ipo));
 		INIT_FLIST_HEAD(&ipo->list);
+		ipo->offset = offset;
+		ipo->len = bytes;
 		ipo->ddir = rw;
-		if (rw == DDIR_WAIT) {
-			ipo->delay = offset;
-		} else {
-			ipo->offset = offset;
-			ipo->len = bytes;
-			if (bytes > td->o.max_bs[rw])
-				td->o.max_bs[rw] = bytes;
+		if (bytes > td->o.max_bs[rw])
+			td->o.max_bs[rw] = bytes;
+		if (rw == DDIR_INVAL) {
 			ipo->fileno = fileno;
 			ipo->file_action = file_action;
 		}
-			
 		queue_io_piece(td, ipo);
 	}
 
@@ -358,7 +345,7 @@
 		writes = 0;
 	}
 
-	if (!reads && !writes && !waits)
+	if (!reads && !writes)
 		return 1;
 	else if (reads && !writes)
 		td->o.td_ddir = TD_DDIR_READ;
diff -urN fio-1.34.1-mike/stat.c fio-1.34.1/stat.c
--- fio-1.34.1-mike/stat.c	2009-10-30 13:38:29.000000000 +1300
+++ fio-1.34.1/stat.c	2009-10-02 06:45:31.000000000 +1300
@@ -594,7 +594,6 @@
 		ts->total_run_time += td->ts.total_run_time;
 		ts->total_submit += td->ts.total_submit;
 		ts->total_complete += td->ts.total_complete;
-
 	}
 
 	for (i = 0; i < nr_ts; i++) {

[-- Attachment #3: sample-fio-files.tar.gz --]
[-- Type: application/x-gzip, Size: 18255 bytes --]

       reply	other threads:[~2009-10-30  2:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <321292794.59661256869305878.JavaMail.root@zimbra.oss.co.nz>
2009-10-30  2:25 ` Glen Ogilvie [this message]
2009-10-31  7:01   ` fio-1.34.1, what we are doing with it and some patches we use Jens Axboe
2009-11-03 20:52     ` Jens Axboe
2010-02-09 22:30   ` Integrating open SPC-1 benchmark into fio Michael O'Sullivan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=336580134.59771256869521664.JavaMail.root@zimbra.oss.co.nz \
    --to=gogilvie@oss.co.nz \
    --cc=fio@vger.kernel.org \
    --cc=michael.osullivan@auckland.ac.nz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox