From: Pradeep Jagadeesh <pradeepkiruvale@gmail.com>
To: eric blake <eblake@redhat.com>, greg kurz <groug@kaod.org>
Cc: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com>,
alberto garcia <berto@igalia.com>,
jani kokkonen <jani.kokkonen@huawei.com>,
qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v3 3/4] qmp: refactor duplicate code
Date: Tue, 2 May 2017 10:29:45 -0400 [thread overview]
Message-ID: <1493735386-39622-4-git-send-email-pradeep.jagadeesh@huawei.com> (raw)
In-Reply-To: <1493735386-39622-1-git-send-email-pradeep.jagadeesh@huawei.com>
This patchset factor out the duplicate qmp throttle interface code
that was present in both block and fsdev device files.
Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com>
---
blockdev.c | 53 +++----------------------------------
fsdev/qemu-fsdev-throttle.c | 51 +-----------------------------------
fsdev/qemu-fsdev.c | 1 -
hmp.c | 34 ++++++++++++------------
include/qemu/throttle-options.h | 5 ++++
util/Makefile.objs | 1 +
util/throttle-options.c | 58 +++++++++++++++++++++++++++++++++++++++++
7 files changed, 85 insertions(+), 118 deletions(-)
create mode 100644 util/throttle-options.c
diff --git a/blockdev.c b/blockdev.c
index 6428206..b056788 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2635,6 +2635,7 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, Error **errp)
BlockDriverState *bs;
BlockBackend *blk;
AioContext *aio_context;
+ IOThrottle *iothrottle;
blk = qmp_get_blk(arg->has_device ? arg->device : NULL,
arg->has_id ? arg->id : NULL,
@@ -2652,56 +2653,8 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, Error **errp)
goto out;
}
- throttle_config_init(&cfg);
- cfg.buckets[THROTTLE_BPS_TOTAL].avg = arg->bps;
- cfg.buckets[THROTTLE_BPS_READ].avg = arg->bps_rd;
- cfg.buckets[THROTTLE_BPS_WRITE].avg = arg->bps_wr;
-
- cfg.buckets[THROTTLE_OPS_TOTAL].avg = arg->iops;
- cfg.buckets[THROTTLE_OPS_READ].avg = arg->iops_rd;
- cfg.buckets[THROTTLE_OPS_WRITE].avg = arg->iops_wr;
-
- if (arg->has_bps_max) {
- cfg.buckets[THROTTLE_BPS_TOTAL].max = arg->bps_max;
- }
- if (arg->has_bps_rd_max) {
- cfg.buckets[THROTTLE_BPS_READ].max = arg->bps_rd_max;
- }
- if (arg->has_bps_wr_max) {
- cfg.buckets[THROTTLE_BPS_WRITE].max = arg->bps_wr_max;
- }
- if (arg->has_iops_max) {
- cfg.buckets[THROTTLE_OPS_TOTAL].max = arg->iops_max;
- }
- if (arg->has_iops_rd_max) {
- cfg.buckets[THROTTLE_OPS_READ].max = arg->iops_rd_max;
- }
- if (arg->has_iops_wr_max) {
- cfg.buckets[THROTTLE_OPS_WRITE].max = arg->iops_wr_max;
- }
-
- if (arg->has_bps_max_length) {
- cfg.buckets[THROTTLE_BPS_TOTAL].burst_length = arg->bps_max_length;
- }
- if (arg->has_bps_rd_max_length) {
- cfg.buckets[THROTTLE_BPS_READ].burst_length = arg->bps_rd_max_length;
- }
- if (arg->has_bps_wr_max_length) {
- cfg.buckets[THROTTLE_BPS_WRITE].burst_length = arg->bps_wr_max_length;
- }
- if (arg->has_iops_max_length) {
- cfg.buckets[THROTTLE_OPS_TOTAL].burst_length = arg->iops_max_length;
- }
- if (arg->has_iops_rd_max_length) {
- cfg.buckets[THROTTLE_OPS_READ].burst_length = arg->iops_rd_max_length;
- }
- if (arg->has_iops_wr_max_length) {
- cfg.buckets[THROTTLE_OPS_WRITE].burst_length = arg->iops_wr_max_length;
- }
-
- if (arg->has_iops_size) {
- cfg.op_size = arg->iops_size;
- }
+ iothrottle = qapi_BlockIOThrottle_base(arg);
+ qmp_set_io_throttle(&cfg, iothrottle);
if (!throttle_is_valid(&cfg, errp)) {
goto out;
diff --git a/fsdev/qemu-fsdev-throttle.c b/fsdev/qemu-fsdev-throttle.c
index 43dbcd8..cd653af 100644
--- a/fsdev/qemu-fsdev-throttle.c
+++ b/fsdev/qemu-fsdev-throttle.c
@@ -33,56 +33,7 @@ void fsdev_set_io_throttle(IOThrottle *arg, FsThrottle *fst, Error **errp)
{
ThrottleConfig cfg;
- throttle_config_init(&cfg);
- cfg.buckets[THROTTLE_BPS_TOTAL].avg = arg->bps;
- cfg.buckets[THROTTLE_BPS_READ].avg = arg->bps_rd;
- cfg.buckets[THROTTLE_BPS_WRITE].avg = arg->bps_wr;
-
- cfg.buckets[THROTTLE_OPS_TOTAL].avg = arg->iops;
- cfg.buckets[THROTTLE_OPS_READ].avg = arg->iops_rd;
- cfg.buckets[THROTTLE_OPS_WRITE].avg = arg->iops_wr;
-
- if (arg->has_bps_max) {
- cfg.buckets[THROTTLE_BPS_TOTAL].max = arg->bps_max;
- }
- if (arg->has_bps_rd_max) {
- cfg.buckets[THROTTLE_BPS_READ].max = arg->bps_rd_max;
- }
- if (arg->has_bps_wr_max) {
- cfg.buckets[THROTTLE_BPS_WRITE].max = arg->bps_wr_max;
- }
- if (arg->has_iops_max) {
- cfg.buckets[THROTTLE_OPS_TOTAL].max = arg->iops_max;
- }
- if (arg->has_iops_rd_max) {
- cfg.buckets[THROTTLE_OPS_READ].max = arg->iops_rd_max;
- }
- if (arg->has_iops_wr_max) {
- cfg.buckets[THROTTLE_OPS_WRITE].max = arg->iops_wr_max;
- }
-
- if (arg->has_bps_max_length) {
- cfg.buckets[THROTTLE_BPS_TOTAL].burst_length = arg->bps_max_length;
- }
- if (arg->has_bps_rd_max_length) {
- cfg.buckets[THROTTLE_BPS_READ].burst_length = arg->bps_rd_max_length;
- }
- if (arg->has_bps_wr_max_length) {
- cfg.buckets[THROTTLE_BPS_WRITE].burst_length = arg->bps_wr_max_length;
- }
- if (arg->has_iops_max_length) {
- cfg.buckets[THROTTLE_OPS_TOTAL].burst_length = arg->iops_max_length;
- }
- if (arg->has_iops_rd_max_length) {
- cfg.buckets[THROTTLE_OPS_READ].burst_length = arg->iops_rd_max_length;
- }
- if (arg->has_iops_wr_max_length) {
- cfg.buckets[THROTTLE_OPS_WRITE].burst_length = arg->iops_wr_max_length;
- }
-
- if (arg->has_iops_size) {
- cfg.op_size = arg->iops_size;
- }
+ qmp_set_io_throttle(&cfg, arg);
if (throttle_is_valid(&cfg, errp)) {
fst->cfg = cfg;
diff --git a/fsdev/qemu-fsdev.c b/fsdev/qemu-fsdev.c
index a99e299..8c078b1 100644
--- a/fsdev/qemu-fsdev.c
+++ b/fsdev/qemu-fsdev.c
@@ -102,7 +102,6 @@ FsDriverEntry *get_fsdev_fsentry(char *id)
void qmp_fsdev_set_io_throttle(IOThrottle *arg, Error **errp)
{
-
FsDriverEntry *fse;
fse = get_fsdev_fsentry(arg->has_id ? arg->id : NULL);
diff --git a/hmp.c b/hmp.c
index 9c02e55..05c28b5 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1553,20 +1553,29 @@ void hmp_change(Monitor *mon, const QDict *qdict)
hmp_handle_error(mon, &err);
}
+static void hmp_initialize_io_throttle(IOThrottle *iot, const QDict *qdict)
+{
+ iot->has_id = true;
+ iot->id = (char *) qdict_get_str(qdict, "id");
+ iot->bps = qdict_get_int(qdict, "bps");
+ iot->bps_rd = qdict_get_int(qdict, "bps_rd");
+ iot->bps_wr = qdict_get_int(qdict, "bps_wr");
+ iot->iops = qdict_get_int(qdict, "iops");
+ iot->iops_rd = qdict_get_int(qdict, "iops_rd");
+ iot->iops_wr = qdict_get_int(qdict, "iops_wr");
+}
+
void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
+ IOThrottle *iothrottle;
BlockIOThrottle throttle = {
.has_device = true,
.device = (char *) qdict_get_str(qdict, "device"),
- .bps = qdict_get_int(qdict, "bps"),
- .bps_rd = qdict_get_int(qdict, "bps_rd"),
- .bps_wr = qdict_get_int(qdict, "bps_wr"),
- .iops = qdict_get_int(qdict, "iops"),
- .iops_rd = qdict_get_int(qdict, "iops_rd"),
- .iops_wr = qdict_get_int(qdict, "iops_wr"),
};
+ iothrottle = qapi_BlockIOThrottle_base(&throttle);
+ hmp_initialize_io_throttle(iothrottle, qdict);
qmp_block_set_io_throttle(&throttle, &err);
hmp_handle_error(mon, &err);
}
@@ -1576,17 +1585,8 @@ void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict)
void hmp_fsdev_set_io_throttle(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
- IOThrottle throttle = {
- .has_id = true,
- .id = (char *) qdict_get_str(qdict, "id"),
- .bps = qdict_get_int(qdict, "bps"),
- .bps_rd = qdict_get_int(qdict, "bps_rd"),
- .bps_wr = qdict_get_int(qdict, "bps_wr"),
- .iops = qdict_get_int(qdict, "iops"),
- .iops_rd = qdict_get_int(qdict, "iops_rd"),
- .iops_wr = qdict_get_int(qdict, "iops_wr"),
- };
-
+ IOThrottle throttle;
+ hmp_initialize_io_throttle(&throttle, qdict);
qmp_fsdev_set_io_throttle(&throttle, &err);
hmp_handle_error(mon, &err);
}
diff --git a/include/qemu/throttle-options.h b/include/qemu/throttle-options.h
index 3133d1c..ca0fd7d 100644
--- a/include/qemu/throttle-options.h
+++ b/include/qemu/throttle-options.h
@@ -10,6 +10,9 @@
#ifndef THROTTLE_OPTIONS_H
#define THROTTLE_OPTIONS_H
+#include "qemu/throttle.h"
+#include "qmp-commands.h"
+
#define THROTTLE_OPTS \
{ \
.name = "throttling.iops-total",\
@@ -89,4 +92,6 @@
.help = "when limiting by iops max size of an I/O in bytes",\
}
+void qmp_set_io_throttle(ThrottleConfig *, IOThrottle *);
+
#endif
diff --git a/util/Makefile.objs b/util/Makefile.objs
index c6205eb..7119ce0 100644
--- a/util/Makefile.objs
+++ b/util/Makefile.objs
@@ -43,3 +43,4 @@ util-obj-y += qdist.o
util-obj-y += qht.o
util-obj-y += range.o
util-obj-y += systemd.o
+util-obj-y += throttle-options.o
diff --git a/util/throttle-options.c b/util/throttle-options.c
new file mode 100644
index 0000000..47cffed
--- /dev/null
+++ b/util/throttle-options.c
@@ -0,0 +1,58 @@
+#include "qemu/osdep.h"
+#include "qemu/error-report.h"
+#include "qemu/throttle-options.h"
+#include "qemu/iov.h"
+
+void qmp_set_io_throttle(ThrottleConfig *cfg, IOThrottle *arg)
+{
+ throttle_config_init(cfg);
+ cfg->buckets[THROTTLE_BPS_TOTAL].avg = arg->bps;
+ cfg->buckets[THROTTLE_BPS_READ].avg = arg->bps_rd;
+ cfg->buckets[THROTTLE_BPS_WRITE].avg = arg->bps_wr;
+
+ cfg->buckets[THROTTLE_OPS_TOTAL].avg = arg->iops;
+ cfg->buckets[THROTTLE_OPS_READ].avg = arg->iops_rd;
+ cfg->buckets[THROTTLE_OPS_WRITE].avg = arg->iops_wr;
+
+ if (arg->has_bps_max) {
+ cfg->buckets[THROTTLE_BPS_TOTAL].max = arg->bps_max;
+ }
+ if (arg->has_bps_rd_max) {
+ cfg->buckets[THROTTLE_BPS_READ].max = arg->bps_rd_max;
+ }
+ if (arg->has_bps_wr_max) {
+ cfg->buckets[THROTTLE_BPS_WRITE].max = arg->bps_wr_max;
+ }
+ if (arg->has_iops_max) {
+ cfg->buckets[THROTTLE_OPS_TOTAL].max = arg->iops_max;
+ }
+ if (arg->has_iops_rd_max) {
+ cfg->buckets[THROTTLE_OPS_READ].max = arg->iops_rd_max;
+ }
+ if (arg->has_iops_wr_max) {
+ cfg->buckets[THROTTLE_OPS_WRITE].max = arg->iops_wr_max;
+ }
+
+ if (arg->has_bps_max_length) {
+ cfg->buckets[THROTTLE_BPS_TOTAL].burst_length = arg->bps_max_length;
+ }
+ if (arg->has_bps_rd_max_length) {
+ cfg->buckets[THROTTLE_BPS_READ].burst_length = arg->bps_rd_max_length;
+ }
+ if (arg->has_bps_wr_max_length) {
+ cfg->buckets[THROTTLE_BPS_WRITE].burst_length = arg->bps_wr_max_length;
+ }
+ if (arg->has_iops_max_length) {
+ cfg->buckets[THROTTLE_OPS_TOTAL].burst_length = arg->iops_max_length;
+ }
+ if (arg->has_iops_rd_max_length) {
+ cfg->buckets[THROTTLE_OPS_READ].burst_length = arg->iops_rd_max_length;
+ }
+ if (arg->has_iops_wr_max_length) {
+ cfg->buckets[THROTTLE_OPS_WRITE].burst_length = arg->iops_wr_max_length;
+ }
+
+ if (arg->has_iops_size) {
+ cfg->op_size = arg->iops_size;
+ }
+}
--
1.8.3.1
next prev parent reply other threads:[~2017-05-02 14:30 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-02 14:29 [Qemu-devel] [PATCH v3 0/4] fsdev: qmp interface for io throttling Pradeep Jagadeesh
2017-05-02 14:29 ` [Qemu-devel] [PATCH v3 1/4] Throttle: Create IOThrottle structure Pradeep Jagadeesh
2017-05-02 21:56 ` Eric Blake
2017-05-03 6:22 ` Greg Kurz
2017-05-03 14:19 ` Pradeep Jagadeesh
2017-05-03 17:10 ` Greg Kurz
2017-05-02 14:29 ` [Qemu-devel] [PATCH v3 2/4] fsdev: QMP interface for throttling Pradeep Jagadeesh
2017-05-02 22:13 ` Eric Blake
2017-05-03 15:40 ` Pradeep Jagadeesh
2017-05-03 16:32 ` Eric Blake
2017-05-04 15:12 ` Pradeep Jagadeesh
2017-05-04 15:19 ` Eric Blake
2017-05-05 11:09 ` Pradeep Jagadeesh
2017-05-02 14:29 ` Pradeep Jagadeesh [this message]
2017-05-02 22:15 ` [Qemu-devel] [PATCH v3 3/4] qmp: refactor duplicate code Eric Blake
2017-05-03 17:21 ` Greg Kurz
2017-05-04 9:44 ` Pradeep Jagadeesh
2017-05-02 14:29 ` [Qemu-devel] [PATCH v3 4/4] throttle: factor out " Pradeep Jagadeesh
2017-05-02 15:03 ` [Qemu-devel] [PATCH v3 0/4] fsdev: qmp interface for io throttling no-reply
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=1493735386-39622-4-git-send-email-pradeep.jagadeesh@huawei.com \
--to=pradeepkiruvale@gmail.com \
--cc=berto@igalia.com \
--cc=eblake@redhat.com \
--cc=groug@kaod.org \
--cc=jani.kokkonen@huawei.com \
--cc=pradeep.jagadeesh@huawei.com \
--cc=qemu-devel@nongnu.org \
/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.