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

Lei Li lilei at linux.vnet.ibm.com
Fri Nov 11 06:59:46 UTC 2011


On 11/11/2011 05:50 AM, Adam Litke wrote:

> 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?
>
Hi Adam,

I tried to test this case. I found that the command 'virsh dumpxml' will return
the updated version after restart or just destroy the domain. :)


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


-- 
Lei




More information about the libvir-list mailing list