3937ef9 getstats: crawl backing chain for qemu

Authored and Committed by ericb 9 years ago
    getstats: crawl backing chain for qemu
    
    Wire up backing chain recursion.  For the first time, it is now
    possible to get libvirt to expose that qemu tracks read statistics
    on backing files, as well as report maximum extent written on a
    backing file during a block-commit operation.
    
    For a running domain, where one of the two images has a backing
    file, I see the traditional output:
    
    $ virsh domstats --block testvm2
    Domain: 'testvm2'
      block.count=2
      block.0.name=vda
      block.0.path=/tmp/wrapper.qcow2
      block.0.rd.reqs=1
      block.0.rd.bytes=512
      block.0.rd.times=28858
      block.0.wr.reqs=0
      block.0.wr.bytes=0
      block.0.wr.times=0
      block.0.fl.reqs=0
      block.0.fl.times=0
      block.0.allocation=0
      block.0.capacity=1310720000
      block.0.physical=200704
      block.1.name=vdb
      block.1.path=/dev/sda7
      block.1.rd.reqs=0
      block.1.rd.bytes=0
      block.1.rd.times=0
      block.1.wr.reqs=0
      block.1.wr.bytes=0
      block.1.wr.times=0
      block.1.fl.reqs=0
      block.1.fl.times=0
      block.1.allocation=0
      block.1.capacity=1310720000
    
    vs. the new output:
    
    $ virsh domstats --block --backing testvm2
    Domain: 'testvm2'
      block.count=3
      block.0.name=vda
      block.0.path=/tmp/wrapper.qcow2
      block.0.rd.reqs=1
      block.0.rd.bytes=512
      block.0.rd.times=28858
      block.0.wr.reqs=0
      block.0.wr.bytes=0
      block.0.wr.times=0
      block.0.fl.reqs=0
      block.0.fl.times=0
      block.0.allocation=0
      block.0.capacity=1310720000
      block.0.physical=200704
      block.1.name=vda
      block.1.path=/dev/sda6
      block.1.backingIndex=1
      block.1.rd.reqs=0
      block.1.rd.bytes=0
      block.1.rd.times=0
      block.1.wr.reqs=0
      block.1.wr.bytes=0
      block.1.wr.times=0
      block.1.fl.reqs=0
      block.1.fl.times=0
      block.1.allocation=327680
      block.1.capacity=786432000
      block.2.name=vdb
      block.2.path=/dev/sda7
      block.2.rd.reqs=0
      block.2.rd.bytes=0
      block.2.rd.times=0
      block.2.wr.reqs=0
      block.2.wr.bytes=0
      block.2.wr.times=0
      block.2.fl.reqs=0
      block.2.fl.times=0
      block.2.allocation=0
      block.2.capacity=1310720000
    
    I may later do a patch that trims the output to avoid 0 stats,
    particularly for backing files (which are more likely to have
    0 stats, at least for write statistics when no block-commit
    is performed).  Also, I still plan to expose physical size
    information (qemu doesn't expose it yet, so it requires a stat,
    and for block devices, a further open/seek operation).  But
    this patch is good enough without worrying about that yet.
    
    * src/qemu/qemu_driver.c (QEMU_DOMAIN_STATS_BACKING): New internal
    enum bit.
    (qemuConnectGetAllDomainStats): Recognize new user flag, and pass
    details to...
    (qemuDomainGetStatsBlock): ...here, where we can do longer recursion.
    (qemuDomainGetStatsOneBlock): Output new field.
    
    Signed-off-by: Eric Blake <eblake@redhat.com>
    
        
file modified
+49 -12