From: Kevin Wolf <kwolf@redhat.com>
To: Zhi Yong Wu <zwu.kernel@gmail.com>
Cc: pair@us.ibm.com, stefanha@linux.vnet.ibm.com,
kvm@vger.kernel.org, mtosatti@redhat.com,
Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>,
aliguori@us.ibm.com, qemu-devel@nongnu.org, ryanh@us.ibm.com
Subject: Re: [Qemu-devel] [PATCH v8 3/4] block: add block timer and throttling algorithm
Date: Mon, 17 Oct 2011 12:26:31 +0200 [thread overview]
Message-ID: <4E9C02D7.3030203@redhat.com> (raw)
In-Reply-To: <CAEH94Lidyy1kc0EnpsbjjFRQ_26TLbpYtYwT8YEXA9wNLoACAw@mail.gmail.com>
Am 26.09.2011 09:24, schrieb Zhi Yong Wu:
> On Sat, Sep 24, 2011 at 12:19 AM, Kevin Wolf <kwolf@redhat.com> wrote:
>> Am 08.09.2011 12:11, schrieb Zhi Yong Wu:
>>> Note:
>>> 1.) When bps/iops limits are specified to a small value such as 511 bytes/s, this VM will hang up. We are considering how to handle this senario.
>>> 2.) When "dd" command is issued in guest, if its option bs is set to a large value such as "bs=1024K", the result speed will slightly bigger than the limits.
>>>
>>> For these problems, if you have nice thought, pls let us know.:)
>>>
>>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>> ---
>>> block.c | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
>>> block.h | 1 -
>>> 2 files changed, 248 insertions(+), 12 deletions(-)
>>
>> One general comment: What about synchronous and/or coroutine I/O
>> operations? Do you think they are just not important enough to consider
>> here or were they forgotten?
> For sync ops, we assume that it will be converse into async mode at
> some point of future, right?
> For coroutine I/O, it is introduced in image driver layer, and behind
> bdrv_aio_readv/writev. I think that we need not consider them, right?
Meanwhile the block layer has been changed to handle all requests in
terms of coroutines. So you would best move your intercepting code into
the coroutine functions.
>> Also, do I understand correctly that you're always submitting the whole
> Right, when the block timer fire, it will flush whole request queue.
>> queue at once? Does this effectively enforce the limit all the time or
>> will it lead to some peaks and then no requests at all for a while until
> In fact, it only try to submit those enqueued request one by one. If
> fail to pass the limit, this request will be enqueued again.
Right, I missed this. Makes sense.
>> the average is right again?
> Yeah, it is possible. Do you better idea?
>>
>> Maybe some documentation on how it all works from a high level
>> perspective would be helpful.
>>
>>> + /* throttling disk read I/O */
>>> + if (bs->io_limits_enabled) {
>>> + if (bdrv_exceed_io_limits(bs, nb_sectors, false, &wait_time)) {
>>> + ret = qemu_block_queue_enqueue(bs->block_queue, bs, bdrv_aio_readv,
>>> + sector_num, qiov, nb_sectors, cb, opaque);
>>> + printf("wait_time=%ld\n", wait_time);
>>> + if (wait_time != -1) {
>>> + printf("reset block timer\n");
>>> + qemu_mod_timer(bs->block_timer,
>>> + wait_time + qemu_get_clock_ns(vm_clock));
>>> + }
>>> +
>>> + if (ret) {
>>> + printf("ori ret is not null\n");
>>> + } else {
>>> + printf("ori ret is null\n");
>>> + }
>>> +
>>> + return ret;
>>> + }
>>> + }
>>>
>>> - return drv->bdrv_aio_readv(bs, sector_num, qiov, nb_sectors,
>>> + ret = drv->bdrv_aio_readv(bs, sector_num, qiov, nb_sectors,
>>> cb, opaque);
>>> + if (ret) {
>>> + if (bs->io_limits_enabled) {
>>> + bs->io_disps.bytes[BLOCK_IO_LIMIT_READ] +=
>>> + (unsigned) nb_sectors * BDRV_SECTOR_SIZE;
>>> + bs->io_disps.ios[BLOCK_IO_LIMIT_READ]++;
>>> + }
>>
>> I wonder if you can't reuse bs->nr_bytes/nr_ops instead of introducing a
>> second counting mechanism. Would have the advantage that numbers are
> NO, our counting variables will be reset to ZERO if current slice
> time(0.1ms) is used up.
Instead of setting the counter to zero you could remember the base value
and calculate the difference when you need it. The advantage is that we
can share infrastructure instead of introducing several subtly different
ways of I/O accounting.
>> actually consistent (your metric counts slightly differently than the
>> existing info blockstats one).
> Yeah, i notice this, and don't think there's wrong with it. and you?
It's not really user friendly if a number that is called the same means
this in one place and in another place that.
Kevin
next prev parent reply other threads:[~2011-10-17 10:23 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-08 10:11 [Qemu-devel] [PATCH v8 0/4] The intro of QEMU block I/O throttling Zhi Yong Wu
2011-09-08 10:11 ` [Qemu-devel] [PATCH v8 1/4] block: add the block queue support Zhi Yong Wu
2011-09-23 15:32 ` Kevin Wolf
2011-09-26 8:01 ` Zhi Yong Wu
2011-10-17 10:17 ` Kevin Wolf
[not found] ` <4E9C00D2.1040004@redhat.com>
2011-10-18 7:00 ` Zhi Yong Wu
2011-10-18 8:07 ` Zhi Yong Wu
2011-10-18 8:36 ` Kevin Wolf
2011-10-18 9:29 ` Zhi Yong Wu
2011-10-18 9:56 ` Kevin Wolf
2011-10-18 13:29 ` Zhi Yong Wu
2011-09-08 10:11 ` [Qemu-devel] [PATCH v8 2/4] block: add the command line support Zhi Yong Wu
2011-09-23 15:54 ` Kevin Wolf
2011-09-26 6:15 ` Zhi Yong Wu
2011-10-17 10:19 ` Kevin Wolf
2011-10-18 8:17 ` Zhi Yong Wu
2011-09-08 10:11 ` [Qemu-devel] [PATCH v8 3/4] block: add block timer and throttling algorithm Zhi Yong Wu
2011-09-09 14:44 ` Marcelo Tosatti
2011-09-13 3:09 ` Zhi Yong Wu
2011-09-14 10:50 ` Marcelo Tosatti
2011-09-19 9:55 ` Zhi Yong Wu
2011-09-20 12:34 ` Marcelo Tosatti
2011-09-21 3:14 ` Zhi Yong Wu
2011-09-21 5:54 ` Zhi Yong Wu
2011-09-21 7:03 ` Zhi Yong Wu
2011-09-26 8:15 ` Zhi Yong Wu
2011-09-23 16:19 ` Kevin Wolf
2011-09-26 7:24 ` Zhi Yong Wu
2011-10-17 10:26 ` Kevin Wolf [this message]
2011-10-17 15:54 ` Stefan Hajnoczi
2011-10-18 8:29 ` Zhi Yong Wu
2011-10-18 8:43 ` Zhi Yong Wu
2011-09-08 10:11 ` [Qemu-devel] [PATCH v8 4/4] qmp/hmp: add block_set_io_throttle Zhi Yong Wu
-- strict thread matches above, loose matches on Subject: below --
2011-09-07 12:41 [Qemu-devel] [PATCH v8 3/4] block: add block timer and throttling algorithm Zhi Yong Wu
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=4E9C02D7.3030203@redhat.com \
--to=kwolf@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=pair@us.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=ryanh@us.ibm.com \
--cc=stefanha@linux.vnet.ibm.com \
--cc=wuzhy@linux.vnet.ibm.com \
--cc=zwu.kernel@gmail.com \
/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;
as well as URLs for NNTP newsgroup(s).