From: Jens Axboe <axboe@kernel.dk>
To: "Elliott, Robert (Server Storage)" <Elliott@hp.com>,
"fio@vger.kernel.org" <fio@vger.kernel.org>
Subject: Re: number_ios is checked on completion, not submission
Date: Tue, 11 Mar 2014 09:35:50 -0600 [thread overview]
Message-ID: <531F2D56.8080801@kernel.dk> (raw)
In-Reply-To: <94D0CD8314A33A4D9D801C0FE68B4029548C76CF@G4W3202.americas.hpqcorp.net>
[-- Attachment #1: Type: text/plain, Size: 889 bytes --]
On 03/10/2014 03:12 PM, Elliott, Robert (Server Storage) wrote:
> Since number_ios is checked in io_u.c account_io_completion() rather than a submission function, fio actually runs the requested number of I/Os plus iodepth - 1.
>
> Example: for a job specifying:
> number_ios=5000
> iodepth=128
>
> the results are:
> read : io=20000KB, bw=222222KB/s, iops=56966, runt= 90msec
> IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=0.3%, 32=0.6%, >=64=98.8%
> issued : total=r=5127/w=0/d=0, short=r=0/w=0/d=0
>
> Should that just be documented as such, or should this logic be moved to submission?
> static void account_io_completion(struct thread_data *td, struct io_u *io_u,
> ...
> if (td->o.number_ios && !--td->o.number_ios)
> td->done = 1;
Can you try the attached patch and see if that makes it behave more like
expected?
--
Jens Axboe
[-- Attachment #2: number_ios.patch --]
[-- Type: text/x-patch, Size: 1420 bytes --]
diff --git a/backend.c b/backend.c
index 992033c5c170..cee185571082 100644
--- a/backend.c
+++ b/backend.c
@@ -625,6 +625,7 @@ reap:
static int io_bytes_exceeded(struct thread_data *td)
{
+ unsigned long long number_ios = 0;
unsigned long long bytes;
if (td_rw(td))
@@ -636,7 +637,13 @@ static int io_bytes_exceeded(struct thread_data *td)
else
bytes = td->this_io_bytes[DDIR_TRIM];
- return bytes >= td->o.size;
+ if (td->o.number_ios) {
+ number_ios = ddir_rw_sum(td->this_io_blocks);
+ number_ios += td->io_u_queued;
+ }
+
+ return bytes >= td->o.size ||
+ (number_ios && number_ios >= td->o.number_ios);
}
/*
@@ -1128,6 +1135,14 @@ static int keep_running(struct thread_data *td)
return 1;
}
+ if (td->o.number_ios) {
+ unsigned long long number_ios = ddir_rw_sum(td->this_io_blocks);
+
+ number_ios += td->io_u_queued;
+ if (number_ios >= td->o.number_ios)
+ 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 8e27708731c7..0b86d9f3c281 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)
next prev parent reply other threads:[~2014-03-11 15:35 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-10 21:12 number_ios is checked on completion, not submission Elliott, Robert (Server Storage)
2014-03-11 15:35 ` Jens Axboe [this message]
2014-03-11 16:08 ` Elliott, Robert (Server Storage)
2014-03-11 16:14 ` Jens Axboe
2014-03-11 16:16 ` Jens Axboe
2014-03-11 16:19 ` Elliott, Robert (Server Storage)
2014-03-11 16:22 ` Jens Axboe
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=531F2D56.8080801@kernel.dk \
--to=axboe@kernel.dk \
--cc=Elliott@hp.com \
--cc=fio@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.