The first patch fixes the throttling which was broken by a previous commit.
The next patch replace the existing throttling algorithm by the well described leaky bucket algorithm. Third patch implement bursting by adding *_threshold parameters to qmp_block_set_io_throttle. The last one allow to define the max size of an io when throttling by iops via iops_sector_count to avoid vm users cheating on the iops limit. The last patch adds a metric reflecting how much the I/O are throttled. since v1: Add throttling percentage metric [Benoît] since v2: Enable timer only during I/O activity [Stefan] Mark function as coroutine_fn [Stefan] Guard these function checking they are in a coroutine [Stefan] Use defines to access buckets [Stefan] Fix typo [Stefan] reset throttling metric on iddle [Benoît] rename invalid to check_io_limit [Stefan] Benoît Canet (5): block: Repair the throttling code. block: Modify the throttling code to implement the leaky bucket algorithm. block: Add support for throttling burst threshold in QMP and the command line. block: Add iops_sector_count to do the iops accounting for a given io size. block: Add throttling percentage metrics. block.c | 493 ++++++++++++++++++++++++++++----------------- block/qapi.c | 32 +++ blockdev.c | 174 ++++++++++++++-- hmp.c | 38 +++- include/block/block_int.h | 18 +- include/block/coroutine.h | 9 +- qapi-schema.json | 42 +++- qemu-coroutine-lock.c | 20 +- qemu-options.hx | 2 +- qmp-commands.hx | 34 +++- 10 files changed, 642 insertions(+), 220 deletions(-) -- 1.7.10.4