This patchset implement continous leaky bucket throttling.
It use two requests queue to enable to do silly unbalanced throttling like
block_set_io_throttle 0 0 0 0 6000 1
It use two timer to get the timer callbacks and the throttle.c code simple
It add unit tests.
It fail with the following error message at exit and I don't know why yet.
qemu-system-x86_64: block.c:1489: bdrv_drain_all: Assertion
`((&bs->tracked_requests)->lh_first == ((void *)0))' failed.
The throttling core is pretty solid and the surrouding of the patchset needs
polish. (new options ...)
since previous version:
wrap qemu-option.hx declararation [Eric]
continuus -> continuous [Fam]
unit test [Paolo]
Benoît Canet (5):
throttle: Add a new throttling API implementing continuous leaky
bucket.
throttle: Add units tests
block: Enable the new throttling code in the block layer.
block: Add support for throttling burst max in QMP and the command
line.
block: Add iops_sector_count to do the iops accounting for a given io
size.
block.c | 351 ++++++++++----------------------
block/qapi.c | 50 +++--
blockdev.c | 207 ++++++++++++++-----
hmp.c | 36 +++-
include/block/block.h | 1 -
include/block/block_int.h | 32 +--
include/qemu/throttle.h | 105 ++++++++++
qapi-schema.json | 40 +++-
qemu-options.hx | 4 +-
qmp-commands.hx | 34 +++-
tests/Makefile | 2 +
tests/test-throttle.c | 494 +++++++++++++++++++++++++++++++++++++++++++++
util/Makefile.objs | 1 +
util/throttle.c | 391 +++++++++++++++++++++++++++++++++++
14 files changed, 1405 insertions(+), 343 deletions(-)
create mode 100644 include/qemu/throttle.h
create mode 100644 tests/test-throttle.c
create mode 100644 util/throttle.c
--
1.7.10.4