[libvirt] [PATCH 08/12] qemu: Add length for bps/iops throttling parameters to driver

Michal Privoznik mprivozn at redhat.com
Tue Sep 27 15:21:21 UTC 2016


On 23.09.2016 14:56, John Ferlan wrote:
> Add support for a duration/length for the bps/iops and friends.
> 
> Modify the API in order to add the "blkdeviotune." specific definitions
> for the iotune throttling duration/length options
> 
>     total_bytes_sec_max_length
>     write_bytes_sec_max_length
>     read_bytes_sec_max_length
>     total_iops_sec_max_length
>     write_iops_sec_max_length
>     read_iops_sec_max_length
> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
>  include/libvirt/libvirt-domain.h |  54 ++++++++++++++++++++
>  src/conf/domain_conf.h           |   6 +++
>  src/qemu/qemu_driver.c           | 106 ++++++++++++++++++++++++++++++++++++++-
>  src/qemu/qemu_monitor.c          |   7 ++-
>  src/qemu/qemu_monitor.h          |   3 +-
>  src/qemu/qemu_monitor_json.c     |  25 ++++++++-
>  src/qemu/qemu_monitor_json.h     |   3 +-
>  tests/qemumonitorjsontest.c      |  17 ++++++-
>  8 files changed, 211 insertions(+), 10 deletions(-)
> 

> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index ee16cb5..3b04754 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -113,7 +113,8 @@ VIR_LOG_INIT("qemu.qemu_driver");
>  #define QEMU_NB_MEM_PARAM  3
>  
>  #define QEMU_NB_BLOCK_IO_TUNE_PARAM  6
> -#define QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX  13
> +#define QEMU_NB_BLOCK_IO_TUNE_PARAM_LENGTH 12
> +#define QEMU_NB_BLOCK_IO_TUNE_PARAM_MAX  19
>  
>  #define QEMU_NB_NUMA_PARAM 2
>  
> @@ -17262,7 +17263,10 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
>      bool set_bytes_max = false;
>      bool set_iops_max = false;
>      bool set_size_iops = false;
> +    bool set_bytes_max_length = false;
> +    bool set_iops_max_length = false;
>      bool supportMaxOptions = true;
> +    bool supportMaxLengthOptions = true;
>      virQEMUDriverConfigPtr cfg = NULL;
>      virObjectEventPtr event = NULL;
>      virTypedParameterPtr eventParams = NULL;
> @@ -17298,6 +17302,18 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
>                                 VIR_TYPED_PARAM_ULLONG,
>                                 VIR_DOMAIN_BLOCK_IOTUNE_SIZE_IOPS_SEC,
>                                 VIR_TYPED_PARAM_ULLONG,
> +                               VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX_LENGTH,
> +                               VIR_TYPED_PARAM_ULLONG,
> +                               VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX_LENGTH,
> +                               VIR_TYPED_PARAM_ULLONG,
> +                               VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX_LENGTH,
> +                               VIR_TYPED_PARAM_ULLONG,
> +                               VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX_LENGTH,
> +                               VIR_TYPED_PARAM_ULLONG,
> +                               VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX_LENGTH,
> +                               VIR_TYPED_PARAM_ULLONG,
> +                               VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX_LENGTH,
> +                               VIR_TYPED_PARAM_ULLONG,
>                                 NULL) < 0)
>          return -1;
>  
> @@ -17449,6 +17465,60 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
>                                          VIR_DOMAIN_TUNABLE_BLKDEV_SIZE_IOPS_SEC,
>                                          param->value.ul) < 0)
>                  goto endjob;
> +        } else if (STREQ(param->field,
> +                         VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC_MAX_LENGTH)) {
> +            info.total_bytes_sec_max_length = param->value.ul;
> +            set_bytes_max_length = true;
> +            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
> +                                        &eventMaxparams,
> +                                        VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_BYTES_SEC_MAX_LENGTH,
> +                                        param->value.ul) < 0)
> +                goto endjob;
> +        } else if (STREQ(param->field,
> +                         VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC_MAX_LENGTH)) {
> +            info.read_bytes_sec_max_length = param->value.ul;
> +            set_bytes_max_length = true;
> +            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
> +                                        &eventMaxparams,
> +                                        VIR_DOMAIN_TUNABLE_BLKDEV_READ_BYTES_SEC_MAX_LENGTH,
> +                                        param->value.ul) < 0)
> +                goto endjob;
> +        } else if (STREQ(param->field,
> +                         VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC_MAX_LENGTH)) {
> +            info.write_bytes_sec_max_length = param->value.ul;
> +            set_bytes_max_length = true;
> +            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
> +                                        &eventMaxparams,
> +                                        VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_BYTES_SEC_MAX_LENGTH,
> +                                        param->value.ul) < 0)
> +                goto endjob;
> +        } else if (STREQ(param->field,
> +                         VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC_MAX_LENGTH)) {
> +            info.total_iops_sec_max_length = param->value.ul;
> +            set_iops_max_length = true;
> +            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
> +                                        &eventMaxparams,
> +                                        VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_IOPS_SEC_MAX_LENGTH,
> +                                        param->value.ul) < 0)
> +                goto endjob;
> +        } else if (STREQ(param->field,
> +                         VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC_MAX_LENGTH)) {
> +            info.read_iops_sec_max_length = param->value.ul;
> +            set_iops_max_length = true;
> +            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
> +                                        &eventMaxparams,
> +                                        VIR_DOMAIN_TUNABLE_BLKDEV_READ_IOPS_SEC_MAX_LENGTH,
> +                                        param->value.ul) < 0)
> +                goto endjob;
> +        } else if (STREQ(param->field,
> +                         VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC_MAX_LENGTH)) {
> +            info.write_iops_sec_max_length = param->value.ul;
> +            set_iops_max_length = true;
> +            if (virTypedParamsAddULLong(&eventParams, &eventNparams,
> +                                        &eventMaxparams,
> +                                        VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_IOPS_SEC_MAX_LENGTH,
> +                                        param->value.ul) < 0)
> +                goto endjob;

I wonder if we could turn these into something more readable. But that's
something for a different patch set.

>          }
>      }

Michal




More information about the libvir-list mailing list