• E
    blockjob: allow finer bandwidth tuning for query · db33cc24
    Eric Blake 提交于
    While reviewing the new virDomainBlockCopy API, Peter Krempa
    pointed out that our existing design of using MiB/s for block
    job bandwidth is rather coarse, especially since qemu tracks
    it in bytes/s; so virDomainBlockCopy only accepts bytes/s.
    But once the new API is implemented for qemu, we will be in
    the situation where it is possible to set a value that cannot
    be accurately reflected back to the user, because the existing
    virDomainGetBlockJobInfo defaults to the coarser units.
    
    Fortunately, we have an escape hatch; and one that has already
    served us well in the past: we can use the flags argument to
    specify which scale to use (see virDomainBlockResize for prior
    art).  This patch fixes the query side of the API; made easier
    by previous patches that split the query side out from the
    modification code.  Later patches will address the virsh
    interface, as well retrofitting all other blockjob APIs to
    also accept a flag for toggling bandwidth units.
    
    * include/libvirt/libvirt.h.in (_virDomainBlockJobInfo)
    (VIR_DOMAIN_BLOCK_COPY_BANDWIDTH): Document sizing issues.
    (virDomainBlockJobInfoFlags): New enum.
    * src/libvirt.c (virDomainGetBlockJobInfo): Document new flag.
    * src/qemu/qemu_monitor.h (qemuMonitorBlockJobInfo): Add parameter.
    * src/qemu/qemu_monitor.c (qemuMonitorBlockJobInfo): Likewise.
    * src/qemu/qemu_monitor_json.h (qemuMonitorJSONBlockJobInfo):
    Likewise.
    * src/qemu/qemu_monitor_json.c (qemuMonitorJSONBlockJobInfo)
    (qemuMonitorJSONGetBlockJobInfoOne): Likewise. Don't scale here.
    * src/qemu/qemu_migration.c (qemuMigrationDriveMirror): Update
    callers.
    * src/qemu/qemu_driver.c (qemuDomainBlockPivot)
    (qemuDomainBlockJobImpl): Likewise.
    (qemuDomainGetBlockJobInfo): Likewise, and support new flag.
    Signed-off-by: NEric Blake <eblake@redhat.com>
    db33cc24
libvirt.c 650.5 KB