qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
	"Benoît Canet" <benoit@irqsave.net>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Zhi Yong Wu" <wuzhy@cn.ibm.com>
Subject: [Qemu-devel] [RFC 0/4] block: fix I/O throttling oscillations
Date: Thu, 21 Mar 2013 15:49:55 +0100	[thread overview]
Message-ID: <1363877399-16339-1-git-send-email-stefanha@redhat.com> (raw)

Benoît Canet <benoit@irqsave.net> reported that QEMU I/O throttling can
oscillate under continuous I/O.  The test case runs 50 threads performing
random writes and a -drive iops=150 limit is used.

Since QEMU I/O throttling is implemented using 100 millisecond time slices,
we'd expect 150 +/- 15 IOPS.  Anything outside that range indicates a problem
with the I/O throttling algorithm.

It turned out that even a single thread performing sequential I/O continuously
is throttled outside the 150 +/- 15 IOPS range.  The continous stream of I/O
slows down as time goes on but resets to 150 IOPS again when interrupted.  This
can be tested with:

  $ iostat -d 1 -x /dev/vdb &
  $ dd if=/dev/vdb of=/dev/null bs=4096 iflag=direct

This patches addresses these problems as follows:

1. Account for I/O requests when they are submitted instead of completed.  This
   ensures that we do not exceed the budget for this slice.  Exceeding the
   budget leads to fluctuations since we have to make up for this later.

2. Use constant 100 millisecond slice time.  Adjusting the slice time at
   run-time led to oscillations.  Since the reason for adjusting slice time is
   not clear, drop this behavior.

I have also included two code clean-up patches.

Benoît: Please let me know if this solves the problems you're seeing.

Stefan Hajnoczi (4):
  block: fix I/O throttling accounting blind spot
  block: keep I/O throttling slice time constant
  block: drop duplicated slice extension code
  block: clean up I/O throttling wait_time code

 block.c                   | 47 ++++++++++++++++++++---------------------------
 blockdev.c                |  1 -
 include/block/block_int.h |  3 +--
 3 files changed, 21 insertions(+), 30 deletions(-)

-- 
1.8.1.4

             reply	other threads:[~2013-03-21 14:50 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-21 14:49 Stefan Hajnoczi [this message]
2013-03-21 14:49 ` [Qemu-devel] [RFC 1/4] block: fix I/O throttling accounting blind spot Stefan Hajnoczi
2013-03-27  8:50   ` Zhi Yong Wu
2013-03-27  9:14     ` Stefan Hajnoczi
2013-03-27 12:49       ` Zhi Yong Wu
2013-03-21 14:49 ` [Qemu-devel] [RFC 2/4] block: keep I/O throttling slice time constant Stefan Hajnoczi
2013-03-21 14:49 ` [Qemu-devel] [RFC 3/4] block: drop duplicated slice extension code Stefan Hajnoczi
2013-03-21 14:49 ` [Qemu-devel] [RFC 4/4] block: clean up I/O throttling wait_time code Stefan Hajnoczi
2013-03-21 15:27 ` [Qemu-devel] [RFC 0/4] block: fix I/O throttling oscillations Benoît Canet
2013-03-21 16:34   ` Stefan Hajnoczi
2013-03-27 12:55 ` Zhi Yong Wu
2013-04-04 12:15 ` Benoît Canet
2013-04-04 16:24   ` Kevin Wolf
2013-04-04 16:30     ` Stefan Hajnoczi

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=1363877399-16339-1-git-send-email-stefanha@redhat.com \
    --to=stefanha@redhat.com \
    --cc=benoit@irqsave.net \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wuzhy@cn.ibm.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).