This will allow other subsystems (i.e. fsdev) to implement throttling without duplicating the command line options.
Signed-off-by: Greg Kurz <gr...@kaod.org> --- Hi, Pradeep has been working on enabling throttling in 9p/fsdev. The latest version (v11) of the patch is: Message-Id: <1478854467-25061-1-git-send-email-pradeep.jagade...@huawei.com> There is some code duplication around the command line options. This patch is a first proposal to reduce the duplication. Some work should also be possible on the parsing side (see fsdev_throttle_parse_opts() in the patch above). Thanks for your comments. -- Greg blockdev.c | 83 +++-------------------------------- include/qemu/throttle-options.h | 93 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 77 deletions(-) create mode 100644 include/qemu/throttle-options.h diff --git a/blockdev.c b/blockdev.c index 245e1e1d177a..59f3df700d23 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,11 @@ 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/include/qemu/throttle-options.h b/include/qemu/throttle-options.h new file mode 100644 index 000000000000..612f5d83bbd9 --- /dev/null +++ b/include/qemu/throttle-options.h @@ -0,0 +1,93 @@ +/* + * 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