[libvirt] [PATCH v2 10/12] getstats: add new flag for block backing chain

Peter Krempa pkrempa at redhat.com
Tue Dec 16 15:11:10 UTC 2014


On 12/16/14 09:04, Eric Blake wrote:
> This patch introduces access to allocation information about
> a backing chain of a live domain.  While querying storage
> volumes for read-only disks could provide some of the details,
> there is one case where we have to rely on qemu: when doing
> a block commit into a backing file, where that file is stored
> in qcow2 format on a host block device, we want to know the
> current highest write offset into that image, in order to know
> if the disk must be resized larger.  qemu-img does not
> (currently) show this information, and none of the earlier
> block APIs were extensible enough to expose it.  But
> virDomainListGetStats is perfect for the job!
> 
> We don't need a new group of statistics, as the existing block
> group is sufficient.  On the other hand, as existing libvirt
> releases already report 1:1 mapping of block.count to <disk>
> devices, changing the array size could confuse older clients;
> and even with newer clients, the time and memory taken to
> report additional statistics is not always necessary (backing
> files are generally read-only except for block-commit, so while
> read statistics may change, sizing statistics will not).  So
> the choice here is to add a new flag that only newer callers
> will pass, when they are prepared for the additional information.
> 
> This patch introduces the new API, but it will take more
> patches to get it implemented for qemu.
> 
> * include/libvirt/libvirt-domain.h
> (VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING): New flag.
> * src/libvirt-domain.c (virConnectGetAllDomainStats): Document it,
> and add a new field when it is in use.
> * tools/virsh-domain-monitor.c (cmdDomstats): Use new flag.
> * tools/virsh.pod (domstats): Document it.
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>  include/libvirt/libvirt-domain.h | 1 +
>  src/libvirt-domain.c             | 7 ++++++-
>  tools/virsh-domain-monitor.c     | 7 +++++++
>  tools/virsh.pod                  | 8 ++++++--
>  4 files changed, 20 insertions(+), 3 deletions(-)
> 
> diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
> index baef32d..0b1a2d6 100644
> --- a/include/libvirt/libvirt-domain.h
> +++ b/include/libvirt/libvirt-domain.h
> @@ -1705,6 +1705,7 @@ typedef enum {
>      VIR_CONNECT_GET_ALL_DOMAINS_STATS_SHUTOFF = VIR_CONNECT_LIST_DOMAINS_SHUTOFF,
>      VIR_CONNECT_GET_ALL_DOMAINS_STATS_OTHER = VIR_CONNECT_LIST_DOMAINS_OTHER,
> 
> +    VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING = 1 << 30, /* include backing chain for block stats */
>      VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS = 1 << 31, /* enforce requested stats */
>  } virConnectGetAllDomainStatsFlags;
> 
> diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
> index cb76d8c..8c4ad7b 100644
> --- a/src/libvirt-domain.c
> +++ b/src/libvirt-domain.c
> @@ -10903,13 +10903,18 @@ virConnectGetDomainCapabilities(virConnectPtr conn,
>   * "net.<num>.tx.errs" - transmission errors as unsigned long long.
>   * "net.<num>.tx.drop" - transmit packets dropped as unsigned long long.
>   *
> - * VIR_DOMAIN_STATS_BLOCK: Return block devices statistics.
> + * VIR_DOMAIN_STATS_BLOCK: Return block devices statistics.  By default,
> + * this information is limited to the active layer of each <disk> of the
> + * domain, but adding VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING to @flags
> + * will expand the array to cover backing chains.
>   * The typed parameter keys are in this format:
>   * "block.count" - number of block devices on this domain
>   *                 as unsigned int.
>   * "block.<num>.name" - name of the block device <num> as string.
>   *                      matches the target name (vda/sda/hda) of the
>   *                      block device.
> + * "block.<num>.backingIndex" - unsigned int giving the <backingStore> index,
> + *                              when backing images are listed.

You add the field to this help, but ...

>   * "block.<num>.path" - string describing the source of block device <num>,
>   *                      if it is a file or block device (omitted for network
>   *                      sources and drives with no media inserted).
> diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
> index 259400f..214c0b2 100644
> --- a/tools/virsh-domain-monitor.c
> +++ b/tools/virsh-domain-monitor.c
> @@ -2037,6 +2037,10 @@ static const vshCmdOptDef opts_domstats[] = {
>       .type = VSH_OT_BOOL,
>       .help = N_("enforce requested stats parameters"),
>      },
> +    {.name = "backing",
> +     .type = VSH_OT_BOOL,
> +     .help = N_("add backing chain information to block stats"),
> +    },
>      {.name = "domain",
>       .type = VSH_OT_ARGV,
>       .flags = VSH_OFLAG_NONE,
> @@ -2130,6 +2134,9 @@ cmdDomstats(vshControl *ctl, const vshCmd *cmd)
>      if (vshCommandOptBool(cmd, "enforce"))
>          flags |= VIR_CONNECT_GET_ALL_DOMAINS_STATS_ENFORCE_STATS;
> 
> +    if (vshCommandOptBool(cmd, "backing"))
> +        flags |= VIR_CONNECT_GET_ALL_DOMAINS_STATS_BACKING;
> +
>      if (vshCommandOptBool(cmd, "domain")) {
>          if (VIR_ALLOC_N(domlist, 1) < 0)
>              goto cleanup;
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index 0eba2c1..8c5e426 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -825,7 +825,7 @@ that require a block device name (such as I<domblkinfo> or
>  I<snapshot-create> for disk snapshots) will accept either target
>  or unique source names printed by this command.
> 
> -=item B<domstats> [I<--raw>] [I<--enforce>] [I<--state>]
> +=item B<domstats> [I<--raw>] [I<--enforce>] [I<--backing>] [I<--state>]
>  [I<--cpu-total>] [I<--balloon>] [I<--vcpu>] [I<--interface>] [I<--block>]
>  [[I<--list-active>] [I<--list-inactive>] [I<--list-persistent>]
>  [I<--list-transient>] [I<--list-running>] [I<--list-paused>]
> @@ -880,7 +880,11 @@ I<--interface> returns:
>  "net.<num>.tx.errs" - number of transmission errors,
>  "net.<num>.tx.drop" - number of transmit packets dropped
> 
> -I<--block> returns:
> +I<--block> returns information about disks associated with each
> +domain.  Using the I<--backing> flag extends this information to
> +cover all resources in the backing chain, rather than the default
> +of limiting information to the active layer for each guest disk.
> +Information listed includes:
>  "block.count" - number of block devices on this domain,
>  "block.<num>.name" - name of the target of the block device <num>,
>  "block.<num>.path" - file source of block device <num>, if it is a
> 

... not to the manpage.

ACK with ^^.

Peter


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20141216/28e54623/attachment-0001.sig>


More information about the libvir-list mailing list