* [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices @ 2017-02-03 11:57 Pradeep Jagadeesh 2017-02-03 11:57 ` [Qemu-devel] [PATCH 1/2 " Pradeep Jagadeesh ` (2 more replies) 0 siblings, 3 replies; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-03 11:57 UTC (permalink / raw) To: Aneesh Kumar K.V, Greg Kurz; +Cc: Pradeep Jagadeesh, Alberto Garcia, qemu-devel This patch set adds the IO throttling functionality to fsdev/9p devices. So far cgroups were used for throttling IO opertions on the fsdev/9p devices. It is difficult to use cgroups for throttling because we have to set up cgroups externally before we start the qemu process. Qemu provides the throttling apis for implementing the throttling. Block devices already make use of these APIs for throtting the IO operations. So, we use the same APIs to enable the throttling functionality for fsdevices.As of now the feature is enabled only on 9p-local driver. This feature can be used as shown in the below example: -fsdev local,id=sdb1,path=PATH_TO_DEVICE,security_model=none,writeout=immediate, throttling.bps-read=4194304,throttling.bps-write=4194304 -device virtio-9p-pci,fsdev=sdb1,mount_tag=sdb1 The main advantages are: - Easy to use because the throttling options are part of qemu cli options - Provides a uniform way of using throttling options across block and fsdev/9p devices - No need to setup cgroup to provide throttling functionality for the fsdev devices. - Removes the redundant throttling code that was present in block and fsdev files Missing features: -QMP support -Throttling support for other fsdev/9p drivers. Thanks, Pradeep Pradeep Jagadeesh (2): fsdev: add IO throttle support to fsdev devices throttle: factor out duplicate code blockdev.c | 81 ++------------------------- fsdev/Makefile.objs | 2 +- fsdev/file-op-9p.h | 3 + fsdev/qemu-fsdev-opts.c | 3 + fsdev/qemu-fsdev-throttle.c | 118 ++++++++++++++++++++++++++++++++++++++++ fsdev/qemu-fsdev-throttle.h | 39 +++++++++++++ hw/9pfs/9p-local.c | 8 +++ hw/9pfs/9p.c | 5 ++ hw/9pfs/cofile.c | 2 + include/qemu/throttle-options.h | 92 +++++++++++++++++++++++++++++++ 10 files changed, 275 insertions(+), 78 deletions(-) create mode 100644 fsdev/qemu-fsdev-throttle.c create mode 100644 fsdev/qemu-fsdev-throttle.h create mode 100644 include/qemu/throttle-options.h -- 1.8.3.1 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-03 11:57 [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices Pradeep Jagadeesh @ 2017-02-03 11:57 ` Pradeep Jagadeesh 2017-02-03 12:21 ` Alberto Garcia 2017-02-06 19:36 ` Eric Blake 2017-02-03 11:57 ` [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code Pradeep Jagadeesh 2017-02-03 12:02 ` [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices no-reply 2 siblings, 2 replies; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-03 11:57 UTC (permalink / raw) To: Aneesh Kumar K.V, Greg Kurz; +Cc: Pradeep Jagadeesh, Alberto Garcia, qemu-devel This patchset adds the throttle support for the 9p-local driver. For now this functionality can be enabled only through qemu cli options. QMP interface and support to other drivers need further extensions. To make it simple for other 9p drivers, the throttle code has been put in separate files. Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> --- fsdev/Makefile.objs | 2 +- fsdev/file-op-9p.h | 3 ++ fsdev/qemu-fsdev-opts.c | 77 ++++++++++++++++++++++++++++- fsdev/qemu-fsdev-throttle.c | 118 ++++++++++++++++++++++++++++++++++++++++++++ fsdev/qemu-fsdev-throttle.h | 39 +++++++++++++++ hw/9pfs/9p-local.c | 8 +++ hw/9pfs/9p.c | 5 ++ hw/9pfs/cofile.c | 2 + 8 files changed, 252 insertions(+), 2 deletions(-) create mode 100644 fsdev/qemu-fsdev-throttle.c create mode 100644 fsdev/qemu-fsdev-throttle.h diff --git a/fsdev/Makefile.objs b/fsdev/Makefile.objs index 1b120a4..659df6e 100644 --- a/fsdev/Makefile.objs +++ b/fsdev/Makefile.objs @@ -5,7 +5,7 @@ common-obj-y = qemu-fsdev.o 9p-marshal.o 9p-iov-marshal.o else common-obj-y = qemu-fsdev-dummy.o endif -common-obj-y += qemu-fsdev-opts.o +common-obj-y += qemu-fsdev-opts.o qemu-fsdev-throttle.o # Toplevel always builds this; targets without virtio will put it in # common-obj-y diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h index a56dc84..0844a40 100644 --- a/fsdev/file-op-9p.h +++ b/fsdev/file-op-9p.h @@ -17,6 +17,7 @@ #include <dirent.h> #include <utime.h> #include <sys/vfs.h> +#include "qemu-fsdev-throttle.h" #define SM_LOCAL_MODE_BITS 0600 #define SM_LOCAL_DIR_MODE_BITS 0700 @@ -74,6 +75,7 @@ typedef struct FsDriverEntry { char *path; int export_flags; FileOperations *ops; + FsThrottle fst; } FsDriverEntry; typedef struct FsContext @@ -83,6 +85,7 @@ typedef struct FsContext int export_flags; struct xattr_operations **xops; struct extended_ops exops; + FsThrottle *fst; /* fs driver specific data */ void *private; } FsContext; diff --git a/fsdev/qemu-fsdev-opts.c b/fsdev/qemu-fsdev-opts.c index 1dd8c7a..385423f0 100644 --- a/fsdev/qemu-fsdev-opts.c +++ b/fsdev/qemu-fsdev-opts.c @@ -37,8 +37,83 @@ static QemuOptsList qemu_fsdev_opts = { }, { .name = "sock_fd", .type = QEMU_OPT_NUMBER, + }, { + .name = "throttling.iops-total", + .type = QEMU_OPT_NUMBER, + .help = "limit total I/O operations per second", + }, { + .name = "throttling.iops-read", + .type = QEMU_OPT_NUMBER, + .help = "limit read operations per second", + }, { + .name = "throttling.iops-write", + .type = QEMU_OPT_NUMBER, + .help = "limit write operations per second", + }, { + .name = "throttling.bps-total", + .type = QEMU_OPT_NUMBER, + .help = "limit total bytes per second", + }, { + .name = "throttling.bps-read", + .type = QEMU_OPT_NUMBER, + .help = "limit read bytes per second", + }, { + .name = "throttling.bps-write", + .type = QEMU_OPT_NUMBER, + .help = "limit write bytes per second", + }, { + .name = "throttling.iops-total-max", + .type = QEMU_OPT_NUMBER, + .help = "I/O operations burst", + }, { + .name = "throttling.iops-read-max", + .type = QEMU_OPT_NUMBER, + .help = "I/O operations read burst", + }, { + .name = "throttling.iops-write-max", + .type = QEMU_OPT_NUMBER, + .help = "I/O operations write burst", + }, { + .name = "throttling.bps-total-max", + .type = QEMU_OPT_NUMBER, + .help = "total bytes burst", + }, { + .name = "throttling.bps-read-max", + .type = QEMU_OPT_NUMBER, + .help = "total bytes read burst", + }, { + .name = "throttling.bps-write-max", + .type = QEMU_OPT_NUMBER, + .help = "total bytes write burst", + }, { + .name = "throttling.iops-total-max-length", + .type = QEMU_OPT_NUMBER, + .help = "length of the iops-total-max burst period, in seconds", + }, { + .name = "throttling.iops-read-max-length", + .type = QEMU_OPT_NUMBER, + .help = "length of the iops-read-max burst period, in seconds", + }, { + .name = "throttling.iops-write-max-length", + .type = QEMU_OPT_NUMBER, + .help = "length of the iops-write-max burst period, in seconds", + }, { + .name = "throttling.bps-total-max-length", + .type = QEMU_OPT_NUMBER, + .help = "length of the bps-total-max burst period, in seconds", + }, { + .name = "throttling.bps-read-max-length", + .type = QEMU_OPT_NUMBER, + .help = "length of the bps-read-max burst period, in seconds", + }, { + .name = "throttling.bps-write-max-length", + .type = QEMU_OPT_NUMBER, + .help = "length of the bps-write-max burst period, in seconds", + }, { + .name = "throttling.iops-size", + .type = QEMU_OPT_NUMBER, + .help = "when limiting by iops max size of an I/O in bytes", }, - { /*End of list */ } }, }; diff --git a/fsdev/qemu-fsdev-throttle.c b/fsdev/qemu-fsdev-throttle.c new file mode 100644 index 0000000..feb9af3 --- /dev/null +++ b/fsdev/qemu-fsdev-throttle.c @@ -0,0 +1,118 @@ +/* + * Fsdev Throttle + * + * Copyright (C) 2016 Huawei Technologies Duesseldorf GmbH + * + * Author: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * (at your option) any later version. + * + * See the COPYING file in the top-level directory for details. + * + */ + +#include "qemu/osdep.h" +#include "qemu/error-report.h" +#include "qemu-fsdev-throttle.h" +#include "qemu/iov.h" + +static void fsdev_throttle_read_timer_cb(void *opaque) +{ + FsThrottle *fst = opaque; + qemu_co_enter_next(&fst->throttled_reqs[false]); +} + +static void fsdev_throttle_write_timer_cb(void *opaque) +{ + FsThrottle *fst = opaque; + qemu_co_enter_next(&fst->throttled_reqs[true]); +} + +void fsdev_throttle_parse_opts(QemuOpts *opts, FsThrottle *fst, Error **errp) +{ + throttle_config_init(&fst->cfg); + fst->cfg.buckets[THROTTLE_BPS_TOTAL].avg = + qemu_opt_get_number(opts, "throttling.bps-total", 0); + fst->cfg.buckets[THROTTLE_BPS_READ].avg = + qemu_opt_get_number(opts, "throttling.bps-read", 0); + fst->cfg.buckets[THROTTLE_BPS_WRITE].avg = + qemu_opt_get_number(opts, "throttling.bps-write", 0); + fst->cfg.buckets[THROTTLE_OPS_TOTAL].avg = + qemu_opt_get_number(opts, "throttling.iops-total", 0); + fst->cfg.buckets[THROTTLE_OPS_READ].avg = + qemu_opt_get_number(opts, "throttling.iops-read", 0); + fst->cfg.buckets[THROTTLE_OPS_WRITE].avg = + qemu_opt_get_number(opts, "throttling.iops-write", 0); + + fst->cfg.buckets[THROTTLE_BPS_TOTAL].max = + qemu_opt_get_number(opts, "throttling.bps-total-max", 0); + fst->cfg.buckets[THROTTLE_BPS_READ].max = + qemu_opt_get_number(opts, "throttling.bps-read-max", 0); + fst->cfg.buckets[THROTTLE_BPS_WRITE].max = + qemu_opt_get_number(opts, "throttling.bps-write-max", 0); + fst->cfg.buckets[THROTTLE_OPS_TOTAL].max = + qemu_opt_get_number(opts, "throttling.iops-total-max", 0); + fst->cfg.buckets[THROTTLE_OPS_READ].max = + qemu_opt_get_number(opts, "throttling.iops-read-max", 0); + fst->cfg.buckets[THROTTLE_OPS_WRITE].max = + qemu_opt_get_number(opts, "throttling.iops-write-max", 0); + + fst->cfg.buckets[THROTTLE_BPS_TOTAL].burst_length = + qemu_opt_get_number(opts, "throttling.bps-total-max-length", 1); + fst->cfg.buckets[THROTTLE_BPS_READ].burst_length = + qemu_opt_get_number(opts, "throttling.bps-read-max-length", 1); + fst->cfg.buckets[THROTTLE_BPS_WRITE].burst_length = + qemu_opt_get_number(opts, "throttling.bps-write-max-length", 1); + fst->cfg.buckets[THROTTLE_OPS_TOTAL].burst_length = + qemu_opt_get_number(opts, "throttling.iops-total-max-length", 1); + fst->cfg.buckets[THROTTLE_OPS_READ].burst_length = + qemu_opt_get_number(opts, "throttling.iops-read-max-length", 1); + fst->cfg.buckets[THROTTLE_OPS_WRITE].burst_length = + qemu_opt_get_number(opts, "throttling.iops-write-max-length", 1); + fst->cfg.op_size = + qemu_opt_get_number(opts, "throttling.iops-size", 0); + + throttle_is_valid(&fst->cfg, errp); +} + +void fsdev_throttle_init(FsThrottle *fst) +{ + if (throttle_enabled(&fst->cfg)) { + throttle_init(&fst->ts); + throttle_timers_init(&fst->tt, + qemu_get_aio_context(), + QEMU_CLOCK_REALTIME, + fsdev_throttle_read_timer_cb, + fsdev_throttle_write_timer_cb, + fst); + throttle_config(&fst->ts, &fst->tt, &fst->cfg); + qemu_co_queue_init(&fst->throttled_reqs[0]); + qemu_co_queue_init(&fst->throttled_reqs[1]); + } +} + +void coroutine_fn fsdev_co_throttle_request(FsThrottle *fst, bool is_write, + struct iovec *iov, int iovcnt) +{ + if (throttle_enabled(&fst->cfg)) { + if (throttle_schedule_timer(&fst->ts, &fst->tt, is_write) || + !qemu_co_queue_empty(&fst->throttled_reqs[is_write])) { + qemu_co_queue_wait(&fst->throttled_reqs[is_write]); + } + + throttle_account(&fst->ts, is_write, iov_size(iov, iovcnt)); + + if (!qemu_co_queue_empty(&fst->throttled_reqs[is_write]) && + !throttle_schedule_timer(&fst->ts, &fst->tt, is_write)) { + qemu_co_queue_next(&fst->throttled_reqs[is_write]); + } + } +} + +void fsdev_throttle_cleanup(FsThrottle *fst) +{ + if (throttle_enabled(&fst->cfg)) { + throttle_timers_destroy(&fst->tt); + } +} diff --git a/fsdev/qemu-fsdev-throttle.h b/fsdev/qemu-fsdev-throttle.h new file mode 100644 index 0000000..e418643 --- /dev/null +++ b/fsdev/qemu-fsdev-throttle.h @@ -0,0 +1,39 @@ +/* + * Fsdev Throttle + * + * Copyright (C) 2016 Huawei Technologies Duesseldorf GmbH + * + * Author: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * (at your option) any later version. + * + * See the COPYING file in the top-level directory for details. + * + */ + +#ifndef _FSDEV_THROTTLE_H +#define _FSDEV_THROTTLE_H + +#include "block/aio.h" +#include "qemu/main-loop.h" +#include "qemu/coroutine.h" +#include "qapi/error.h" +#include "qemu/throttle.h" + +typedef struct FsThrottle { + ThrottleState ts; + ThrottleTimers tt; + ThrottleConfig cfg; + CoQueue throttled_reqs[2]; +} FsThrottle; + +void fsdev_throttle_parse_opts(QemuOpts *, FsThrottle *, Error **); + +void fsdev_throttle_init(FsThrottle *); + +void coroutine_fn fsdev_co_throttle_request(FsThrottle *, bool , + struct iovec *, int); + +void fsdev_throttle_cleanup(FsThrottle *); +#endif /* _FSDEV_THROTTLE_H */ diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 845675e..828348d 100644 --- a/hw/9pfs/9p-local.c +++ b/hw/9pfs/9p-local.c @@ -1209,6 +1209,7 @@ static int local_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse) { const char *sec_model = qemu_opt_get(opts, "security_model"); const char *path = qemu_opt_get(opts, "path"); + Error *err = NULL; if (!sec_model) { error_report("Security model not specified, local fs needs security model"); @@ -1237,6 +1238,13 @@ static int local_parse_opts(QemuOpts *opts, struct FsDriverEntry *fse) error_report("fsdev: No path specified"); return -1; } + + fsdev_throttle_parse_opts(opts, &fse->fst, &err); + if (err) { + error_reportf_err(err, "Throttle configuration is not valid: "); + return -1; + } + fse->path = g_strdup(path); return 0; diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c index fa58877..22a6a99 100644 --- a/hw/9pfs/9p.c +++ b/hw/9pfs/9p.c @@ -3520,6 +3520,10 @@ int v9fs_device_realize_common(V9fsState *s, Error **errp) error_setg(errp, "share path %s is not a directory", fse->path); goto out; } + + s->ctx.fst = &fse->fst; + fsdev_throttle_init(s->ctx.fst); + v9fs_path_free(&path); rc = 0; @@ -3540,6 +3544,7 @@ void v9fs_device_unrealize_common(V9fsState *s, Error **errp) if (s->ops->cleanup) { s->ops->cleanup(&s->ctx); } + fsdev_throttle_cleanup(s->ctx.fst); g_free(s->tag); g_free(s->ctx.fs_root); } diff --git a/hw/9pfs/cofile.c b/hw/9pfs/cofile.c index 120e267..88791bc 100644 --- a/hw/9pfs/cofile.c +++ b/hw/9pfs/cofile.c @@ -247,6 +247,7 @@ int coroutine_fn v9fs_co_pwritev(V9fsPDU *pdu, V9fsFidState *fidp, if (v9fs_request_cancelled(pdu)) { return -EINTR; } + fsdev_co_throttle_request(s->ctx.fst, true, iov, iovcnt); v9fs_co_run_in_worker( { err = s->ops->pwritev(&s->ctx, &fidp->fs, iov, iovcnt, offset); @@ -266,6 +267,7 @@ int coroutine_fn v9fs_co_preadv(V9fsPDU *pdu, V9fsFidState *fidp, if (v9fs_request_cancelled(pdu)) { return -EINTR; } + fsdev_co_throttle_request(s->ctx.fst, false, iov, iovcnt); v9fs_co_run_in_worker( { err = s->ops->preadv(&s->ctx, &fidp->fs, iov, iovcnt, offset); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-03 11:57 ` [Qemu-devel] [PATCH 1/2 " Pradeep Jagadeesh @ 2017-02-03 12:21 ` Alberto Garcia 2017-02-06 19:36 ` Eric Blake 1 sibling, 0 replies; 25+ messages in thread From: Alberto Garcia @ 2017-02-03 12:21 UTC (permalink / raw) To: Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz Cc: Pradeep Jagadeesh, qemu-devel On Fri 03 Feb 2017 12:57:22 PM CET, Pradeep Jagadeesh wrote: > This patchset adds the throttle support for the 9p-local driver. For > now this functionality can be enabled only through qemu cli options. > QMP interface and support to other drivers need further extensions. > To make it simple for other 9p drivers, the throttle code has been put > in separate files. > > Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Berto ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-03 11:57 ` [Qemu-devel] [PATCH 1/2 " Pradeep Jagadeesh 2017-02-03 12:21 ` Alberto Garcia @ 2017-02-06 19:36 ` Eric Blake 2017-02-06 23:15 ` Greg Kurz ` (2 more replies) 1 sibling, 3 replies; 25+ messages in thread From: Eric Blake @ 2017-02-06 19:36 UTC (permalink / raw) To: Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz Cc: Alberto Garcia, Pradeep Jagadeesh, qemu-devel [-- Attachment #1: Type: text/plain, Size: 768 bytes --] On 02/03/2017 05:57 AM, Pradeep Jagadeesh wrote: > This patchset adds the throttle support for the 9p-local driver. > For now this functionality can be enabled only through qemu cli options. > QMP interface and support to other drivers need further extensions. This part is a bit scary - if 2.9 is released with just the cli option and not the QMP interface, then how does someone like libvirt introspect whether the feature is available for use? Please make sure we don't reach 2.9 with only a half-baked feature; whether that means finishing the QMP work or temporarily disabling the cli additions until a later release can finish the work. -- 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] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-06 19:36 ` Eric Blake @ 2017-02-06 23:15 ` Greg Kurz 2017-02-07 10:32 ` Greg Kurz 2017-02-07 6:18 ` Fam Zheng 2017-02-07 10:34 ` Pradeep Jagadeesh 2 siblings, 1 reply; 25+ messages in thread From: Greg Kurz @ 2017-02-06 23:15 UTC (permalink / raw) To: Eric Blake Cc: Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel [-- Attachment #1: Type: text/plain, Size: 1076 bytes --] On Mon, 6 Feb 2017 13:36:43 -0600 Eric Blake <eblake@redhat.com> wrote: > On 02/03/2017 05:57 AM, Pradeep Jagadeesh wrote: > > This patchset adds the throttle support for the 9p-local driver. > > For now this functionality can be enabled only through qemu cli options. > > QMP interface and support to other drivers need further extensions. > > This part is a bit scary - if 2.9 is released with just the cli option > and not the QMP interface, then how does someone like libvirt introspect > whether the feature is available for use? > I'm not aware of anything related to fsdev in QMP... and libvirt seems to only parse the output of -help to guess fsdev capabilities. And indeed, qemu-options.hx doesn't expose this new feature. > Please make sure we don't reach 2.9 with only a half-baked feature; > whether that means finishing the QMP work or temporarily disabling the > cli additions until a later release can finish the work. > Would this be ok to add the missing bits in qemu-options.hx or do you expect more ? Cheers. -- Greg [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-06 23:15 ` Greg Kurz @ 2017-02-07 10:32 ` Greg Kurz 2017-02-07 15:56 ` Eric Blake 0 siblings, 1 reply; 25+ messages in thread From: Greg Kurz @ 2017-02-07 10:32 UTC (permalink / raw) To: Eric Blake Cc: Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel [-- Attachment #1: Type: text/plain, Size: 1358 bytes --] On Tue, 7 Feb 2017 00:15:33 +0100 Greg Kurz <groug@kaod.org> wrote: > On Mon, 6 Feb 2017 13:36:43 -0600 > Eric Blake <eblake@redhat.com> wrote: > > > On 02/03/2017 05:57 AM, Pradeep Jagadeesh wrote: > > > This patchset adds the throttle support for the 9p-local driver. > > > For now this functionality can be enabled only through qemu cli options. > > > QMP interface and support to other drivers need further extensions. > > > > This part is a bit scary - if 2.9 is released with just the cli option > > and not the QMP interface, then how does someone like libvirt introspect > > whether the feature is available for use? > > > > I'm not aware of anything related to fsdev in QMP... and libvirt seems to > only parse the output of -help to guess fsdev capabilities. Oops, reading some more libvirt code I now see that libvirt doesn't parse -help anymore with QEMU >= 1.2.0... sorry for the noise :) > And indeed, > qemu-options.hx doesn't expose this new feature. > > > Please make sure we don't reach 2.9 with only a half-baked feature; > > whether that means finishing the QMP work or temporarily disabling the > > cli additions until a later release can finish the work. > > > > Would this be ok to add the missing bits in qemu-options.hx or do you > expect more ? > > Cheers. > > -- > Greg [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-07 10:32 ` Greg Kurz @ 2017-02-07 15:56 ` Eric Blake 2017-02-07 16:29 ` Greg Kurz 0 siblings, 1 reply; 25+ messages in thread From: Eric Blake @ 2017-02-07 15:56 UTC (permalink / raw) To: Greg Kurz Cc: Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel [-- Attachment #1: Type: text/plain, Size: 1341 bytes --] On 02/07/2017 04:32 AM, Greg Kurz wrote: >> >> I'm not aware of anything related to fsdev in QMP... and libvirt seems to >> only parse the output of -help to guess fsdev capabilities. > > Oops, reading some more libvirt code I now see that libvirt doesn't parse > -help anymore with QEMU >= 1.2.0... sorry for the noise :) > >> And indeed, >> qemu-options.hx doesn't expose this new feature. >> >>> Please make sure we don't reach 2.9 with only a half-baked feature; >>> whether that means finishing the QMP work or temporarily disabling the >>> cli additions until a later release can finish the work. >>> >> >> Would this be ok to add the missing bits in qemu-options.hx or do you >> expect more ? If it cannot be probed via QMP, then libvirt will most likely assume that it does not exist. I guess we're okay having command line only in 2.9 if you can't get QMP working, because libvirt will just never drive the feature until 2.10 when QMP is available; but then we risk the command line subtly changing and breaking someone else that was using the command line without QMP. Maybe the safest approach is to just use the 'x-' prefix to the command line portion, until the feature is complete. -- 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] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-07 15:56 ` Eric Blake @ 2017-02-07 16:29 ` Greg Kurz 2017-02-14 13:21 ` Stefan Hajnoczi 0 siblings, 1 reply; 25+ messages in thread From: Greg Kurz @ 2017-02-07 16:29 UTC (permalink / raw) To: Eric Blake Cc: Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel, Stefan Hajnoczi [-- Attachment #1: Type: text/plain, Size: 1917 bytes --] Cc'ing Stefan who reviewed patch 2/2. On Tue, 7 Feb 2017 09:56:08 -0600 Eric Blake <eblake@redhat.com> wrote: > On 02/07/2017 04:32 AM, Greg Kurz wrote: > >> > >> I'm not aware of anything related to fsdev in QMP... and libvirt seems to > >> only parse the output of -help to guess fsdev capabilities. > > > > Oops, reading some more libvirt code I now see that libvirt doesn't parse > > -help anymore with QEMU >= 1.2.0... sorry for the noise :) > > > >> And indeed, > >> qemu-options.hx doesn't expose this new feature. > >> > >>> Please make sure we don't reach 2.9 with only a half-baked feature; > >>> whether that means finishing the QMP work or temporarily disabling the > >>> cli additions until a later release can finish the work. > >>> > >> > >> Would this be ok to add the missing bits in qemu-options.hx or do you > >> expect more ? > > If it cannot be probed via QMP, then libvirt will most likely assume > that it does not exist. I guess we're okay having command line only in > 2.9 if you can't get QMP working, because libvirt will just never drive > the feature until 2.10 when QMP is available; but then we risk the > command line subtly changing and breaking someone else that was using > the command line without QMP. Maybe the safest approach is to just use > the 'x-' prefix to the command line portion, until the feature is complete. > The semantics here are exactly the same as for block devices. The command line options added to -fsdev are the very same already used by -drive for years. Patch 2/2 in this series even factors them out to a common header file to be used by fsdev and blockdev. I really don't expect any modification at all on the command line (nor the other people who reviewed that patch obviously)... are you suggesting that we should put 2/2 on hold and use the 'x-' prefix anyway ? Cheers. -- Greg [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-07 16:29 ` Greg Kurz @ 2017-02-14 13:21 ` Stefan Hajnoczi 2017-02-22 13:41 ` Greg Kurz 0 siblings, 1 reply; 25+ messages in thread From: Stefan Hajnoczi @ 2017-02-14 13:21 UTC (permalink / raw) To: Greg Kurz Cc: Eric Blake, Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel [-- Attachment #1: Type: text/plain, Size: 2137 bytes --] On Tue, Feb 07, 2017 at 05:29:33PM +0100, Greg Kurz wrote: > Cc'ing Stefan who reviewed patch 2/2. > > On Tue, 7 Feb 2017 09:56:08 -0600 > Eric Blake <eblake@redhat.com> wrote: > > > On 02/07/2017 04:32 AM, Greg Kurz wrote: > > >> > > >> I'm not aware of anything related to fsdev in QMP... and libvirt seems to > > >> only parse the output of -help to guess fsdev capabilities. > > > > > > Oops, reading some more libvirt code I now see that libvirt doesn't parse > > > -help anymore with QEMU >= 1.2.0... sorry for the noise :) > > > > > >> And indeed, > > >> qemu-options.hx doesn't expose this new feature. > > >> > > >>> Please make sure we don't reach 2.9 with only a half-baked feature; > > >>> whether that means finishing the QMP work or temporarily disabling the > > >>> cli additions until a later release can finish the work. > > >>> > > >> > > >> Would this be ok to add the missing bits in qemu-options.hx or do you > > >> expect more ? > > > > If it cannot be probed via QMP, then libvirt will most likely assume > > that it does not exist. I guess we're okay having command line only in > > 2.9 if you can't get QMP working, because libvirt will just never drive > > the feature until 2.10 when QMP is available; but then we risk the > > command line subtly changing and breaking someone else that was using > > the command line without QMP. Maybe the safest approach is to just use > > the 'x-' prefix to the command line portion, until the feature is complete. > > > > The semantics here are exactly the same as for block devices. The > command line options added to -fsdev are the very same already used > by -drive for years. > > Patch 2/2 in this series even factors them out to a common header file > to be used by fsdev and blockdev. I really don't expect any modification > at all on the command line (nor the other people who reviewed that patch > obviously)... are you suggesting that we should put 2/2 on hold and > use the 'x-' prefix anyway ? I see these parameter names as stable. There is little risk that they would change. Stefan [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 455 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-14 13:21 ` Stefan Hajnoczi @ 2017-02-22 13:41 ` Greg Kurz 2017-02-22 16:01 ` Eric Blake 0 siblings, 1 reply; 25+ messages in thread From: Greg Kurz @ 2017-02-22 13:41 UTC (permalink / raw) To: Eric Blake Cc: Stefan Hajnoczi, Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel, Fam Zheng [-- Attachment #1: Type: text/plain, Size: 2593 bytes --] Eric, I fully understand your concern about the missing QMP bits, but given the other comments people made on this series, I'd like to move forward and merge it for 2.9, without the 'x-' prefixed options. Is it okay with you ? Cheers. -- Greg On Tue, 14 Feb 2017 13:21:22 +0000 Stefan Hajnoczi <stefanha@redhat.com> wrote: > On Tue, Feb 07, 2017 at 05:29:33PM +0100, Greg Kurz wrote: > > Cc'ing Stefan who reviewed patch 2/2. > > > > On Tue, 7 Feb 2017 09:56:08 -0600 > > Eric Blake <eblake@redhat.com> wrote: > > > > > On 02/07/2017 04:32 AM, Greg Kurz wrote: > > > >> > > > >> I'm not aware of anything related to fsdev in QMP... and libvirt seems to > > > >> only parse the output of -help to guess fsdev capabilities. > > > > > > > > Oops, reading some more libvirt code I now see that libvirt doesn't parse > > > > -help anymore with QEMU >= 1.2.0... sorry for the noise :) > > > > > > > >> And indeed, > > > >> qemu-options.hx doesn't expose this new feature. > > > >> > > > >>> Please make sure we don't reach 2.9 with only a half-baked feature; > > > >>> whether that means finishing the QMP work or temporarily disabling the > > > >>> cli additions until a later release can finish the work. > > > >>> > > > >> > > > >> Would this be ok to add the missing bits in qemu-options.hx or do you > > > >> expect more ? > > > > > > If it cannot be probed via QMP, then libvirt will most likely assume > > > that it does not exist. I guess we're okay having command line only in > > > 2.9 if you can't get QMP working, because libvirt will just never drive > > > the feature until 2.10 when QMP is available; but then we risk the > > > command line subtly changing and breaking someone else that was using > > > the command line without QMP. Maybe the safest approach is to just use > > > the 'x-' prefix to the command line portion, until the feature is complete. > > > > > > > The semantics here are exactly the same as for block devices. The > > command line options added to -fsdev are the very same already used > > by -drive for years. > > > > Patch 2/2 in this series even factors them out to a common header file > > to be used by fsdev and blockdev. I really don't expect any modification > > at all on the command line (nor the other people who reviewed that patch > > obviously)... are you suggesting that we should put 2/2 on hold and > > use the 'x-' prefix anyway ? > > I see these parameter names as stable. There is little risk that they > would change. > > Stefan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-22 13:41 ` Greg Kurz @ 2017-02-22 16:01 ` Eric Blake 2017-02-22 16:59 ` Greg Kurz 0 siblings, 1 reply; 25+ messages in thread From: Eric Blake @ 2017-02-22 16:01 UTC (permalink / raw) To: Greg Kurz Cc: Stefan Hajnoczi, Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel, Fam Zheng [-- Attachment #1: Type: text/plain, Size: 1952 bytes --] On 02/22/2017 07:41 AM, Greg Kurz wrote: > Eric, > > I fully understand your concern about the missing QMP bits, but given the other > comments people made on this series, I'd like to move forward and merge it for > 2.9, without the 'x-' prefixed options. Is it okay with you ? Yes, I think we'll be okay. Libvirt will just be unable to recognize the feature until the QMP bits are in place. >>>> If it cannot be probed via QMP, then libvirt will most likely assume >>>> that it does not exist. I guess we're okay having command line only in >>>> 2.9 if you can't get QMP working, because libvirt will just never drive >>>> the feature until 2.10 when QMP is available; but then we risk the >>>> command line subtly changing and breaking someone else that was using >>>> the command line without QMP. Maybe the safest approach is to just use >>>> the 'x-' prefix to the command line portion, until the feature is complete. >>>> >>> >>> The semantics here are exactly the same as for block devices. The >>> command line options added to -fsdev are the very same already used >>> by -drive for years. >>> >>> Patch 2/2 in this series even factors them out to a common header file >>> to be used by fsdev and blockdev. I really don't expect any modification >>> at all on the command line (nor the other people who reviewed that patch >>> obviously)... are you suggesting that we should put 2/2 on hold and >>> use the 'x-' prefix anyway ? >> >> I see these parameter names as stable. There is little risk that they >> would change. We just need to be sure that when we do add QMP, that it doesn't use names that differ from the command line (blockdev is an example where we weren't careful in 2.8, and had to rename things in 2.9 to be consistent, and I want to avoid repeating that mistake). -- 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] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-22 16:01 ` Eric Blake @ 2017-02-22 16:59 ` Greg Kurz 2017-02-22 17:04 ` Eric Blake 0 siblings, 1 reply; 25+ messages in thread From: Greg Kurz @ 2017-02-22 16:59 UTC (permalink / raw) To: Eric Blake Cc: Stefan Hajnoczi, Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel, Fam Zheng [-- Attachment #1: Type: text/plain, Size: 2149 bytes --] On Wed, 22 Feb 2017 10:01:09 -0600 Eric Blake <eblake@redhat.com> wrote: > On 02/22/2017 07:41 AM, Greg Kurz wrote: > > Eric, > > > > I fully understand your concern about the missing QMP bits, but given the other > > comments people made on this series, I'd like to move forward and merge it for > > 2.9, without the 'x-' prefixed options. Is it okay with you ? > > Yes, I think we'll be okay. Libvirt will just be unable to recognize the > feature until the QMP bits are in place. > Ok. I'll work this out with Pradeep for 2.10. > > >>>> If it cannot be probed via QMP, then libvirt will most likely assume > >>>> that it does not exist. I guess we're okay having command line only in > >>>> 2.9 if you can't get QMP working, because libvirt will just never drive > >>>> the feature until 2.10 when QMP is available; but then we risk the > >>>> command line subtly changing and breaking someone else that was using > >>>> the command line without QMP. Maybe the safest approach is to just use > >>>> the 'x-' prefix to the command line portion, until the feature is complete. > >>>> > >>> > >>> The semantics here are exactly the same as for block devices. The > >>> command line options added to -fsdev are the very same already used > >>> by -drive for years. > >>> > >>> Patch 2/2 in this series even factors them out to a common header file > >>> to be used by fsdev and blockdev. I really don't expect any modification > >>> at all on the command line (nor the other people who reviewed that patch > >>> obviously)... are you suggesting that we should put 2/2 on hold and > >>> use the 'x-' prefix anyway ? > >> > >> I see these parameter names as stable. There is little risk that they > >> would change. > > We just need to be sure that when we do add QMP, that it doesn't use > names that differ from the command line (blockdev is an example where we > weren't careful in 2.8, and had to rename things in 2.9 to be > consistent, and I want to avoid repeating that mistake). > Can you provide some pointers on what had to be fixed in blockdev ? Thanks. -- Greg [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-22 16:59 ` Greg Kurz @ 2017-02-22 17:04 ` Eric Blake 0 siblings, 0 replies; 25+ messages in thread From: Eric Blake @ 2017-02-22 17:04 UTC (permalink / raw) To: Greg Kurz Cc: Stefan Hajnoczi, Pradeep Jagadeesh, Aneesh Kumar K.V, Alberto Garcia, Pradeep Jagadeesh, qemu-devel, Fam Zheng [-- Attachment #1: Type: text/plain, Size: 730 bytes --] On 02/22/2017 10:59 AM, Greg Kurz wrote: >>>> I see these parameter names as stable. There is little risk that they >>>> would change. >> >> We just need to be sure that when we do add QMP, that it doesn't use >> names that differ from the command line (blockdev is an example where we >> weren't careful in 2.8, and had to rename things in 2.9 to be >> consistent, and I want to avoid repeating that mistake). >> > > Can you provide some pointers on what had to be fixed in blockdev ? See for example commits f67409a, 4230e5d, 1a417e4 showing several cases where we had to fix up inconsistencies. -- 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] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-06 19:36 ` Eric Blake 2017-02-06 23:15 ` Greg Kurz @ 2017-02-07 6:18 ` Fam Zheng 2017-02-07 10:34 ` Pradeep Jagadeesh 2 siblings, 0 replies; 25+ messages in thread From: Fam Zheng @ 2017-02-07 6:18 UTC (permalink / raw) To: Eric Blake Cc: Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz, Alberto Garcia, Pradeep Jagadeesh, qemu-devel On Mon, 02/06 13:36, Eric Blake wrote: > On 02/03/2017 05:57 AM, Pradeep Jagadeesh wrote: > > This patchset adds the throttle support for the 9p-local driver. > > For now this functionality can be enabled only through qemu cli options. > > QMP interface and support to other drivers need further extensions. > > This part is a bit scary - if 2.9 is released with just the cli option > and not the QMP interface, then how does someone like libvirt introspect > whether the feature is available for use? Not that I want to make an unconstructive point, but just for understanding this: if libvirt does introspect via QMP, is it technically okay to release CLI in 2.9 and QMP in 2.10? libvirt can just ignore the possible existence of CLI options if QMP is not there, no? Fam ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-06 19:36 ` Eric Blake 2017-02-06 23:15 ` Greg Kurz 2017-02-07 6:18 ` Fam Zheng @ 2017-02-07 10:34 ` Pradeep Jagadeesh 2 siblings, 0 replies; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-07 10:34 UTC (permalink / raw) To: Eric Blake, Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz Cc: Alberto Garcia, qemu-devel On 2/6/2017 8:36 PM, Eric Blake wrote: > On 02/03/2017 05:57 AM, Pradeep Jagadeesh wrote: >> This patchset adds the throttle support for the 9p-local driver. >> For now this functionality can be enabled only through qemu cli options. >> QMP interface and support to other drivers need further extensions. > > This part is a bit scary - if 2.9 is released with just the cli option > and not the QMP interface, then how does someone like libvirt introspect > whether the feature is available for use? I do have plans to extend the qmp interface for this feature. Already started looking into it.Do not know, I can push it for 2.9. Because I am busy with some other work. > > Please make sure we don't reach 2.9 with only a half-baked feature; > whether that means finishing the QMP work or temporarily disabling the > cli additions until a later release can finish the work. > ^ permalink raw reply [flat|nested] 25+ messages in thread
* [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 11:57 [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices Pradeep Jagadeesh 2017-02-03 11:57 ` [Qemu-devel] [PATCH 1/2 " Pradeep Jagadeesh @ 2017-02-03 11:57 ` Pradeep Jagadeesh 2017-02-03 12:22 ` Alberto Garcia 2017-02-06 14:58 ` Greg Kurz 2017-02-03 12:02 ` [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices no-reply 2 siblings, 2 replies; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-03 11:57 UTC (permalink / raw) To: Aneesh Kumar K.V, Greg Kurz; +Cc: Pradeep Jagadeesh, Alberto Garcia, qemu-devel This patch removes the redundant throttle code that was present in block and fsdev device files. Now the common code is moved to a single file. Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html --- blockdev.c | 81 ++---------------------------------- fsdev/qemu-fsdev-opts.c | 80 ++--------------------------------- include/qemu/throttle-options.h | 92 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 153 deletions(-) create mode 100644 include/qemu/throttle-options.h diff --git a/blockdev.c b/blockdev.c index 245e1e1..9320c8a 100644 --- a/blockdev.c +++ b/blockdev.c @@ -52,6 +52,7 @@ #include "sysemu/arch_init.h" #include "qemu/cutils.h" #include "qemu/help_option.h" +#include "qemu/throttle-options.h" static QTAILQ_HEAD(, BlockDriverState) monitor_bdrv_states = QTAILQ_HEAD_INITIALIZER(monitor_bdrv_states); @@ -3999,83 +4000,9 @@ QemuOptsList qemu_common_drive_opts = { .name = BDRV_OPT_READ_ONLY, .type = QEMU_OPT_BOOL, .help = "open drive file as read-only", - },{ - .name = "throttling.iops-total", - .type = QEMU_OPT_NUMBER, - .help = "limit total I/O operations per second", - },{ - .name = "throttling.iops-read", - .type = QEMU_OPT_NUMBER, - .help = "limit read operations per second", - },{ - .name = "throttling.iops-write", - .type = QEMU_OPT_NUMBER, - .help = "limit write operations per second", - },{ - .name = "throttling.bps-total", - .type = QEMU_OPT_NUMBER, - .help = "limit total bytes per second", - },{ - .name = "throttling.bps-read", - .type = QEMU_OPT_NUMBER, - .help = "limit read bytes per second", - },{ - .name = "throttling.bps-write", - .type = QEMU_OPT_NUMBER, - .help = "limit write bytes per second", - },{ - .name = "throttling.iops-total-max", - .type = QEMU_OPT_NUMBER, - .help = "I/O operations burst", - },{ - .name = "throttling.iops-read-max", - .type = QEMU_OPT_NUMBER, - .help = "I/O operations read burst", - },{ - .name = "throttling.iops-write-max", - .type = QEMU_OPT_NUMBER, - .help = "I/O operations write burst", - },{ - .name = "throttling.bps-total-max", - .type = QEMU_OPT_NUMBER, - .help = "total bytes burst", - },{ - .name = "throttling.bps-read-max", - .type = QEMU_OPT_NUMBER, - .help = "total bytes read burst", - },{ - .name = "throttling.bps-write-max", - .type = QEMU_OPT_NUMBER, - .help = "total bytes write burst", - },{ - .name = "throttling.iops-total-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the iops-total-max burst period, in seconds", - },{ - .name = "throttling.iops-read-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the iops-read-max burst period, in seconds", - },{ - .name = "throttling.iops-write-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the iops-write-max burst period, in seconds", - },{ - .name = "throttling.bps-total-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the bps-total-max burst period, in seconds", - },{ - .name = "throttling.bps-read-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the bps-read-max burst period, in seconds", - },{ - .name = "throttling.bps-write-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the bps-write-max burst period, in seconds", - },{ - .name = "throttling.iops-size", - .type = QEMU_OPT_NUMBER, - .help = "when limiting by iops max size of an I/O in bytes", - },{ + }, + THROTTLE_OPTS, + { .name = "throttling.group", .type = QEMU_OPT_STRING, .help = "name of the block throttling group", diff --git a/fsdev/qemu-fsdev-opts.c b/fsdev/qemu-fsdev-opts.c index 385423f0..bf57130 100644 --- a/fsdev/qemu-fsdev-opts.c +++ b/fsdev/qemu-fsdev-opts.c @@ -9,6 +9,7 @@ #include "qemu/config-file.h" #include "qemu/option.h" #include "qemu/module.h" +#include "qemu/throttle-options.h" static QemuOptsList qemu_fsdev_opts = { .name = "fsdev", @@ -37,83 +38,10 @@ static QemuOptsList qemu_fsdev_opts = { }, { .name = "sock_fd", .type = QEMU_OPT_NUMBER, - }, { - .name = "throttling.iops-total", - .type = QEMU_OPT_NUMBER, - .help = "limit total I/O operations per second", - }, { - .name = "throttling.iops-read", - .type = QEMU_OPT_NUMBER, - .help = "limit read operations per second", - }, { - .name = "throttling.iops-write", - .type = QEMU_OPT_NUMBER, - .help = "limit write operations per second", - }, { - .name = "throttling.bps-total", - .type = QEMU_OPT_NUMBER, - .help = "limit total bytes per second", - }, { - .name = "throttling.bps-read", - .type = QEMU_OPT_NUMBER, - .help = "limit read bytes per second", - }, { - .name = "throttling.bps-write", - .type = QEMU_OPT_NUMBER, - .help = "limit write bytes per second", - }, { - .name = "throttling.iops-total-max", - .type = QEMU_OPT_NUMBER, - .help = "I/O operations burst", - }, { - .name = "throttling.iops-read-max", - .type = QEMU_OPT_NUMBER, - .help = "I/O operations read burst", - }, { - .name = "throttling.iops-write-max", - .type = QEMU_OPT_NUMBER, - .help = "I/O operations write burst", - }, { - .name = "throttling.bps-total-max", - .type = QEMU_OPT_NUMBER, - .help = "total bytes burst", - }, { - .name = "throttling.bps-read-max", - .type = QEMU_OPT_NUMBER, - .help = "total bytes read burst", - }, { - .name = "throttling.bps-write-max", - .type = QEMU_OPT_NUMBER, - .help = "total bytes write burst", - }, { - .name = "throttling.iops-total-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the iops-total-max burst period, in seconds", - }, { - .name = "throttling.iops-read-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the iops-read-max burst period, in seconds", - }, { - .name = "throttling.iops-write-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the iops-write-max burst period, in seconds", - }, { - .name = "throttling.bps-total-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the bps-total-max burst period, in seconds", - }, { - .name = "throttling.bps-read-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the bps-read-max burst period, in seconds", - }, { - .name = "throttling.bps-write-max-length", - .type = QEMU_OPT_NUMBER, - .help = "length of the bps-write-max burst period, in seconds", - }, { - .name = "throttling.iops-size", - .type = QEMU_OPT_NUMBER, - .help = "when limiting by iops max size of an I/O in bytes", }, + + THROTTLE_OPTS, + { /*End of list */ } }, }; diff --git a/include/qemu/throttle-options.h b/include/qemu/throttle-options.h new file mode 100644 index 0000000..3133d1c --- /dev/null +++ b/include/qemu/throttle-options.h @@ -0,0 +1,92 @@ +/* + * QEMU throttling command line options + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * (at your option) any later version. + * + * See the COPYING file in the top-level directory for details. + * + */ +#ifndef THROTTLE_OPTIONS_H +#define THROTTLE_OPTIONS_H + +#define THROTTLE_OPTS \ + { \ + .name = "throttling.iops-total",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit total I/O operations per second",\ + },{ \ + .name = "throttling.iops-read",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit read operations per second",\ + },{ \ + .name = "throttling.iops-write",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit write operations per second",\ + },{ \ + .name = "throttling.bps-total",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit total bytes per second",\ + },{ \ + .name = "throttling.bps-read",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit read bytes per second",\ + },{ \ + .name = "throttling.bps-write",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit write bytes per second",\ + },{ \ + .name = "throttling.iops-total-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "I/O operations burst",\ + },{ \ + .name = "throttling.iops-read-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "I/O operations read burst",\ + },{ \ + .name = "throttling.iops-write-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "I/O operations write burst",\ + },{ \ + .name = "throttling.bps-total-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "total bytes burst",\ + },{ \ + .name = "throttling.bps-read-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "total bytes read burst",\ + },{ \ + .name = "throttling.bps-write-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "total bytes write burst",\ + },{ \ + .name = "throttling.iops-total-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the iops-total-max burst period, in seconds",\ + },{ \ + .name = "throttling.iops-read-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the iops-read-max burst period, in seconds",\ + },{ \ + .name = "throttling.iops-write-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the iops-write-max burst period, in seconds",\ + },{ \ + .name = "throttling.bps-total-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the bps-total-max burst period, in seconds",\ + },{ \ + .name = "throttling.bps-read-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the bps-read-max burst period, in seconds",\ + },{ \ + .name = "throttling.bps-write-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the bps-write-max burst period, in seconds",\ + },{ \ + .name = "throttling.iops-size",\ + .type = QEMU_OPT_NUMBER,\ + .help = "when limiting by iops max size of an I/O in bytes",\ + } + +#endif -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 11:57 ` [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code Pradeep Jagadeesh @ 2017-02-03 12:22 ` Alberto Garcia 2017-02-03 12:27 ` Pradeep Jagadeesh 2017-02-06 14:58 ` Greg Kurz 1 sibling, 1 reply; 25+ messages in thread From: Alberto Garcia @ 2017-02-03 12:22 UTC (permalink / raw) To: Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz Cc: Pradeep Jagadeesh, qemu-devel On Fri 03 Feb 2017 12:57:23 PM CET, Pradeep Jagadeesh wrote: > This patch removes the redundant throttle code that was present in > block and fsdev device files. Now the common code is moved > to a single file. > > Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> Reviewed-by: Alberto Garcia <berto@igalia.com> > https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html This line doesn't belong in the commit message. Berto ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 12:22 ` Alberto Garcia @ 2017-02-03 12:27 ` Pradeep Jagadeesh 2017-02-03 12:44 ` Alberto Garcia 0 siblings, 1 reply; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-03 12:27 UTC (permalink / raw) To: Alberto Garcia, Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz; +Cc: qemu-devel On 2/3/2017 1:22 PM, Alberto Garcia wrote: > On Fri 03 Feb 2017 12:57:23 PM CET, Pradeep Jagadeesh wrote: >> This patch removes the redundant throttle code that was present in >> block and fsdev device files. Now the common code is moved >> to a single file. >> >> Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> > > Reviewed-by: Alberto Garcia <berto@igalia.com> > >> https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html > > This line doesn't belong in the commit message. > There is one false positive error in the second patch. So Greg asked me to put this line after SoB. Just to say that I had a positive review comment. Regards. Pradeep > Berto > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 12:27 ` Pradeep Jagadeesh @ 2017-02-03 12:44 ` Alberto Garcia 2017-02-03 12:46 ` Pradeep Jagadeesh 0 siblings, 1 reply; 25+ messages in thread From: Alberto Garcia @ 2017-02-03 12:44 UTC (permalink / raw) To: Pradeep Jagadeesh, Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz Cc: qemu-devel On Fri 03 Feb 2017 01:27:25 PM CET, Pradeep Jagadeesh wrote: >>> Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> >> >> Reviewed-by: Alberto Garcia <berto@igalia.com> >> >>> https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html >> >> This line doesn't belong in the commit message. > > There is one false positive error in the second patch. So Greg asked > me to put this line after SoB. Just to say that I had a positive > review comment. The false positive is not related to what Greg said :-) What you have to put is not that URL but the Reviewed-by: line with Stefan's name and e-mail. Berto ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 12:44 ` Alberto Garcia @ 2017-02-03 12:46 ` Pradeep Jagadeesh 2017-02-03 12:53 ` Alberto Garcia 0 siblings, 1 reply; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-03 12:46 UTC (permalink / raw) To: Alberto Garcia, Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz; +Cc: qemu-devel On 2/3/2017 1:44 PM, Alberto Garcia wrote: > On Fri 03 Feb 2017 01:27:25 PM CET, Pradeep Jagadeesh wrote: > >>>> Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> >>> >>> Reviewed-by: Alberto Garcia <berto@igalia.com> >>> >>>> https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html >>> >>> This line doesn't belong in the commit message. >> >> There is one false positive error in the second patch. So Greg asked >> me to put this line after SoB. Just to say that I had a positive >> review comment. > > The false positive is not related to what Greg said :-) What you have to > put is not that URL but the Reviewed-by: line with Stefan's name and > e-mail. Haha OK. I will change it and send new patch set again. -Pradeep > > Berto > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 12:46 ` Pradeep Jagadeesh @ 2017-02-03 12:53 ` Alberto Garcia 2017-02-03 12:57 ` Pradeep Jagadeesh 0 siblings, 1 reply; 25+ messages in thread From: Alberto Garcia @ 2017-02-03 12:53 UTC (permalink / raw) To: Pradeep Jagadeesh, Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz Cc: qemu-devel On Fri 03 Feb 2017 01:46:31 PM CET, Pradeep Jagadeesh wrote: >> The false positive is not related to what Greg said :-) What you have >> to put is not that URL but the Reviewed-by: line with Stefan's name >> and e-mail. > > Haha OK. I will change it and send new patch set again. I don't know if it's necessary now, but if you need to send the patch again you have to keep your Signed-off-by line and my and Stefan's Reviewed-by lines. Berto ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 12:53 ` Alberto Garcia @ 2017-02-03 12:57 ` Pradeep Jagadeesh 0 siblings, 0 replies; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-03 12:57 UTC (permalink / raw) To: Alberto Garcia, Pradeep Jagadeesh, Aneesh Kumar K.V, Greg Kurz; +Cc: qemu-devel On 2/3/2017 1:53 PM, Alberto Garcia wrote: > On Fri 03 Feb 2017 01:46:31 PM CET, Pradeep Jagadeesh wrote: >>> The false positive is not related to what Greg said :-) What you have >>> to put is not that URL but the Reviewed-by: line with Stefan's name >>> and e-mail. >> >> Haha OK. I will change it and send new patch set again. > > I don't know if it's necessary now, but if you need to send the patch > again you have to keep your Signed-off-by line and my and Stefan's > Reviewed-by lines. OK sure!. If it is required, then I will add Reviewed by Line. Regards, Pradeep > > Berto > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-03 11:57 ` [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code Pradeep Jagadeesh 2017-02-03 12:22 ` Alberto Garcia @ 2017-02-06 14:58 ` Greg Kurz 2017-02-06 15:19 ` Pradeep Jagadeesh 1 sibling, 1 reply; 25+ messages in thread From: Greg Kurz @ 2017-02-06 14:58 UTC (permalink / raw) To: Pradeep Jagadeesh Cc: Aneesh Kumar K.V, Pradeep Jagadeesh, Alberto Garcia, qemu-devel On Fri, 3 Feb 2017 06:57:23 -0500 Pradeep Jagadeesh <pradeepkiruvale@gmail.com> wrote: > This patch removes the redundant throttle code that was present in > block and fsdev device files. Now the common code is moved > to a single file. > > Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> > > https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html > --- > blockdev.c | 81 ++---------------------------------- > fsdev/qemu-fsdev-opts.c | 80 ++--------------------------------- > include/qemu/throttle-options.h | 92 +++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 100 insertions(+), 153 deletions(-) > create mode 100644 include/qemu/throttle-options.h > > diff --git a/blockdev.c b/blockdev.c > index 245e1e1..9320c8a 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -52,6 +52,7 @@ > #include "sysemu/arch_init.h" > #include "qemu/cutils.h" > #include "qemu/help_option.h" > +#include "qemu/throttle-options.h" > > static QTAILQ_HEAD(, BlockDriverState) monitor_bdrv_states = > QTAILQ_HEAD_INITIALIZER(monitor_bdrv_states); > @@ -3999,83 +4000,9 @@ QemuOptsList qemu_common_drive_opts = { > .name = BDRV_OPT_READ_ONLY, > .type = QEMU_OPT_BOOL, > .help = "open drive file as read-only", > - },{ > - .name = "throttling.iops-total", > - .type = QEMU_OPT_NUMBER, > - .help = "limit total I/O operations per second", > - },{ > - .name = "throttling.iops-read", > - .type = QEMU_OPT_NUMBER, > - .help = "limit read operations per second", > - },{ > - .name = "throttling.iops-write", > - .type = QEMU_OPT_NUMBER, > - .help = "limit write operations per second", > - },{ > - .name = "throttling.bps-total", > - .type = QEMU_OPT_NUMBER, > - .help = "limit total bytes per second", > - },{ > - .name = "throttling.bps-read", > - .type = QEMU_OPT_NUMBER, > - .help = "limit read bytes per second", > - },{ > - .name = "throttling.bps-write", > - .type = QEMU_OPT_NUMBER, > - .help = "limit write bytes per second", > - },{ > - .name = "throttling.iops-total-max", > - .type = QEMU_OPT_NUMBER, > - .help = "I/O operations burst", > - },{ > - .name = "throttling.iops-read-max", > - .type = QEMU_OPT_NUMBER, > - .help = "I/O operations read burst", > - },{ > - .name = "throttling.iops-write-max", > - .type = QEMU_OPT_NUMBER, > - .help = "I/O operations write burst", > - },{ > - .name = "throttling.bps-total-max", > - .type = QEMU_OPT_NUMBER, > - .help = "total bytes burst", > - },{ > - .name = "throttling.bps-read-max", > - .type = QEMU_OPT_NUMBER, > - .help = "total bytes read burst", > - },{ > - .name = "throttling.bps-write-max", > - .type = QEMU_OPT_NUMBER, > - .help = "total bytes write burst", > - },{ > - .name = "throttling.iops-total-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the iops-total-max burst period, in seconds", > - },{ > - .name = "throttling.iops-read-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the iops-read-max burst period, in seconds", > - },{ > - .name = "throttling.iops-write-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the iops-write-max burst period, in seconds", > - },{ > - .name = "throttling.bps-total-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the bps-total-max burst period, in seconds", > - },{ > - .name = "throttling.bps-read-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the bps-read-max burst period, in seconds", > - },{ > - .name = "throttling.bps-write-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the bps-write-max burst period, in seconds", > - },{ > - .name = "throttling.iops-size", > - .type = QEMU_OPT_NUMBER, > - .help = "when limiting by iops max size of an I/O in bytes", > - },{ > + }, > + THROTTLE_OPTS, > + { Indent nit ^^. Also this could be surrounded by some empty lines as you did in fsdev/qemu-fsdev-opts.c below. I wouldn't ask you to send a v17 for this though and I've updated your patch instead. I've also added Stefan's and Berto's Reviewed-by, and pushed the whole series to my 9p-next tree at: https://github.com/gkurz/qemu/commits/9p-next Cheers. -- Greg > .name = "throttling.group", > .type = QEMU_OPT_STRING, > .help = "name of the block throttling group", > diff --git a/fsdev/qemu-fsdev-opts.c b/fsdev/qemu-fsdev-opts.c > index 385423f0..bf57130 100644 > --- a/fsdev/qemu-fsdev-opts.c > +++ b/fsdev/qemu-fsdev-opts.c > @@ -9,6 +9,7 @@ > #include "qemu/config-file.h" > #include "qemu/option.h" > #include "qemu/module.h" > +#include "qemu/throttle-options.h" > > static QemuOptsList qemu_fsdev_opts = { > .name = "fsdev", > @@ -37,83 +38,10 @@ static QemuOptsList qemu_fsdev_opts = { > }, { > .name = "sock_fd", > .type = QEMU_OPT_NUMBER, > - }, { > - .name = "throttling.iops-total", > - .type = QEMU_OPT_NUMBER, > - .help = "limit total I/O operations per second", > - }, { > - .name = "throttling.iops-read", > - .type = QEMU_OPT_NUMBER, > - .help = "limit read operations per second", > - }, { > - .name = "throttling.iops-write", > - .type = QEMU_OPT_NUMBER, > - .help = "limit write operations per second", > - }, { > - .name = "throttling.bps-total", > - .type = QEMU_OPT_NUMBER, > - .help = "limit total bytes per second", > - }, { > - .name = "throttling.bps-read", > - .type = QEMU_OPT_NUMBER, > - .help = "limit read bytes per second", > - }, { > - .name = "throttling.bps-write", > - .type = QEMU_OPT_NUMBER, > - .help = "limit write bytes per second", > - }, { > - .name = "throttling.iops-total-max", > - .type = QEMU_OPT_NUMBER, > - .help = "I/O operations burst", > - }, { > - .name = "throttling.iops-read-max", > - .type = QEMU_OPT_NUMBER, > - .help = "I/O operations read burst", > - }, { > - .name = "throttling.iops-write-max", > - .type = QEMU_OPT_NUMBER, > - .help = "I/O operations write burst", > - }, { > - .name = "throttling.bps-total-max", > - .type = QEMU_OPT_NUMBER, > - .help = "total bytes burst", > - }, { > - .name = "throttling.bps-read-max", > - .type = QEMU_OPT_NUMBER, > - .help = "total bytes read burst", > - }, { > - .name = "throttling.bps-write-max", > - .type = QEMU_OPT_NUMBER, > - .help = "total bytes write burst", > - }, { > - .name = "throttling.iops-total-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the iops-total-max burst period, in seconds", > - }, { > - .name = "throttling.iops-read-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the iops-read-max burst period, in seconds", > - }, { > - .name = "throttling.iops-write-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the iops-write-max burst period, in seconds", > - }, { > - .name = "throttling.bps-total-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the bps-total-max burst period, in seconds", > - }, { > - .name = "throttling.bps-read-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the bps-read-max burst period, in seconds", > - }, { > - .name = "throttling.bps-write-max-length", > - .type = QEMU_OPT_NUMBER, > - .help = "length of the bps-write-max burst period, in seconds", > - }, { > - .name = "throttling.iops-size", > - .type = QEMU_OPT_NUMBER, > - .help = "when limiting by iops max size of an I/O in bytes", > }, > + > + THROTTLE_OPTS, > + > { /*End of list */ } > }, > }; > diff --git a/include/qemu/throttle-options.h b/include/qemu/throttle-options.h > new file mode 100644 > index 0000000..3133d1c > --- /dev/null > +++ b/include/qemu/throttle-options.h > @@ -0,0 +1,92 @@ > +/* > + * QEMU throttling command line options > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or > + * (at your option) any later version. > + * > + * See the COPYING file in the top-level directory for details. > + * > + */ > +#ifndef THROTTLE_OPTIONS_H > +#define THROTTLE_OPTIONS_H > + > +#define THROTTLE_OPTS \ > + { \ > + .name = "throttling.iops-total",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "limit total I/O operations per second",\ > + },{ \ > + .name = "throttling.iops-read",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "limit read operations per second",\ > + },{ \ > + .name = "throttling.iops-write",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "limit write operations per second",\ > + },{ \ > + .name = "throttling.bps-total",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "limit total bytes per second",\ > + },{ \ > + .name = "throttling.bps-read",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "limit read bytes per second",\ > + },{ \ > + .name = "throttling.bps-write",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "limit write bytes per second",\ > + },{ \ > + .name = "throttling.iops-total-max",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "I/O operations burst",\ > + },{ \ > + .name = "throttling.iops-read-max",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "I/O operations read burst",\ > + },{ \ > + .name = "throttling.iops-write-max",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "I/O operations write burst",\ > + },{ \ > + .name = "throttling.bps-total-max",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "total bytes burst",\ > + },{ \ > + .name = "throttling.bps-read-max",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "total bytes read burst",\ > + },{ \ > + .name = "throttling.bps-write-max",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "total bytes write burst",\ > + },{ \ > + .name = "throttling.iops-total-max-length",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "length of the iops-total-max burst period, in seconds",\ > + },{ \ > + .name = "throttling.iops-read-max-length",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "length of the iops-read-max burst period, in seconds",\ > + },{ \ > + .name = "throttling.iops-write-max-length",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "length of the iops-write-max burst period, in seconds",\ > + },{ \ > + .name = "throttling.bps-total-max-length",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "length of the bps-total-max burst period, in seconds",\ > + },{ \ > + .name = "throttling.bps-read-max-length",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "length of the bps-read-max burst period, in seconds",\ > + },{ \ > + .name = "throttling.bps-write-max-length",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "length of the bps-write-max burst period, in seconds",\ > + },{ \ > + .name = "throttling.iops-size",\ > + .type = QEMU_OPT_NUMBER,\ > + .help = "when limiting by iops max size of an I/O in bytes",\ > + } > + > +#endif ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code 2017-02-06 14:58 ` Greg Kurz @ 2017-02-06 15:19 ` Pradeep Jagadeesh 0 siblings, 0 replies; 25+ messages in thread From: Pradeep Jagadeesh @ 2017-02-06 15:19 UTC (permalink / raw) To: Greg Kurz, Pradeep Jagadeesh; +Cc: Aneesh Kumar K.V, Alberto Garcia, qemu-devel On 2/6/2017 3:58 PM, Greg Kurz wrote: > On Fri, 3 Feb 2017 06:57:23 -0500 > Pradeep Jagadeesh <pradeepkiruvale@gmail.com> wrote: > >> This patch removes the redundant throttle code that was present in >> block and fsdev device files. Now the common code is moved >> to a single file. >> >> Signed-off-by: Pradeep Jagadeesh <pradeep.jagadeesh@huawei.com> >> >> https://lists.gnu.org/archive/html/qemu-devel/2017-01/msg04637.html >> --- >> blockdev.c | 81 ++---------------------------------- >> fsdev/qemu-fsdev-opts.c | 80 ++--------------------------------- >> include/qemu/throttle-options.h | 92 +++++++++++++++++++++++++++++++++++++++++ >> 3 files changed, 100 insertions(+), 153 deletions(-) >> create mode 100644 include/qemu/throttle-options.h >> >> diff --git a/blockdev.c b/blockdev.c >> index 245e1e1..9320c8a 100644 >> --- a/blockdev.c >> +++ b/blockdev.c >> @@ -52,6 +52,7 @@ >> #include "sysemu/arch_init.h" >> #include "qemu/cutils.h" >> #include "qemu/help_option.h" >> +#include "qemu/throttle-options.h" >> >> static QTAILQ_HEAD(, BlockDriverState) monitor_bdrv_states = >> QTAILQ_HEAD_INITIALIZER(monitor_bdrv_states); >> @@ -3999,83 +4000,9 @@ QemuOptsList qemu_common_drive_opts = { >> .name = BDRV_OPT_READ_ONLY, >> .type = QEMU_OPT_BOOL, >> .help = "open drive file as read-only", >> - },{ >> - .name = "throttling.iops-total", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit total I/O operations per second", >> - },{ >> - .name = "throttling.iops-read", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit read operations per second", >> - },{ >> - .name = "throttling.iops-write", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit write operations per second", >> - },{ >> - .name = "throttling.bps-total", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit total bytes per second", >> - },{ >> - .name = "throttling.bps-read", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit read bytes per second", >> - },{ >> - .name = "throttling.bps-write", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit write bytes per second", >> - },{ >> - .name = "throttling.iops-total-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "I/O operations burst", >> - },{ >> - .name = "throttling.iops-read-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "I/O operations read burst", >> - },{ >> - .name = "throttling.iops-write-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "I/O operations write burst", >> - },{ >> - .name = "throttling.bps-total-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "total bytes burst", >> - },{ >> - .name = "throttling.bps-read-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "total bytes read burst", >> - },{ >> - .name = "throttling.bps-write-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "total bytes write burst", >> - },{ >> - .name = "throttling.iops-total-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the iops-total-max burst period, in seconds", >> - },{ >> - .name = "throttling.iops-read-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the iops-read-max burst period, in seconds", >> - },{ >> - .name = "throttling.iops-write-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the iops-write-max burst period, in seconds", >> - },{ >> - .name = "throttling.bps-total-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the bps-total-max burst period, in seconds", >> - },{ >> - .name = "throttling.bps-read-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the bps-read-max burst period, in seconds", >> - },{ >> - .name = "throttling.bps-write-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the bps-write-max burst period, in seconds", >> - },{ >> - .name = "throttling.iops-size", >> - .type = QEMU_OPT_NUMBER, >> - .help = "when limiting by iops max size of an I/O in bytes", >> - },{ >> + }, >> + THROTTLE_OPTS, >> + { > > Indent nit ^^. Also this could be surrounded by some empty lines as you > did in fsdev/qemu-fsdev-opts.c below. > > I wouldn't ask you to send a v17 for this though and I've updated your > patch instead. I've also added Stefan's and Berto's Reviewed-by, and > pushed the whole series to my 9p-next tree at: > > https://github.com/gkurz/qemu/commits/9p-next Thanks Greg for updating the patch!. -Pradeep > > Cheers. > > -- > Greg > >> .name = "throttling.group", >> .type = QEMU_OPT_STRING, >> .help = "name of the block throttling group", >> diff --git a/fsdev/qemu-fsdev-opts.c b/fsdev/qemu-fsdev-opts.c >> index 385423f0..bf57130 100644 >> --- a/fsdev/qemu-fsdev-opts.c >> +++ b/fsdev/qemu-fsdev-opts.c >> @@ -9,6 +9,7 @@ >> #include "qemu/config-file.h" >> #include "qemu/option.h" >> #include "qemu/module.h" >> +#include "qemu/throttle-options.h" >> >> static QemuOptsList qemu_fsdev_opts = { >> .name = "fsdev", >> @@ -37,83 +38,10 @@ static QemuOptsList qemu_fsdev_opts = { >> }, { >> .name = "sock_fd", >> .type = QEMU_OPT_NUMBER, >> - }, { >> - .name = "throttling.iops-total", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit total I/O operations per second", >> - }, { >> - .name = "throttling.iops-read", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit read operations per second", >> - }, { >> - .name = "throttling.iops-write", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit write operations per second", >> - }, { >> - .name = "throttling.bps-total", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit total bytes per second", >> - }, { >> - .name = "throttling.bps-read", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit read bytes per second", >> - }, { >> - .name = "throttling.bps-write", >> - .type = QEMU_OPT_NUMBER, >> - .help = "limit write bytes per second", >> - }, { >> - .name = "throttling.iops-total-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "I/O operations burst", >> - }, { >> - .name = "throttling.iops-read-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "I/O operations read burst", >> - }, { >> - .name = "throttling.iops-write-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "I/O operations write burst", >> - }, { >> - .name = "throttling.bps-total-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "total bytes burst", >> - }, { >> - .name = "throttling.bps-read-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "total bytes read burst", >> - }, { >> - .name = "throttling.bps-write-max", >> - .type = QEMU_OPT_NUMBER, >> - .help = "total bytes write burst", >> - }, { >> - .name = "throttling.iops-total-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the iops-total-max burst period, in seconds", >> - }, { >> - .name = "throttling.iops-read-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the iops-read-max burst period, in seconds", >> - }, { >> - .name = "throttling.iops-write-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the iops-write-max burst period, in seconds", >> - }, { >> - .name = "throttling.bps-total-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the bps-total-max burst period, in seconds", >> - }, { >> - .name = "throttling.bps-read-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the bps-read-max burst period, in seconds", >> - }, { >> - .name = "throttling.bps-write-max-length", >> - .type = QEMU_OPT_NUMBER, >> - .help = "length of the bps-write-max burst period, in seconds", >> - }, { >> - .name = "throttling.iops-size", >> - .type = QEMU_OPT_NUMBER, >> - .help = "when limiting by iops max size of an I/O in bytes", >> }, >> + >> + THROTTLE_OPTS, >> + >> { /*End of list */ } >> }, >> }; >> diff --git a/include/qemu/throttle-options.h b/include/qemu/throttle-options.h >> new file mode 100644 >> index 0000000..3133d1c >> --- /dev/null >> +++ b/include/qemu/throttle-options.h >> @@ -0,0 +1,92 @@ >> +/* >> + * QEMU throttling command line options >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2 or >> + * (at your option) any later version. >> + * >> + * See the COPYING file in the top-level directory for details. >> + * >> + */ >> +#ifndef THROTTLE_OPTIONS_H >> +#define THROTTLE_OPTIONS_H >> + >> +#define THROTTLE_OPTS \ >> + { \ >> + .name = "throttling.iops-total",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "limit total I/O operations per second",\ >> + },{ \ >> + .name = "throttling.iops-read",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "limit read operations per second",\ >> + },{ \ >> + .name = "throttling.iops-write",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "limit write operations per second",\ >> + },{ \ >> + .name = "throttling.bps-total",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "limit total bytes per second",\ >> + },{ \ >> + .name = "throttling.bps-read",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "limit read bytes per second",\ >> + },{ \ >> + .name = "throttling.bps-write",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "limit write bytes per second",\ >> + },{ \ >> + .name = "throttling.iops-total-max",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "I/O operations burst",\ >> + },{ \ >> + .name = "throttling.iops-read-max",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "I/O operations read burst",\ >> + },{ \ >> + .name = "throttling.iops-write-max",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "I/O operations write burst",\ >> + },{ \ >> + .name = "throttling.bps-total-max",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "total bytes burst",\ >> + },{ \ >> + .name = "throttling.bps-read-max",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "total bytes read burst",\ >> + },{ \ >> + .name = "throttling.bps-write-max",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "total bytes write burst",\ >> + },{ \ >> + .name = "throttling.iops-total-max-length",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "length of the iops-total-max burst period, in seconds",\ >> + },{ \ >> + .name = "throttling.iops-read-max-length",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "length of the iops-read-max burst period, in seconds",\ >> + },{ \ >> + .name = "throttling.iops-write-max-length",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "length of the iops-write-max burst period, in seconds",\ >> + },{ \ >> + .name = "throttling.bps-total-max-length",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "length of the bps-total-max burst period, in seconds",\ >> + },{ \ >> + .name = "throttling.bps-read-max-length",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "length of the bps-read-max burst period, in seconds",\ >> + },{ \ >> + .name = "throttling.bps-write-max-length",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "length of the bps-write-max burst period, in seconds",\ >> + },{ \ >> + .name = "throttling.iops-size",\ >> + .type = QEMU_OPT_NUMBER,\ >> + .help = "when limiting by iops max size of an I/O in bytes",\ >> + } >> + >> +#endif > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices 2017-02-03 11:57 [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices Pradeep Jagadeesh 2017-02-03 11:57 ` [Qemu-devel] [PATCH 1/2 " Pradeep Jagadeesh 2017-02-03 11:57 ` [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code Pradeep Jagadeesh @ 2017-02-03 12:02 ` no-reply 2 siblings, 0 replies; 25+ messages in thread From: no-reply @ 2017-02-03 12:02 UTC (permalink / raw) To: pradeepkiruvale Cc: famz, aneesh.kumar, groug, berto, pradeep.jagadeesh, qemu-devel Hi, Your series seems to have some coding style problems. See output below for more information: Type: series Subject: [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices Message-id: 1486123043-26493-1-git-send-email-pradeep.jagadeesh@huawei.com === TEST SCRIPT BEGIN === #!/bin/bash BASE=base n=1 total=$(git log --oneline $BASE.. | wc -l) failed=0 # Useful git options git config --local diff.renamelimit 0 git config --local diff.renames True commits="$(git log --format=%H --reverse $BASE..)" for c in $commits; do echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..." if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then failed=1 echo fi n=$((n+1)) done exit $failed === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu - [tag update] patchew/1486120416-11566-1-git-send-email-amit.shah@redhat.com -> patchew/1486120416-11566-1-git-send-email-amit.shah@redhat.com - [tag update] patchew/1486120433-11628-1-git-send-email-amit.shah@redhat.com -> patchew/1486120433-11628-1-git-send-email-amit.shah@redhat.com * [new tag] patchew/1486123043-26493-1-git-send-email-pradeep.jagadeesh@huawei.com -> patchew/1486123043-26493-1-git-send-email-pradeep.jagadeesh@huawei.com - [tag update] patchew/20170201150553.9381-1-alex.bennee@linaro.org -> patchew/20170201150553.9381-1-alex.bennee@linaro.org Switched to a new branch 'test' ea942ba throttle: factor out duplicate code b4896f1 fsdev: add IO throttle support to fsdev devices === OUTPUT BEGIN === Checking PATCH 1/2: fsdev: add IO throttle support to fsdev devices... Checking PATCH 2/2: throttle: factor out duplicate code... ERROR: Macros with multiple statements should be enclosed in a do - while loop #231: FILE: include/qemu/throttle-options.h:13: +#define THROTTLE_OPTS \ + { \ + .name = "throttling.iops-total",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit total I/O operations per second",\ + },{ \ + .name = "throttling.iops-read",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit read operations per second",\ + },{ \ + .name = "throttling.iops-write",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit write operations per second",\ + },{ \ + .name = "throttling.bps-total",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit total bytes per second",\ + },{ \ + .name = "throttling.bps-read",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit read bytes per second",\ + },{ \ + .name = "throttling.bps-write",\ + .type = QEMU_OPT_NUMBER,\ + .help = "limit write bytes per second",\ + },{ \ + .name = "throttling.iops-total-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "I/O operations burst",\ + },{ \ + .name = "throttling.iops-read-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "I/O operations read burst",\ + },{ \ + .name = "throttling.iops-write-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "I/O operations write burst",\ + },{ \ + .name = "throttling.bps-total-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "total bytes burst",\ + },{ \ + .name = "throttling.bps-read-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "total bytes read burst",\ + },{ \ + .name = "throttling.bps-write-max",\ + .type = QEMU_OPT_NUMBER,\ + .help = "total bytes write burst",\ + },{ \ + .name = "throttling.iops-total-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the iops-total-max burst period, in seconds",\ + },{ \ + .name = "throttling.iops-read-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the iops-read-max burst period, in seconds",\ + },{ \ + .name = "throttling.iops-write-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the iops-write-max burst period, in seconds",\ + },{ \ + .name = "throttling.bps-total-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the bps-total-max burst period, in seconds",\ + },{ \ + .name = "throttling.bps-read-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the bps-read-max burst period, in seconds",\ + },{ \ + .name = "throttling.bps-write-max-length",\ + .type = QEMU_OPT_NUMBER,\ + .help = "length of the bps-write-max burst period, in seconds",\ + },{ \ + .name = "throttling.iops-size",\ + .type = QEMU_OPT_NUMBER,\ + .help = "when limiting by iops max size of an I/O in bytes",\ + } total: 1 errors, 0 warnings, 278 lines checked Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. === OUTPUT END === Test command exited with code: 1 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-devel@freelists.org ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2017-02-22 17:04 UTC | newest] Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-02-03 11:57 [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices Pradeep Jagadeesh 2017-02-03 11:57 ` [Qemu-devel] [PATCH 1/2 " Pradeep Jagadeesh 2017-02-03 12:21 ` Alberto Garcia 2017-02-06 19:36 ` Eric Blake 2017-02-06 23:15 ` Greg Kurz 2017-02-07 10:32 ` Greg Kurz 2017-02-07 15:56 ` Eric Blake 2017-02-07 16:29 ` Greg Kurz 2017-02-14 13:21 ` Stefan Hajnoczi 2017-02-22 13:41 ` Greg Kurz 2017-02-22 16:01 ` Eric Blake 2017-02-22 16:59 ` Greg Kurz 2017-02-22 17:04 ` Eric Blake 2017-02-07 6:18 ` Fam Zheng 2017-02-07 10:34 ` Pradeep Jagadeesh 2017-02-03 11:57 ` [Qemu-devel] [PATCH 2/2 v16] throttle: factor out duplicate code Pradeep Jagadeesh 2017-02-03 12:22 ` Alberto Garcia 2017-02-03 12:27 ` Pradeep Jagadeesh 2017-02-03 12:44 ` Alberto Garcia 2017-02-03 12:46 ` Pradeep Jagadeesh 2017-02-03 12:53 ` Alberto Garcia 2017-02-03 12:57 ` Pradeep Jagadeesh 2017-02-06 14:58 ` Greg Kurz 2017-02-06 15:19 ` Pradeep Jagadeesh 2017-02-03 12:02 ` [Qemu-devel] [PATCH 0/2 v16] fsdev: add IO throttle support to fsdev devices no-reply
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.