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

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

 



On 12/06/14 09:14, 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@xxxxxxxxxx>
> ---
>  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/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.

So name will always be "vda/sda/hda" and this will change according to
the position in the backing chain?

Okay. That makes sense although it's not entirely obvious from the
description.

>   * "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.pod b/tools/virsh.pod
> index cbd82275..378f1c0 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

The man page is missing entry for "block.<num>.backingIndex"

> 

ACK if you add the man page entry.

Peter

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[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]