]> git.proxmox.com Git - mirror_qemu.git/commit
block: add event when disk usage exceeds threshold
authorFrancesco Romani <fromani@redhat.com>
Mon, 12 Jan 2015 13:11:13 +0000 (14:11 +0100)
committerKevin Wolf <kwolf@redhat.com>
Fri, 6 Feb 2015 16:24:21 +0000 (17:24 +0100)
commite2462113b2003085ad16f15e1442ded64e2d9a29
tree113c7d9301d441e8a63bcf75b578f6201f1d6751
parent6440d44cea84451ee9facb1237a4e7251631df80
block: add event when disk usage exceeds threshold

Managing applications, like oVirt (http://www.ovirt.org), make extensive
use of thin-provisioned disk images.
To let the guest run smoothly and be not unnecessarily paused, oVirt sets
a disk usage threshold (so called 'high water mark') based on the occupation
of the device,  and automatically extends the image once the threshold
is reached or exceeded.

In order to detect the crossing of the threshold, oVirt has no choice but
aggressively polling the QEMU monitor using the query-blockstats command.
This lead to unnecessary system load, and is made even worse under scale:
deployments with hundreds of VMs are no longer rare.

To fix this, this patch adds:
* A new monitor command `block-set-write-threshold', to set a mark for
  a given block device.
* A new event `BLOCK_WRITE_THRESHOLD', to report if a block device
  usage exceeds the threshold.
* A new `write_threshold' field into the `BlockDeviceInfo' structure,
  to report the configured threshold.

This will allow the managing application to use smarter and more
efficient monitoring, greatly reducing the need of polling.

[Updated qemu-iotests 067 output to add the new 'write_threshold'
property. --Stefan]
[Changed g_assert_false() to !g_assert() to fix the build on older glib
versions. --Kevin]

Signed-off-by: Francesco Romani <fromani@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-id: 1421068273-692-1-git-send-email-fromani@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block/Makefile.objs
block/qapi.c
block/write-threshold.c [new file with mode: 0644]
include/block/block_int.h
include/block/write-threshold.h [new file with mode: 0644]
qapi/block-core.json
qmp-commands.hx
tests/Makefile
tests/qemu-iotests/067.out
tests/test-write-threshold.c [new file with mode: 0644]