Re: [PATCH 11/19] src: add constants for domain stats 'vcpu.' parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Mar 04, 2025 at 14:04:06 +0000, Daniel P. Berrangé wrote:
> Contrary to most APIs returning typed parameters, there are no constants
> defined for the domain stats data keys. This is was because many of the
> keys needs to be dynamically constructed using one or more array index
> values.
> 
> It is possible to define constants while still supporting dynamic
> array indexes by simply defining the prefixes and suffixes as constants.
> The consuming code can then combine the constants with array index
> value.
> 
> With this approach, it is practical to add constants for the domain stats
> API keys.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx>
> ---
>  include/libvirt/libvirt-domain.h | 123 +++++++++++++++++++++++++++++++
>  src/libvirt-domain.c             |  44 +++--------
>  src/qemu/qemu_driver.c           |  44 +++++++----
>  3 files changed, 166 insertions(+), 45 deletions(-)
> 
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index 562bc6e17e..3f84cbce65 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -3066,6 +3066,129 @@ struct _virDomainStatsRecord {
>   */
>  #define VIR_DOMAIN_STATS_BALLOON_HUGETLB_PGFAIL "balloon.hugetlb_pgfail"
>  
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_CURRENT:
> + *
> + * Current number of online virtual CPUs as unsigned int.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_CURRENT "vcpu.current"
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_MAXIMUM:
> + *
> + * maximum number of online virtual CPUs as unsigned int.

Maximum (as the sentence ends with a full stop)

> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_MAXIMUM "vcpu.maximum"
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_PREFIX:
> + *
> + * The parameter name prefix to access each vCPU entry. Concatenate the
> + * prefix, the entry number formatted as an unsigned integer and one of the
> + * vCPU suffix parameters to form a complete parameter name.
> + *
> + * Due to VCPU hotplug, the array could be sparse. The actual number of
> + * entries present corresponds to VIR_DOMAIN_STATS_VCPU_CURRENT, while the
> + * array size will never exceed VIR_DOMAIN_STATS_VCPU_MAXIMUM.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_PREFIX "vcpu."
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_SUFFIX_STATE:
> + *
> + * State of the virtual CPU <num>, as int from virVcpuState enum.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_SUFFIX_STATE ".state"
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_SUFFIX_TIME:
> + *
> + * Virtual cpu time spent by virtual CPU as unsigned long long.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_SUFFIX_TIME ".time"
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_SUFFIX_WAIT:
> + *
> + * Time the vCPU wants to run, but the host scheduler has something else
> + * running ahead of it as unsigned long long.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_SUFFIX_WAIT ".wait"
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_SUFFIX_HALTED:
> + *
> + * Virtual CPU is halted as a boolean, may indicate the processor is idle or
> + * even disabled, depending on the architecture.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_SUFFIX_HALTED ".halted"
> +
> +/**
> + * VIR_DOMAIN_STATS_VCPU_SUFFIX_DELAY:
> + *
> + * Time the vCPU thread was enqueued by the host scheduler, but was waiting in
> + * the queue instead of running. Exposed to the VM as a steal time. In
> + * nanoseconds as unsigned long long.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_VCPU_SUFFIX_DELAY ".delay"
> +
> +
> +/**
> + * VIR_DOMAIN_STATS_CUSTOM_SUFFIX_TYPE_CUR:
> + *
> + * Hypervisor specific custom data type for current instant value
> + *
> + * The complete parameter name is formed by concatenating the field prefix,
> + * the array index formatted as an unsigned integer, a hypervisor specific
> + * parameter name, and this data type suffix.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_CUSTOM_SUFFIX_TYPE_CUR ".cur"
> +
> +/**
> + * VIR_DOMAIN_STATS_CUSTOM_SUFFIX_TYPE_SUM:
> + *
> + * Hypervisor specific custom data type for current instant value

aggregate value

> + *
> + * The complete parameter name is formed by concatenating the field prefix,
> + * the array index formatted as an unsigned integer, a hypervisor specific
> + * parameter name, and this data type suffix.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_CUSTOM_SUFFIX_TYPE_SUM ".sum"
> +
> +/**
> + * VIR_DOMAIN_STATS_CUSTOM_SUFFIX_TYPE_MAX:
> + *
> + * Hypervisor specific custom data type for peak value.
> + *
> + * The complete parameter name is formed by concatenating the field prefix,
> + * the array index formatted as an unsigned integer, a hypervisor specific
> + * parameter name, and this data type suffix.
> + *
> + * Since: 11.2.0
> + */
> +#define VIR_DOMAIN_STATS_CUSTOM_SUFFIX_TYPE_MAX ".max"
> +
>  /**
>   * virDomainStatsTypes:
>   *
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index 6c86ad566f..78bc053151 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -12253,43 +12253,23 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
>   *
>   * VIR_DOMAIN_STATS_VCPU:
>   *     Return virtual CPU statistics.
> - *     Due to VCPU hotplug, the vcpu.<num>.* array could be sparse.

[...]

> - *    This group of statistics also reports additional hypervisor-originating
> - *    per-vCPU stats. The hypervisor-specific statistics in this group have the
> - *    following naming scheme:
> + *     This group of statistics also reports additional hypervisor-originating
> + *     per-vCPU stats. The hypervisor-specific statistics in this group have the
> + *     following naming scheme:

The alignment of this hunk is off by 1.

>   *
>   *     "vcpu.<num>.$NAME.$TYPE"
>   *
> - *       $NAME - name of the statistics field provided by the hypervisor
> + *     Where $NAME is an arbitrary choice of the hypervisor driver, for
> + *     which no API constants are defined.
> + *     The $TYPE values are defined by VIR_DOMAIN_STATS_CUSTOM_TYPE_*
> + *     constants.
>   *
> - *       $TYPE - Type of the value. The following types are returned:
> - *          'cur' - current instant value
> - *          'sum' - aggregate value

^^^ see in new docs

> - *          'max' - peak value

[...]

> @@ -17147,17 +17150,30 @@ qemuDomainGetStatsVcpu(virQEMUDriver *driver G_GNUC_UNUSED,
>      for (i = 0; i < virDomainDefGetVcpus(dom->def); i++) {
>          virJSONValue *stat_obj = NULL;
>          g_autoptr(GHashTable) stats = NULL;
> -        g_autofree char *prefix = g_strdup_printf("vcpu.%u", cpuinfo[i].number);
> +        g_autofree char *prefix = g_strdup_printf(
> +            VIR_DOMAIN_STATS_VCPU_PREFIX "%u", cpuinfo[i].number);

formatting

>  

Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux