v2 was here: https://www.redhat.com/archives/libvir-list/2015-June/msg00591.html This series depends on my yajl/json cleanups: https://www.redhat.com/archives/libvir-list/2015-June/msg01098.html and can also be found here: git clone git://repo.or.cz/libvirt/ericb.git threshold http://repo.or.cz/w/libvirt/ericb.git/shortlog/refs/heads/threshold Since then, I've rebased to master, addressed Peter's findings on v2, and tested that things actually work when combined with a single pending patch on qemu (I'll reply to this mail with the list id of that patch, where that patch in turn points to this series as justification). Here's a transcript of how I tested: I modified my 'f20' domain to include: <devices> <emulator>/home/eblake/qemu/x86_64-softmmu/qemu-system-x86_64</emulator> <disk type='block' device='disk'> <driver name='qemu' type='qcow2'/> <source dev='/dev/sda6'/> <target dev='vda' bus='virtio'/> </disk> then created a raw partition wrapper around the usual disk image: # qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/f20.img,backing_fmt=qcow2 /dev/sda6 Formatting '/dev/sda6', fmt=qcow2 size=12884901888 backing_file='/var/lib/libvirt/images/f20.img' backing_fmt='qcow2' encryption=off cluster_size=65536 lazy_refcounts=off refcount_bits=16 I then started the domain paused (as long as no guest I/O happens, the threshold cannot be exceeded, which gives me time to register a threshold and set up an event handler): # virsh start --paused f20 Domain f20 started # ./run tools/virsh -k0 domblkthreshold f20 vda 10000 threshold of vda set to 10000 bytes I was then able to play with domstats to see different thresholds as I registered them (such as playing with the parts-per-million or even with virsh 'percentage sugar'): # virsh -k0 domstats f20 --block | grep -C1 allo block.0.write-threshold=10000 block.0.allocation=0 block.0.capacity=12884901888 In another window, I set up my event loop: $ ./run tools/virsh -k0 event f20 --loop --all then in the first window, I resumed things: # virsh resume f20 and got this message in the second window, after several seconds had elapsed (the first few seconds in the guest is under control of Grub, which doesn't write to disk; when it transitioned over to the Linux boot, disk activity started happening and easily causes the qcow2 wrapper to exceed the threshold I set earlier): $ ./run tools/virsh -k0 -c qemu:///system event --loop --all event 'lifecycle' for domain f20: Resumed Unpaused event 'lifecycle' for domain f20: Resumed Unpaused event 'write-threshold' for domain f20 disk vda (/dev/sda6): threshold 10000 exceeded by 186608 bytes Sure enough, the registration had cleared, and the qcow2 wrapper had grown (it grew more than once in the process of booting, so by the time I re-queried, allocation had grown even further). # virsh -k0 domstats f20 --block | grep -C1 allo block.0.write-threshold=0 block.0.allocation=13434368 block.0.capacity=12884901888 I'd really like to see this series in 1.3.0 to commit to the API; there are still some further improvements we can make (in particular 'vda[1]' support, and also improving qemu event handling to re-grab a job lock if the cache of node names is not populated after a libvirtd restart), but as those improvements won't affect ABI, they can be deferred if they don't make it into 1.3.0. [I'm headed on vacation, so I will be really slow to respond in the next 3 weeks; someone else may need to push this if it is approved for 1.3.0] Eric Blake (10): threshold: new API virDomainBlockSetWriteThreshold threshold: expose new API in virsh threshold: new event object for tracking write threshold threshold: wire up threshold event in RPC threshold: add qemu capability bits threshold: learn a node name for a given qcow2 disk threshold: track an allocation node name for a storage source threshold: scrape threshold data from QMP threshold: add threshold event handling in qemu threshold: add write threshold setting in qemu daemon/remote.c | 51 +++ include/libvirt/libvirt-domain.h | 53 +++ src/conf/domain_event.c | 101 ++++- src/conf/domain_event.h | 16 +- src/driver-hypervisor.h | 7 + src/libvirt-domain.c | 98 +++++ src/libvirt_private.syms | 2 + src/libvirt_public.syms | 1 + src/qemu/qemu_capabilities.c | 12 +- src/qemu/qemu_capabilities.h | 4 +- src/qemu/qemu_domain.c | 105 ++++++ src/qemu/qemu_domain.h | 10 +- src/qemu/qemu_driver.c | 108 +++++- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_monitor.c | 79 +++- src/qemu/qemu_monitor.h | 28 ++ src/qemu/qemu_monitor_json.c | 305 ++++++++++++++- src/qemu/qemu_monitor_json.h | 11 + src/qemu/qemu_process.c | 44 +++ src/remote/remote_driver.c | 35 ++ src/remote/remote_protocol.x | 30 +- src/remote_protocol-structs | 16 + src/util/virstoragefile.c | 4 +- src/util/virstoragefile.h | 3 +- tests/qemucapabilitiesdata/caps_2.1.1-1.replies | 470 ++++++++++++------------ tests/qemumonitortest.c | 13 +- tools/virsh-domain-monitor.c | 108 ++++++ tools/virsh-domain.c | 24 ++ tools/virsh.pod | 26 ++ 29 files changed, 1508 insertions(+), 258 deletions(-) -- 2.4.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list