* [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options
@ 2017-02-20 16:52 Stefan Hajnoczi
2017-02-20 19:40 ` Eric Blake
2017-02-21 10:58 ` [Qemu-devel] " Alberto Garcia
0 siblings, 2 replies; 6+ messages in thread
From: Stefan Hajnoczi @ 2017-02-20 16:52 UTC (permalink / raw)
To: qemu-devel; +Cc: Nini Gu, qemu-block, Alberto Garcia, Stefan Hajnoczi
The disk I/O throttling options have been listed for a long time but
never explained on the QEMU man page.
Suggested-by: Nini Gu <ngu@redhat.com>
Cc: Alberto Garcia <berto@igalia.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
qemu-options.hx | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/qemu-options.hx b/qemu-options.hx
index 5633d39..b2254cc 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -587,6 +587,31 @@ file sectors into the image file.
conversion of plain zero writes by the OS to driver specific optimized
zero write commands. You may even choose "unmap" if @var{discard} is set
to "unmap" to allow a zero write to be converted to an UNMAP operation.
+@item bps=@var{b},bps_rd=@var{r},bps_wr=@var{w}
+Specify bandwidth throttling limits in bytes per second, either for all request
+types or for reads or writes only. Values must be larger than the maximum
+request size to avoid timeouts or hangs in the guest. At minimum use 2 MB/s
+for disks.
+@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
+Specify bursts in bytes per second, either for all request types or for reads
+or writes only. Bursts allow the guest I/O to spike above the limit
+temporarily. The default burst value is 1/10th of the limit.
+@item iops=@var{i},iops_rd=@var{r},iops_wr=@var{w}
+Specify request rate limits in requests per second, either for all request
+types or for reads or writes only.
+@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
+Specify bursts in requests per second, either for all request types or for reads
+or writes only. Bursts allow the guest I/O to spike above the limit
+temporarily. The default burst value is 1/10th of the limit.
+@item iops_size=@var{is}
+Let every @var{is} bytes of a request count as a new request for iops
+throttling purposes. Use this option to prevent guests from circumventing iops
+limits by sending fewer but larger requests.
+@item group=@var{g}
+Join a throttling quota group with given name @var{g}. All drives that are
+members of the same group are accounted for together. Use this option to
+prevent guests from circumventing throttling limits by using many small disks
+instead of a single larger disk.
@end table
By default, the @option{cache=writeback} mode is used. It will report data
--
2.9.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options
2017-02-20 16:52 [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options Stefan Hajnoczi
@ 2017-02-20 19:40 ` Eric Blake
2017-02-21 11:25 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2017-02-21 10:58 ` [Qemu-devel] " Alberto Garcia
1 sibling, 1 reply; 6+ messages in thread
From: Eric Blake @ 2017-02-20 19:40 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel; +Cc: Nini Gu, Alberto Garcia, qemu-block
[-- Attachment #1: Type: text/plain, Size: 1325 bytes --]
On 02/20/2017 10:52 AM, Stefan Hajnoczi wrote:
> The disk I/O throttling options have been listed for a long time but
> never explained on the QEMU man page.
>
> Suggested-by: Nini Gu <ngu@redhat.com>
> Cc: Alberto Garcia <berto@igalia.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
> qemu-options.hx | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 5633d39..b2254cc 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -587,6 +587,31 @@ file sectors into the image file.
> conversion of plain zero writes by the OS to driver specific optimized
> zero write commands. You may even choose "unmap" if @var{discard} is set
> to "unmap" to allow a zero write to be converted to an UNMAP operation.
> +@item bps=@var{b},bps_rd=@var{r},bps_wr=@var{w}
> +Specify bandwidth throttling limits in bytes per second, either for all request
> +types or for reads or writes only. Values must be larger than the maximum
> +request size to avoid timeouts or hangs in the guest. At minimum use 2 MB/s
s/At minimum/At a minimum,/
With that tweak,
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options
2017-02-20 16:52 [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options Stefan Hajnoczi
2017-02-20 19:40 ` Eric Blake
@ 2017-02-21 10:58 ` Alberto Garcia
2017-02-22 11:14 ` Stefan Hajnoczi
1 sibling, 1 reply; 6+ messages in thread
From: Alberto Garcia @ 2017-02-21 10:58 UTC (permalink / raw)
To: Stefan Hajnoczi, qemu-devel; +Cc: Nini Gu, qemu-block
On Mon 20 Feb 2017 05:52:04 PM CET, Stefan Hajnoczi wrote:
> The disk I/O throttling options have been listed for a long time but
> never explained on the QEMU man page.
> +@item bps=@var{b},bps_rd=@var{r},bps_wr=@var{w}
> +Specify bandwidth throttling limits in bytes per second, either for all request
> +types or for reads or writes only.
Perhaps for the manual page it makes sense to use them, but bps, bps_rd,
etc. are the legacy names for those options. They're internally renamed
to throttling.bps-total, throttling.bps-read, ...
> Values must be larger than the maximum
> +request size to avoid timeouts or hangs in the guest. At minimum use 2 MB/s
> +for disks.
Is this so? throttle_compute_wait() does not use the request size at
all. The size is used to do the accounting afterwards. In other words:
requests are not throttled if they exceed the limit, they are throttled
after the limit has been exceeded by previous requests.
A low limit will certainly slow down the guest and can cause
timeouts, but I don't know if being larger or smaller than the maximum
request size is what makes the difference.
> +@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
> +Specify bursts in bytes per second, either for all request types or for reads
> +or writes only. Bursts allow the guest I/O to spike above the limit
> +temporarily. The default burst value is 1/10th of the limit.
"The default burst value is 1/10th of the limit" is an implementation
detail that the user doesn't need to know about. What it means is that a
bps limit of 10 MB/s is implemented internally as 1MB per 100ms.
I would leave that out, it doesn't even make sense that the burst limit
is lower than the normal limit, we actually forbid that (aaa1e77ffae52).
> +@item iops=@var{i},iops_rd=@var{r},iops_wr=@var{w}
> +Specify request rate limits in requests per second, either for all request
> +types or for reads or writes only.
> +@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
You meant iops_max, iops_rd_max and iops_wr_max here?
Berto
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [Qemu-block] [PATCH] qemu-options: explain disk I/O throttling options
2017-02-20 19:40 ` Eric Blake
@ 2017-02-21 11:25 ` Stefan Hajnoczi
0 siblings, 0 replies; 6+ messages in thread
From: Stefan Hajnoczi @ 2017-02-21 11:25 UTC (permalink / raw)
To: Eric Blake; +Cc: Stefan Hajnoczi, qemu-devel, Nini Gu, qemu-block
[-- Attachment #1: Type: text/plain, Size: 1367 bytes --]
On Mon, Feb 20, 2017 at 01:40:21PM -0600, Eric Blake wrote:
> On 02/20/2017 10:52 AM, Stefan Hajnoczi wrote:
> > The disk I/O throttling options have been listed for a long time but
> > never explained on the QEMU man page.
> >
> > Suggested-by: Nini Gu <ngu@redhat.com>
> > Cc: Alberto Garcia <berto@igalia.com>
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> > qemu-options.hx | 25 +++++++++++++++++++++++++
> > 1 file changed, 25 insertions(+)
> >
> > diff --git a/qemu-options.hx b/qemu-options.hx
> > index 5633d39..b2254cc 100644
> > --- a/qemu-options.hx
> > +++ b/qemu-options.hx
> > @@ -587,6 +587,31 @@ file sectors into the image file.
> > conversion of plain zero writes by the OS to driver specific optimized
> > zero write commands. You may even choose "unmap" if @var{discard} is set
> > to "unmap" to allow a zero write to be converted to an UNMAP operation.
> > +@item bps=@var{b},bps_rd=@var{r},bps_wr=@var{w}
> > +Specify bandwidth throttling limits in bytes per second, either for all request
> > +types or for reads or writes only. Values must be larger than the maximum
> > +request size to avoid timeouts or hangs in the guest. At minimum use 2 MB/s
>
> s/At minimum/At a minimum,/
>
> With that tweak,
> Reviewed-by: Eric Blake <eblake@redhat.com>
Will fix when merging.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options
2017-02-21 10:58 ` [Qemu-devel] " Alberto Garcia
@ 2017-02-22 11:14 ` Stefan Hajnoczi
2017-02-22 13:14 ` Alberto Garcia
0 siblings, 1 reply; 6+ messages in thread
From: Stefan Hajnoczi @ 2017-02-22 11:14 UTC (permalink / raw)
To: Alberto Garcia; +Cc: qemu-devel, Nini Gu, qemu-block
[-- Attachment #1: Type: text/plain, Size: 3113 bytes --]
On Tue, Feb 21, 2017 at 11:58:00AM +0100, Alberto Garcia wrote:
> On Mon 20 Feb 2017 05:52:04 PM CET, Stefan Hajnoczi wrote:
> > The disk I/O throttling options have been listed for a long time but
> > never explained on the QEMU man page.
>
> > +@item bps=@var{b},bps_rd=@var{r},bps_wr=@var{w}
> > +Specify bandwidth throttling limits in bytes per second, either for all request
> > +types or for reads or writes only.
>
> Perhaps for the manual page it makes sense to use them, but bps, bps_rd,
> etc. are the legacy names for those options. They're internally renamed
> to throttling.bps-total, throttling.bps-read, ...
I used the parameter names already listed in the -drive documentation.
We need to keep the legacy names but I will add another patch that
documents the new names and encourages using them.
> > Values must be larger than the maximum
> > +request size to avoid timeouts or hangs in the guest. At minimum use 2 MB/s
> > +for disks.
>
> Is this so? throttle_compute_wait() does not use the request size at
> all. The size is used to do the accounting afterwards. In other words:
> requests are not throttled if they exceed the limit, they are throttled
> after the limit has been exceeded by previous requests.
>
> A low limit will certainly slow down the guest and can cause
> timeouts, but I don't know if being larger or smaller than the maximum
> request size is what makes the difference.
You are right, I'm still have the behavior of the old throttling
implementation in mind.
I'd still like to recommend a sane minimum because anything around the
size of a single request leads to timeouts and hangs inside the guest.
How about:
Small values can lead to timeouts or hangs inside the guest. A safe
minimum for disks is 2 MB/s.
> > +@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
> > +Specify bursts in bytes per second, either for all request types or for reads
> > +or writes only. Bursts allow the guest I/O to spike above the limit
> > +temporarily. The default burst value is 1/10th of the limit.
>
> "The default burst value is 1/10th of the limit" is an implementation
> detail that the user doesn't need to know about. What it means is that a
> bps limit of 10 MB/s is implemented internally as 1MB per 100ms.
>
> I would leave that out, it doesn't even make sense that the burst limit
> is lower than the normal limit, we actually forbid that (aaa1e77ffae52).
Unfortunately the bps_max = avg / 10 default value is visible via
query-block. A bug was recently reported about this:
https://bugzilla.redhat.com/show_bug.cgi?id=1414630
Would you prefer a private field in the throttling code so this detail
is hidden from users?
> > +@item iops=@var{i},iops_rd=@var{r},iops_wr=@var{w}
> > +Specify request rate limits in requests per second, either for all request
> > +types or for reads or writes only.
>
> > +@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
>
> You meant iops_max, iops_rd_max and iops_wr_max here?
Yes, thanks! Will fix in v2.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options
2017-02-22 11:14 ` Stefan Hajnoczi
@ 2017-02-22 13:14 ` Alberto Garcia
0 siblings, 0 replies; 6+ messages in thread
From: Alberto Garcia @ 2017-02-22 13:14 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: qemu-devel, Nini Gu, qemu-block
On Wed 22 Feb 2017 12:14:33 PM CET, Stefan Hajnoczi wrote:
>> > Values must be larger than the maximum
>> > +request size to avoid timeouts or hangs in the guest. At minimum use 2 MB/s
>> > +for disks.
>>
>> Is this so? throttle_compute_wait() does not use the request size at
>> all. The size is used to do the accounting afterwards. In other
>> words: requests are not throttled if they exceed the limit, they are
>> throttled after the limit has been exceeded by previous requests.
>>
>> A low limit will certainly slow down the guest and can cause
>> timeouts, but I don't know if being larger or smaller than the maximum
>> request size is what makes the difference.
>
> You are right, I'm still have the behavior of the old throttling
> implementation in mind.
>
> I'd still like to recommend a sane minimum because anything around the
> size of a single request leads to timeouts and hangs inside the guest.
Yes, that sounds sensible.
> How about:
>
> Small values can lead to timeouts or hangs inside the guest. A safe
> minimum for disks is 2 MB/s.
Looks good to me.
>> > +@item bps_max=@var{bm},bps_rd_max=@var{rm},bps_wr_max=@var{wm}
>> > +Specify bursts in bytes per second, either for all request types or for reads
>> > +or writes only. Bursts allow the guest I/O to spike above the limit
>> > +temporarily. The default burst value is 1/10th of the limit.
>>
>> "The default burst value is 1/10th of the limit" is an implementation
>> detail that the user doesn't need to know about. What it means is that a
>> bps limit of 10 MB/s is implemented internally as 1MB per 100ms.
>>
>> I would leave that out, it doesn't even make sense that the burst limit
>> is lower than the normal limit, we actually forbid that (aaa1e77ffae52).
>
> Unfortunately the bps_max = avg / 10 default value is visible via
> query-block. A bug was recently reported about this:
> https://bugzilla.redhat.com/show_bug.cgi?id=1414630
>
> Would you prefer a private field in the throttling code so this detail
> is hidden from users?
Oh, I see. I would rather hide it from the user, either in throttle.c or
even in bdrv_block_device_info().
Berto
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-02-22 13:14 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-20 16:52 [Qemu-devel] [PATCH] qemu-options: explain disk I/O throttling options Stefan Hajnoczi
2017-02-20 19:40 ` Eric Blake
2017-02-21 11:25 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2017-02-21 10:58 ` [Qemu-devel] " Alberto Garcia
2017-02-22 11:14 ` Stefan Hajnoczi
2017-02-22 13:14 ` Alberto Garcia
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.