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. The throttling core is pretty solid and the surrouding of the patchset needs polish. (new options ...) since previous version: Fix bdrv_drain_all broken logic hence fixing the assertion error at exit. v3-V4: 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 | 349 ++++++++++---------------------- 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(+), 341 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