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


Reply via email to