[PATCH 08/23] qemu: reset max iotune setting when needed
Peter Krempa
pkrempa at redhat.com
Wed Mar 3 13:46:58 UTC 2021
On Mon, Jan 11, 2021 at 12:50:01 +0300, Nikolay Shirokovskiy wrote:
> Currenly API is not very convinient when switching from read/write to total
> tunes back and forth. read/write and total tunes can not be set simulaneously
> so one need to choose one. Now if for example total_bytes_sec and
> total_bytes_sec_max are set and we set read_bytes_sec only then API fails. The
> issue is new max settings are copied from the old ones in this case and as
> a result after defaults are applied we got settings for read_bytes_sec and
> total_bytes_sec_max which is incorrect.
>
> In order to handle such situation nicely let's reset max settings if
> appropriate avg settings is reseted explicitly or implicitly.
NACK, IMO we must not change any fields which the user didn't touch.
>
> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
> ---
> src/qemu/qemu_driver.c | 31 ++++++++++++++++++++-----------
> 1 file changed, 20 insertions(+), 11 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 117c7b7..9093baf 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -15901,6 +15901,22 @@ qemuDomainSetBlockIoTuneDefaults(virDomainBlockIoTuneInfoPtr newinfo,
> SET_IOTUNE_DEFAULTS(IOPS_MAX, iops_sec_max);
> #undef SET_IOTUNE_DEFAULTS
>
> +#define RESET_IOTUNE_MAX(BOOL, FIELD) \
Also the series sells removing macros, so adding new ones isn't very
productive ;)
> + do { \
> + if (set_fields & QEMU_BLOCK_IOTUNE_SET_##BOOL) { \
> + if (!newinfo->total_##FIELD) \
> + newinfo->total_##FIELD##_max = 0; \
> + if (!newinfo->read_##FIELD) \
> + newinfo->read_##FIELD##_max = 0; \
> + if (!newinfo->write_##FIELD) \
> + newinfo->write_##FIELD##_max = 0; \
> + } \
> + } while (0)
> +
> + RESET_IOTUNE_MAX(BYTES, bytes_sec);
> + RESET_IOTUNE_MAX(IOPS, iops_sec);
> +#undef RESET_IOTUNE_MAX
More information about the libvir-list
mailing list