xemu/qapi
Francesco Romani e2462113b2 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>
2015-02-06 17:24:21 +01:00
..
block-core.json block: add event when disk usage exceeds threshold 2015-02-06 17:24:21 +01:00
block.json qapi event: convert DEVICE_TRAY_MOVED 2014-06-23 11:12:27 -04:00
common.json -machine vmport=auto: Fix handling of VMWare ioport emulation for xen 2014-11-26 12:11:27 +01:00
event.json qapi: Change back sector-count to sectors-count in quorum QAPI events. 2014-07-01 10:15:34 +02:00
Makefile.objs rename parse_enum_option to qapi_enum_parse and make it public 2014-09-08 11:12:43 +01:00
opts-visitor.c QemuOpts: change opt->name|str from (const char *) to (char *) 2014-06-16 17:23:20 +08:00
qapi-dealloc-visitor.c qapi: dealloc visitor, implement visit_start_union 2014-09-26 13:14:10 -04:00
qapi-util.c rename parse_enum_option to qapi_enum_parse and make it public 2014-09-08 11:12:43 +01:00
qapi-visit-core.c qapi: add visit_start_union and visit_end_union 2014-09-26 13:14:10 -04:00
qmp-dispatch.c qmp: Eliminate silly QERR_COMMAND_NOT_FOUND macro 2015-01-29 10:02:18 +01:00
qmp-event.c qapi: add event helper functions 2014-06-23 11:01:25 -04:00
qmp-input-visitor.c qapi: Replace start_optional()/end_optional() by optional() 2014-05-15 14:00:45 -04:00
qmp-output-visitor.c qapi: Avoid output visitor crashing if it encounters a NULL value 2014-05-28 17:36:04 +02:00
qmp-registry.c qemu-ga: Extend 'guest-info' command to expose flag 'success-response' 2013-10-10 14:52:37 -05:00
string-input-visitor.c qapi: fix input visitor bugs 2014-06-19 18:44:22 +03:00
string-output-visitor.c qapi/string-output-visitor: fix human output 2014-06-23 17:38:00 +03:00
trace.json trace: [qmp] Add commands to query and control event tracing state 2014-09-26 09:34:38 +01:00