[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