From: Tejun Heo <tj@kernel.org>
To: Paolo Valente <paolo.valente@unimore.it>
Cc: Jens Axboe <axboe@kernel.dk>, Li Zefan <lizefan@huawei.com>,
Fabio Checconi <fchecconi@gmail.com>,
Arianna Avanzini <avanzini.arianna@gmail.com>,
linux-kernel@vger.kernel.org,
containers@lists.linux-foundation.org, cgroups@vger.kernel.org,
Mauro Andreolini <mauro.andreolini@unimore.it>
Subject: Re: [PATCH RFC - TAKE TWO - 10/12] block, bfq: add Early Queue Merge (EQM)
Date: Wed, 4 Jun 2014 09:04:46 -0400 [thread overview]
Message-ID: <20140604130446.GA5004@htj.dyndns.org> (raw)
In-Reply-To: <91383F1F-69C3-4B88-B51E-30204818F1AB@unimore.it>
Hello,
On Wed, Jun 04, 2014 at 01:47:36PM +0200, Paolo Valente wrote:
> > I think I'm a bit confused because it's named "early" queue merge
> > while it actually moves queue merging later than cfq - set_request()
> > happens before bio/rq merging.
>
>
> There is probably something I am missing here, because, as can be seen in blk-core.c,
> around line 1495, elv_set_request() is invoked in the context of the get_request() function,
> which in its turn is called from blk_queue_bio() *after* attempting both a plug merge
> and a merge with one of the requests in the block layer's cache. The first
> attempt is lockless and doesn't involve the I/O scheduler, but the
> second attempt includes invoking the allow_merge_fn hook of the scheduler
> (elv_merge() -> elv_rq_merge_ok() -> elv_iosched_allow_merge()).
Ah, you're right, set_request doesn't happen if a bio is merged into
an existing request.
> > Oh, as long as it makes measureable difference, I have no objection;
> > however, I do think more explanation and comments would be nice. I
> > still can't quite understand why retrying on each merge attempt would
> > make so much difference. Maybe I just failed to understand what you
> > wrote in the commit message.
>
> If we remember well, one of the problems was exactly that a different request
> may become the head request of the in-service queue between two rq merge
> attempts. If we do not retry on every attempt, we lose the chance
> to merge the queue at hand with the in-service queue. The two queues may
> then diverge, and hence have no other opportunity to be merged.
>
> > Is it because the cooperating tasks
> > issue IOs which grow large and close enough after merges but not on
> > the first bio issuance? If so, why isn't doing it on rq merge time
> > enough? Is the timing sensitive enough for certain workloads that
> > waiting till unplug time misses the opportunity? But plugging should
> > be relatively short compared to the time actual IOs take, so why would
> > it be that sensitive? What am I missing here?
>
> The problem is not the duration of the plugging, but the fact that, if a request merge
> succeeds for a bio, then there will be no set_request invocation for that bio.
> Therefore, without early merging, there will be no queue merge at all.
>
> If my replies are correct and convince you, then I will use them to integrate and
> hopefully improve the documentation for this patch.
Ah, okay, so it's about missing the chance to look for cooperating
queues when merge succeeds. Yeah, that makes a lot more sense to me.
If that's the case, wouldn't it be better to try finding cooperating
queues after each merge success rather than each allow_merge()
invocation? And let's please document what we're catching with the
extra attempts.
Thanks.
--
tejun
next prev parent reply other threads:[~2014-06-04 13:04 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-27 12:42 [PATCH RFC RESEND 00/14] New version of the BFQ I/O Scheduler paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 01/14] block: kconfig update and build bits for BFQ paolo
2014-05-28 22:19 ` Tejun Heo
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 00/12] New version of the BFQ I/O Scheduler Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 01/12] block: introduce the BFQ-v0 I/O scheduler Paolo Valente
2014-05-30 15:36 ` Tejun Heo
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 02/12] block, bfq: add full hierarchical scheduling and cgroups support Paolo Valente
2014-05-30 15:37 ` Tejun Heo
2014-05-30 15:39 ` Tejun Heo
2014-05-30 21:49 ` Paolo Valente
2014-05-30 21:49 ` Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 03/12] block, bfq: improve throughput boosting Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 04/12] block, bfq: modify the peak-rate estimator Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 05/12] block, bfq: add more fairness to boost throughput and reduce latency Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 06/12] block, bfq: improve responsiveness Paolo Valente
2014-05-30 15:41 ` Tejun Heo
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 07/12] block, bfq: reduce I/O latency for soft real-time applications Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 08/12] block, bfq: preserve a low latency also with NCQ-capable drives Paolo Valente
2014-05-31 13:48 ` Tejun Heo
2014-06-02 9:58 ` Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 09/12] block, bfq: reduce latency during request-pool saturation Paolo Valente
2014-05-31 13:54 ` Tejun Heo
2014-06-02 9:54 ` Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 10/12] block, bfq: add Early Queue Merge (EQM) Paolo Valente
2014-06-01 0:03 ` Tejun Heo
2014-06-02 9:46 ` Paolo Valente
2014-06-03 16:28 ` Tejun Heo
2014-06-04 11:47 ` Paolo Valente
2014-06-04 13:04 ` Tejun Heo [this message]
2014-06-16 11:23 ` Paolo Valente
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 11/12] block, bfq: boost the throughput on NCQ-capable flash-based devices Paolo Valente
2014-05-30 15:46 ` Tejun Heo
2014-05-30 22:01 ` Paolo Valente
2014-05-31 11:52 ` Tejun Heo
2014-06-02 9:26 ` Paolo Valente
2014-06-03 17:11 ` Tejun Heo
2014-06-04 7:29 ` Paolo Valente
2014-06-04 13:56 ` Tejun Heo
2014-06-16 10:46 ` Paolo Valente
2014-06-19 1:14 ` Tejun Heo
2014-05-29 9:05 ` [PATCH RFC - TAKE TWO - 12/12] block, bfq: boost the throughput with random I/O on NCQ-capable HDDs Paolo Valente
2014-05-30 15:51 ` Tejun Heo
2014-05-31 13:34 ` Tejun Heo
2014-05-30 16:07 ` [PATCH RFC - TAKE TWO - 00/12] New version of the BFQ I/O Scheduler Tejun Heo
2014-05-30 22:23 ` Paolo Valente
2014-05-30 23:28 ` Tejun Heo
2014-05-30 23:54 ` Paolo Valente
2014-06-02 11:14 ` Pavel Machek
2014-06-02 13:02 ` Pavel Machek
2014-06-03 16:54 ` Paolo Valente
2014-06-03 20:40 ` Pavel Machek
2014-06-04 8:39 ` Pavel Machek
2014-06-04 9:08 ` Pavel Machek
2014-06-04 10:03 ` BFQ speed tests [was Re: [PATCH RFC - TAKE TWO - 00/12] New version of the BFQ I/O Scheduler] Pavel Machek
2014-06-04 10:24 ` Paolo Valente
2014-06-04 11:59 ` Takashi Iwai
2014-06-04 12:12 ` Paolo Valente
2014-06-11 20:45 ` Paolo Valente
2014-06-13 16:21 ` Takashi Iwai
2014-06-11 20:39 ` Paolo Valente
2014-06-02 17:33 ` [PATCH RFC - TAKE TWO - 00/12] New version of the BFQ I/O Scheduler Tejun Heo
2014-06-03 4:12 ` Mike Galbraith
2014-06-04 22:31 ` Pavel Machek
2014-06-05 2:14 ` Jens Axboe
2014-05-31 0:48 ` Jens Axboe
2014-05-31 5:16 ` Tejun Heo
2014-06-02 14:29 ` Jens Axboe
2014-06-02 17:24 ` Tejun Heo
2014-06-02 17:32 ` Jens Axboe
2014-06-02 17:42 ` Tejun Heo
2014-06-02 17:46 ` Jens Axboe
2014-06-02 18:51 ` Tejun Heo
2014-06-02 20:57 ` Jens Axboe
2014-06-04 14:31 ` Christoph Hellwig
2014-06-04 14:50 ` Tejun Heo
2014-06-04 14:53 ` Christoph Hellwig
2014-06-04 14:58 ` Tejun Heo
2014-06-04 17:51 ` Christoph Hellwig
2014-06-17 15:55 ` Paolo Valente
2014-06-19 1:46 ` Tejun Heo
2014-06-19 1:49 ` Tejun Heo
2014-06-19 2:29 ` Jens Axboe
2014-06-23 13:53 ` Paolo Valente
2014-06-23 19:20 ` Tejun Heo
2014-07-09 20:54 ` Paolo Valente
2014-05-27 12:42 ` [PATCH RFC RESEND 02/14] block: introduce the BFQ-v0 I/O scheduler paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 03/14] block: add hierarchical-support option to kconfig paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 04/14] block, bfq: add full hierarchical scheduling and cgroups support paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 05/14] block, bfq: improve throughput boosting paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 06/14] block, bfq: modify the peak-rate estimator paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 07/14] block, bfq: add more fairness to boost throughput and reduce latency paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 08/14] block, bfq: improve responsiveness paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 09/14] block, bfq: reduce I/O latency for soft real-time applications paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 10/14] block, bfq: preserve a low latency also with NCQ-capable drives paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 11/14] block, bfq: reduce latency during request-pool saturation paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 12/14] block, bfq: add Early Queue Merge (EQM) paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 13/14] block, bfq: boost the throughput on NCQ-capable flash-based devices paolo
2014-05-27 12:42 ` [PATCH RFC RESEND 14/14] block, bfq: boost the throughput with random I/O on NCQ-capable HDDs paolo
2014-05-30 15:32 ` [PATCH RFC RESEND 00/14] New version of the BFQ I/O Scheduler Vivek Goyal
2014-05-30 16:16 ` Tejun Heo
2014-05-30 17:09 ` Vivek Goyal
2014-05-30 17:26 ` Tejun Heo
2014-05-30 17:55 ` Vivek Goyal
2014-05-30 17:59 ` Tejun Heo
2014-05-30 23:33 ` Paolo Valente
2014-05-30 17:31 ` Vivek Goyal
2014-05-30 17:39 ` Tejun Heo
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=20140604130446.GA5004@htj.dyndns.org \
--to=tj@kernel.org \
--cc=avanzini.arianna@gmail.com \
--cc=axboe@kernel.dk \
--cc=cgroups@vger.kernel.org \
--cc=containers@lists.linux-foundation.org \
--cc=fchecconi@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=mauro.andreolini@unimore.it \
--cc=paolo.valente@unimore.it \
/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
all inboxes | Powered by JetHome®