[libvirt] [RFC PATCH 0/8 v3] Summary on block IO throttle

Adam Litke agl at us.ibm.com
Thu Nov 10 21:50:06 UTC 2011


Hi Lei,

I've tested this and found that it works well except for one small thing.

When the domain is running and I change one of the throttle settings using the
--config option in virsh, the on-disk domain xml file is properly updated, but
the command 'virsh dumpxml' returns the old version.  Is this how it is supposed
to work?

Otherwise, it seems to work as advertised (based on my sniff testing).

Tested-by: Adam Litke <agl at us.ibm.com>

On Thu, Nov 10, 2011 at 04:32:50AM +0800, Lei HH Li wrote:
> Changes since V2
>  - Implement the Python binding support for setting blkio throttling.
>  - Implement --current --live --config options support to unify the libvirt API.
>  - Add changes in docs and tests.
>  - Some changes suggested by Adam Litke, Eric Blake, Daniel P. Berrange.
>    - Change the XML schema.
>    - API name to virDomain{Set, Get}BlockIoTune.
>    - Parameters changed to make them more self-explanatory.
>    - virsh command name to blkdeviotune.
>  - And other fixups.
> 
> Changes since V1
>  - Implement the support to get the block io throttling for 
>    a device as read only connection - QMP/HMP.
>  - Split virDomainBlockIoThrottle into two separate functions
>      virDomainSetBlockIoThrottle - Set block I/O limits for a device
>       - Requires a connection in 'write' mode.
>       - Limits (info) structure passed as an input parameter
>      virDomainGetBlockIoThrottle - Get the current block I/O limits for a device
>       - Works on a read-only connection.
>       - Current limits are written to the output parameter (reply).
>  - And Other fixups suggested by Adam Litke, Daniel P. Berrange.
>    - For dynamically allocate the blkiothrottle struct, I will fix
>      it when implement --current --live --config options support.
> 
> Today libvirt supports the cgroups blkio-controller, which handles
> proportional shares and throughput/iops limits on host block devices.
> blkio-controller does not support network file systems (NFS) or other
> QEMU remote block drivers (curl, Ceph/rbd, sheepdog) since they are
> not host block devices. QEMU I/O throttling works with all types of
> drive and can be applied independently to each drive attached to
> a guest and supports throughput/iops limits.
> 
> To help add QEMU I/O throttling support to libvirt, we plan to complete
> it with add new API virDomain{Set, Get}BlockIoThrottle(), new command 'blkdeviotune'
> and Python bindings.
> 
> Notes: Now all the planed features were implemented (#1#2 were implemented by 
> Zhi Yong Wu), the previous comments were all fixed up too. And the qemu part patches 
> have been accepted upstream just now and are expected to be part of the QEMU 1.1 
> release, git tree from Zhi Yong:
> 
> http://repo.or.cz/w/qemu/kevin.git/shortlog/refs/heads/block
> 
> 
> 1) Enable the blkio throttling in xml when guest is starting up.
> 
> Add blkio throttling in xml as follows:
> 
>     <disk type='file' device='disk'>
>       ...
>       <iotune>
>         <total_bytes_sec>nnn</total_bytes_sec>
>         ...
>       </iotune>
>       ...
>     </disk>
> 
> 2) Enable blkio throttling setting at guest running time.
> 
> virsh blkdeviotune <domain> <device> [--total_bytes_sec<number>] [--read_bytes_sec<number>] \
> [--write_bytes_sec<number>] [--total_iops_sec<number>] [--read_iops_sec<number>] 
> [--write_iops_sec<number>]
> 
> 3) The support to get the current block i/o throttling for a device - HMP/QMP.
> 
> virsh blkiothrottle <domain> <device>
> total_bytes_sec:
> read_bytes_sec: 
> write_bytes_sec: 
> total_iops_sec:
> read_iops_sec:  
> write_iops_sec:    
> 
> 4) Python binding support for setting blkio throttling.
> 5) --current --live --config options support to unify the libvirt API.
> 
> virsh blkdeviotune <domain> <device> [--total_bytes_sec <number>] [--read_bytes_sec <number>] 
> [--write_bytes_sec <number>] [--total_iops_sec <number>] [--read_iops_sec <number>] 
> [--write_iops_sec <number>] [--config] [--live] [--current]
> 
> 
> 
>  daemon/remote.c                                       |   87 +++++++
>  docs/formatdomain.html.in                             |   30 ++
>  docs/schemas/domaincommon.rng                         |   24 +
>  include/libvirt/libvirt.h.in                          |   25 ++
>  python/generator.py                                   |    2 
>  python/libvirt-override-api.xml                       |   16 +
>  python/libvirt-override.c                             |   85 +++++++
>  src/conf/domain_conf.c                                |  101 ++++++++
>  src/conf/domain_conf.h                                |   12 
>  src/driver.h                                          |   18 +
>  src/libvirt.c                                         |  115 +++++++++
>  src/libvirt_public.syms                               |    2 
>  src/qemu/qemu_command.c                               |   33 ++
>  src/qemu/qemu_driver.c                                |  217 ++++++++++++++++++
>  src/qemu/qemu_monitor.c                               |   36 ++
>  src/qemu/qemu_monitor.h                               |   10 
>  src/qemu/qemu_monitor_json.c                          |  191 +++++++++++++++
>  src/qemu/qemu_monitor_json.h                          |   10 
>  src/qemu/qemu_monitor_text.c                          |  152 ++++++++++++
>  src/qemu/qemu_monitor_text.h                          |   10 
>  src/remote/remote_driver.c                            |   81 ++++++
>  src/remote/remote_protocol.x                          |   39 +++
>  src/remote_protocol-structs                           |   34 ++
>  src/util/xml.h                                        |    3 
>  tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune.args |    4 
>  tests/qemuxml2argvdata/qemuxml2argv-blkdeviotune.xml  |   36 ++
>  tests/qemuxml2argvtest.c                              |    2 
>  tests/qemuxml2xmltest.c                               |    2 
>  tools/virsh.c                                         |  146 ++++++++++++
>  tools/virsh.pod                                       |   23 +
>  30 files changed, 1540 insertions(+), 6 deletions(-)
> 
> -- 
> Lei
> 

-- 
Adam Litke <agl at us.ibm.com>
IBM Linux Technology Center




More information about the libvir-list mailing list