From: Vivek Goyal <vgoyal@redhat.com>
To: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Cc: linux-kernel@vger.kernel.org, qemu-devel@nongnu.org,
kvm@vger.kernel.org, axboe@kernel.dk, takuya.yoshikawa@gmail.com,
Moyer Jeff Moyer <jmoyer@redhat.com>
Subject: Re: CFQ I/O starvation problem triggered by RHEL6.0 KVM guests
Date: Fri, 9 Sep 2011 10:38:47 -0400 [thread overview]
Message-ID: <20110909143847.GA15748@redhat.com> (raw)
In-Reply-To: <20110909180028.d1aba6c0.yoshikawa.takuya@oss.ntt.co.jp>
On Fri, Sep 09, 2011 at 06:00:28PM +0900, Takuya Yoshikawa wrote:
[..]
>
> >
> > - Even if there are close cooperators, these queues are merged and they
> > are treated as single queue from slice point of view. So cooperating
> > queues should be merged and get a single slice instead of starving
> > other queues in the system.
>
> I understand that close cooperators' queues should be merged, but in our test
> case, when the 64KB request was issued from one aio thread, the other thread's
> queue was empty; because these queues are for the same stream, next request
> could not come until current request got finished.
>
> But this is complicated because it depends on the qemu block layer aio.
>
> I am not sure if cfq would try to merge the queues in such cases.
[CCing Jeff Moyer ]
I think even if these queues are alternating, it should have been merged
(If we considered them close cooperator).
So in select queue we have.
new_cfqq = cfq_close_cooperator(cfqd, cfqq);
if (new_cfqq) {
if (!cfqq->new_cfqq)
cfq_setup_merge(cfqq, new_cfqq);
goto expire;
}
So if we selected a new queue because it is a close cooperator, we should
have called setup_merge() and next time when the IO happens, one of the
queue should merge into another queue.
cfq_set_request() {
if (cfqq->new_cfqq)
cfqq = cfq_merge_cfqqs(cfqd, cic, cfqq);
}
If merging is not happening and still we somehow continue to pick
close_cooperator() as the new queue and starve other queues in the system,
then there is a bug.
I think try to reproduce this with fio with upstream kenrels and put
some more tracepoints and see what's happening.
Thanks
Vivek
WARNING: multiple messages have this Message-ID (diff)
From: Vivek Goyal <vgoyal@redhat.com>
To: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
Cc: axboe@kernel.dk, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org, qemu-devel@nongnu.org,
Moyer Jeff Moyer <jmoyer@redhat.com>,
takuya.yoshikawa@gmail.com
Subject: Re: [Qemu-devel] CFQ I/O starvation problem triggered by RHEL6.0 KVM guests
Date: Fri, 9 Sep 2011 10:38:47 -0400 [thread overview]
Message-ID: <20110909143847.GA15748@redhat.com> (raw)
In-Reply-To: <20110909180028.d1aba6c0.yoshikawa.takuya@oss.ntt.co.jp>
On Fri, Sep 09, 2011 at 06:00:28PM +0900, Takuya Yoshikawa wrote:
[..]
>
> >
> > - Even if there are close cooperators, these queues are merged and they
> > are treated as single queue from slice point of view. So cooperating
> > queues should be merged and get a single slice instead of starving
> > other queues in the system.
>
> I understand that close cooperators' queues should be merged, but in our test
> case, when the 64KB request was issued from one aio thread, the other thread's
> queue was empty; because these queues are for the same stream, next request
> could not come until current request got finished.
>
> But this is complicated because it depends on the qemu block layer aio.
>
> I am not sure if cfq would try to merge the queues in such cases.
[CCing Jeff Moyer ]
I think even if these queues are alternating, it should have been merged
(If we considered them close cooperator).
So in select queue we have.
new_cfqq = cfq_close_cooperator(cfqd, cfqq);
if (new_cfqq) {
if (!cfqq->new_cfqq)
cfq_setup_merge(cfqq, new_cfqq);
goto expire;
}
So if we selected a new queue because it is a close cooperator, we should
have called setup_merge() and next time when the IO happens, one of the
queue should merge into another queue.
cfq_set_request() {
if (cfqq->new_cfqq)
cfqq = cfq_merge_cfqqs(cfqd, cic, cfqq);
}
If merging is not happening and still we somehow continue to pick
close_cooperator() as the new queue and starve other queues in the system,
then there is a bug.
I think try to reproduce this with fio with upstream kenrels and put
some more tracepoints and see what's happening.
Thanks
Vivek
next prev parent reply other threads:[~2011-09-09 14:38 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-08 9:13 CFQ I/O starvation problem triggered by RHEL6.0 KVM guests Takuya Yoshikawa
2011-09-08 9:13 ` [Qemu-devel] " Takuya Yoshikawa
2011-09-08 13:49 ` Vivek Goyal
2011-09-08 13:49 ` [Qemu-devel] " Vivek Goyal
2011-09-08 13:49 ` Vivek Goyal
2011-09-09 9:00 ` Takuya Yoshikawa
2011-09-09 9:00 ` [Qemu-devel] " Takuya Yoshikawa
2011-09-09 9:00 ` Takuya Yoshikawa
2011-09-09 13:48 ` [Qemu-devel] " Stefan Hajnoczi
2011-09-09 13:48 ` Stefan Hajnoczi
2011-09-09 14:38 ` Vivek Goyal [this message]
2011-09-09 14:38 ` Vivek Goyal
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=20110909143847.GA15748@redhat.com \
--to=vgoyal@redhat.com \
--cc=axboe@kernel.dk \
--cc=jmoyer@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
--cc=takuya.yoshikawa@gmail.com \
--cc=yoshikawa.takuya@oss.ntt.co.jp \
/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.