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 10:16:02 -0600 [thread overview]
Message-ID: <531F36C2.6060103@kernel.dk> (raw)
In-Reply-To: <531F3657.9030003@kernel.dk>
[-- Attachment #1: Type: text/plain, Size: 348 bytes --]
On 03/11/2014 10:14 AM, Jens Axboe wrote:
> On 03/11/2014 10:08 AM, Elliott, Robert (Server Storage) wrote:
>> That patch still exits after 5127 ios.
>>
>> io_bytes_exceeded is called 5128 times, but it sees td->io_u_queued=0
>> each time.
>
> Can you check if ->cur_depth or ->io_u_in_flight catches it?
It should, try this one.
--
Jens Axboe
[-- Attachment #2: number_ios-v2.patch --]
[-- Type: text/x-patch, Size: 1462 bytes --]
diff --git a/backend.c b/backend.c
index 992033c5c170..bab202662ca5 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 + td->io_u_in_flight;
+ }
+
+ 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 + td->io_u_in_flight;
+ 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 16:16 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
2014-03-11 16:08 ` Elliott, Robert (Server Storage)
2014-03-11 16:14 ` Jens Axboe
2014-03-11 16:16 ` Jens Axboe [this message]
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=531F36C2.6060103@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.