[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 10/17] qapi: Add burst length parameters to block
From: |
Alberto Garcia |
Subject: |
[Qemu-devel] [PATCH v2 10/17] qapi: Add burst length parameters to block_set_io_throttle |
Date: |
Thu, 18 Feb 2016 12:27:03 +0200 |
This patch adds the new bps_*_max_length and iops_*_max_length
parameters to the block_set_io_throttle command.
Signed-off-by: Alberto Garcia <address@hidden>
---
blockdev.c | 31 +++++++++++++++++++++++++++++++
hmp.c | 12 ++++++++++++
qapi/block-core.json | 51 +++++++++++++++++++++++++++++++++++++++++++++------
qmp-commands.hx | 25 ++++++++++++++++---------
4 files changed, 104 insertions(+), 15 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index e8871fc..a5523ec 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2590,6 +2590,18 @@ void qmp_block_set_io_throttle(const char *device,
int64_t bps, int64_t bps_rd,
int64_t iops_rd_max,
bool has_iops_wr_max,
int64_t iops_wr_max,
+ bool has_bps_max_length,
+ int64_t bps_max_length,
+ bool has_bps_rd_max_length,
+ int64_t bps_rd_max_length,
+ bool has_bps_wr_max_length,
+ int64_t bps_wr_max_length,
+ bool has_iops_max_length,
+ int64_t iops_max_length,
+ bool has_iops_rd_max_length,
+ int64_t iops_rd_max_length,
+ bool has_iops_wr_max_length,
+ int64_t iops_wr_max_length,
bool has_iops_size,
int64_t iops_size,
bool has_group,
@@ -2644,6 +2656,25 @@ void qmp_block_set_io_throttle(const char *device,
int64_t bps, int64_t bps_rd,
cfg.buckets[THROTTLE_OPS_WRITE].max = iops_wr_max;
}
+ if (has_bps_max_length) {
+ cfg.buckets[THROTTLE_BPS_TOTAL].burst_length = bps_max_length;
+ }
+ if (has_bps_rd_max_length) {
+ cfg.buckets[THROTTLE_BPS_READ].burst_length = bps_rd_max_length;
+ }
+ if (has_bps_wr_max_length) {
+ cfg.buckets[THROTTLE_BPS_WRITE].burst_length = bps_wr_max_length;
+ }
+ if (has_iops_max_length) {
+ cfg.buckets[THROTTLE_OPS_TOTAL].burst_length = iops_max_length;
+ }
+ if (has_iops_rd_max_length) {
+ cfg.buckets[THROTTLE_OPS_READ].burst_length = iops_rd_max_length;
+ }
+ if (has_iops_wr_max_length) {
+ cfg.buckets[THROTTLE_OPS_WRITE].burst_length = iops_wr_max_length;
+ }
+
if (has_iops_size) {
cfg.op_size = iops_size;
}
diff --git a/hmp.c b/hmp.c
index 996cb91..1f93181 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1414,6 +1414,18 @@ void hmp_block_set_io_throttle(Monitor *mon, const QDict
*qdict)
0,
false,
0,
+ false, /* no burst length via HMP */
+ 0,
+ false,
+ 0,
+ false,
+ 0,
+ false,
+ 0,
+ false,
+ 0,
+ false,
+ 0,
false, /* No default I/O size */
0,
false,
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 33012b8..126d834 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1298,17 +1298,53 @@
#
# @iops_wr: write I/O operations per second
#
-# @bps_max: #optional total max in bytes (Since 1.7)
+# @bps_max: #optional total throughput limit during bursts,
+# in bytes (Since 1.7)
#
-# @bps_rd_max: #optional read max in bytes (Since 1.7)
+# @bps_rd_max: #optional read throughput limit during bursts,
+# in bytes (Since 1.7)
#
-# @bps_wr_max: #optional write max in bytes (Since 1.7)
+# @bps_wr_max: #optional write throughput limit during bursts,
+# in bytes (Since 1.7)
#
-# @iops_max: #optional total I/O operations max (Since 1.7)
+# @iops_max: #optional total I/O operations per second during bursts,
+# in bytes (Since 1.7)
#
-# @iops_rd_max: #optional read I/O operations max (Since 1.7)
+# @iops_rd_max: #optional read I/O operations per second during bursts,
+# in bytes (Since 1.7)
#
-# @iops_wr_max: #optional write I/O operations max (Since 1.7)
+# @iops_wr_max: #optional write I/O operations per second during bursts,
+# in bytes (Since 1.7)
+#
+# @bps_max_length: #optional maximum length of the @bps_max burst
+# period, in seconds. It must only
+# be set if @bps_max is set as well.
+# Defaults to 1. (Since 2.6)
+#
+# @bps_rd_max_length: #optional maximum length of the @bps_rd_max
+# burst period, in seconds. It must only
+# be set if @bps_rd_max is set as well.
+# Defaults to 1. (Since 2.6)
+#
+# @bps_wr_max_length: #optional maximum length of the @bps_wr_max
+# burst period, in seconds. It must only
+# be set if @bps_wr_max is set as well.
+# Defaults to 1. (Since 2.6)
+#
+# @iops_max_length: #optional maximum length of the @iops burst
+# period, in seconds. It must only
+# be set if @iops_max is set as well.
+# Defaults to 1. (Since 2.6)
+#
+# @iops_rd_max_length: #optional maximum length of the @iops_rd_max
+# burst period, in seconds. It must only
+# be set if @iops_rd_max is set as well.
+# Defaults to 1. (Since 2.6)
+#
+# @iops_wr_max_length: #optional maximum length of the @iops_wr_max
+# burst period, in seconds. It must only
+# be set if @iops_wr_max is set as well.
+# Defaults to 1. (Since 2.6)
#
# @iops_size: #optional an I/O size in bytes (Since 1.7)
#
@@ -1325,6 +1361,9 @@
'*bps_max': 'int', '*bps_rd_max': 'int',
'*bps_wr_max': 'int', '*iops_max': 'int',
'*iops_rd_max': 'int', '*iops_wr_max': 'int',
+ '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
+ '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
+ '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
'*iops_size': 'int', '*group': 'str' } }
##
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 9fb0d78..085dc7d 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2006,7 +2006,7 @@ EQMP
{
.name = "block_set_io_throttle",
- .args_type =
"device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l,bps_max:l?,bps_rd_max:l?,bps_wr_max:l?,iops_max:l?,iops_rd_max:l?,iops_wr_max:l?,iops_size:l?,group:s?",
+ .args_type =
"device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l,bps_max:l?,bps_rd_max:l?,bps_wr_max:l?,iops_max:l?,iops_rd_max:l?,iops_wr_max:l?,bps_max_length:l?,bps_rd_max_length:l?,bps_wr_max_length:l?,iops_max_length:l?,iops_rd_max_length:l?,iops_wr_max_length:l?,iops_size:l?,group:s?",
.mhandler.cmd_new = qmp_marshal_block_set_io_throttle,
},
@@ -2025,14 +2025,20 @@ Arguments:
- "iops": total I/O operations per second (json-int)
- "iops_rd": read I/O operations per second (json-int)
- "iops_wr": write I/O operations per second (json-int)
-- "bps_max": total max in bytes (json-int)
-- "bps_rd_max": read max in bytes (json-int)
-- "bps_wr_max": write max in bytes (json-int)
-- "iops_max": total I/O operations max (json-int)
-- "iops_rd_max": read I/O operations max (json-int)
-- "iops_wr_max": write I/O operations max (json-int)
-- "iops_size": I/O size in bytes when limiting (json-int)
-- "group": throttle group name (json-string)
+- "bps_max": total throughput limit during bursts, in bytes (json-int,
optional)
+- "bps_rd_max": read throughput limit during bursts, in bytes (json-int,
optional)
+- "bps_wr_max": write throughput limit during bursts, in bytes (json-int,
optional)
+- "iops_max": total I/O operations per second during bursts (json-int,
optional)
+- "iops_rd_max": read I/O operations per second during bursts (json-int,
optional)
+- "iops_wr_max": write I/O operations per second during bursts (json-int,
optional)
+- "bps_max_length": maximum length of the @bps_max burst period, in seconds
(json-int, optional)
+- "bps_rd_max_length": maximum length of the @bps_rd_max burst period, in
seconds (json-int, optional)
+- "bps_wr_max_length": maximum length of the @bps_wr_max burst period, in
seconds (json-int, optional)
+- "iops_max_length": maximum length of the @iops_max burst period, in seconds
(json-int, optional)
+- "iops_rd_max_length": maximum length of the @iops_rd_max burst period, in
seconds (json-int, optional)
+- "iops_wr_max_length": maximum length of the @iops_wr_max burst period, in
seconds (json-int, optional)
+- "iops_size": I/O size in bytes when limiting (json-int, optional)
+- "group": throttle group name (json-string, optional)
Example:
@@ -2049,6 +2055,7 @@ Example:
"iops_max": 0,
"iops_rd_max": 0,
"iops_wr_max": 0,
+ "bps_max_length": 60,
"iops_size": 0 } }
<- { "return": {} }
--
2.7.0
- [Qemu-devel] [PATCH v2 12/17] throttle: Check that burst_level leaks correctly, (continued)
- [Qemu-devel] [PATCH v2 12/17] throttle: Check that burst_level leaks correctly, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 01/17] throttle: Make throttle_compute_timer() static, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 17/17] MAINTAINERS: Add myself as maintainer of the throttling code, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 14/17] qemu-iotests: Extend iotest 093 to test bursts, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 09/17] throttle: Add command-line settings to define the burst periods, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 13/17] throttle: Test throttle_compute_wait() during bursts, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 15/17] qapi: Correct the name of the iops_rd parameter, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 08/17] throttle: Add support for burst periods, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 05/17] throttle: Set always an average value when setting a maximum value, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 06/17] throttle: Merge all functions that check the configuration into one, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 10/17] qapi: Add burst length parameters to block_set_io_throttle,
Alberto Garcia <=
- [Qemu-devel] [PATCH v2 11/17] qapi: Add burst length fields to BlockDeviceInfo, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 16/17] docs: Document the throttling infrastructure, Alberto Garcia, 2016/02/18
- [Qemu-devel] [PATCH v2 03/17] throttle: Make throttle_max_is_missing_limit() set errp, Alberto Garcia, 2016/02/18
- Re: [Qemu-devel] [PATCH v2 00/17] throttle: Allow I/O bursts for a user-defined period of time, Kevin Wolf, 2016/02/22