On 2024/7/26 21:03, Peter Krempa wrote:
> +static virDomainThrottleGroupDef *
> +virDomainThrottleGroupDefParseXML(xmlNodePtr node,
> + xmlXPathContextPtr ctxt)
> +{
> + g_autoptr(virDomainThrottleGroupDef) group = g_new0(virDomainThrottleGroupDef,
1);
> +
> + VIR_XPATH_NODE_AUTORESTORE(ctxt)
> + ctxt->node = node;
> +
> + PARSE_THROTTLEGROUP(total_bytes_sec);
> + PARSE_THROTTLEGROUP(read_bytes_sec);
> + PARSE_THROTTLEGROUP(write_bytes_sec);
> + PARSE_THROTTLEGROUP(total_iops_sec);
> + PARSE_THROTTLEGROUP(read_iops_sec);
> + PARSE_THROTTLEGROUP(write_iops_sec);
> +
> + PARSE_THROTTLEGROUP(total_bytes_sec_max);
> + PARSE_THROTTLEGROUP(read_bytes_sec_max);
> + PARSE_THROTTLEGROUP(write_bytes_sec_max);
> + PARSE_THROTTLEGROUP(total_iops_sec_max);
> + PARSE_THROTTLEGROUP(read_iops_sec_max);
> + PARSE_THROTTLEGROUP(write_iops_sec_max);
> +
> + PARSE_THROTTLEGROUP(size_iops_sec);
> +
> + PARSE_THROTTLEGROUP(total_bytes_sec_max_length);
> + PARSE_THROTTLEGROUP(read_bytes_sec_max_length);
> + PARSE_THROTTLEGROUP(write_bytes_sec_max_length);
> + PARSE_THROTTLEGROUP(total_iops_sec_max_length);
> + PARSE_THROTTLEGROUP(read_iops_sec_max_length);
> + PARSE_THROTTLEGROUP(write_iops_sec_max_length);
I'd prefer if we had only one copy of the code parsing this and the
equivalent disk throttling data so that the code doesn't need to be
duplicated. The cleanup can be done as a followup though.
in v4 drafting, I am defining the following common macro to avoid
duplication of iterating all options in all parsing and formatting codes
for both iotune and throttlegroup:
#define FOR_EACH_IOTUNE_ULL_OPTION(process) \
process(total_bytes_sec) \
process(read_bytes_sec) \
process(write_bytes_sec) \
process(total_iops_sec) \
process(read_iops_sec) \
process(write_iops_sec) \
process(total_bytes_sec_max) \
process(read_bytes_sec_max) \
process(write_bytes_sec_max) \
process(total_iops_sec_max) \
process(read_iops_sec_max) \
process(write_iops_sec_max) \
process(size_iops_sec) \
process(total_bytes_sec_max_length) \
process(read_bytes_sec_max_length) \
process(write_bytes_sec_max_length) \
process(total_iops_sec_max_length) \
process(read_iops_sec_max_length) \
process(write_iops_sec_max_length)
and define different "process" macro for parse and format, and this can
be reused by iotune and format by just calling e.g.
FOR_EACH_IOTUNE_ULL_OPTION(PARSE_IOTUNE);
FOR_EACH_IOTUNE_ULL_OPTION(FORMAT_IOTUNE);
--
Thanks and Regards,
Wu