This series adds a throttle block driver filter. Currently throttling is done at the BlockBackend level. Using block driver interfaces we can move the throttling to any point in the BDS graph using a throttle node which uses the existing throttling code. This allows for potentially more complex configurations (throttling at any point in the graph, chained filters)
v4: fix suggestions in block/throttle.c fix suggestions in block/throttle_groups.c add doc note in BlockDevOptionsThrottle v3: fix style error in 'add aio_context field in ThrottleGroupMember' v2: change QOM throttle group object name print valid ranges for uint on error move frees in throttle_group_obj_finalize() split throttle_group_{set,get}() add throttle_recurse_is_first_non_filter() Manos Pitsidianakis (7): block: move ThrottleGroup membership to ThrottleGroupMember block: add aio_context field in ThrottleGroupMember block: tidy ThrottleGroupMember initializations block: convert ThrottleGroup to object with QOM block: add throttle block filter driver block: add BlockDevOptionsThrottle to QAPI block: add throttle block filter driver interface tests block/Makefile.objs | 1 + block/block-backend.c | 62 ++-- block/qapi.c | 8 +- block/throttle-groups.c | 730 +++++++++++++++++++++++++++++----------- block/throttle.c | 315 +++++++++++++++++ blockdev.c | 4 +- include/block/throttle-groups.h | 47 ++- include/qemu/throttle-options.h | 60 ++-- include/qemu/throttle.h | 3 + include/sysemu/block-backend.h | 20 +- qapi/block-core.json | 70 +++- tests/qemu-iotests/184 | 310 +++++++++++++++++ tests/qemu-iotests/184.out | 422 +++++++++++++++++++++++ tests/qemu-iotests/group | 1 + tests/test-throttle.c | 111 +++--- util/throttle.c | 151 +++++++++ 16 files changed, 1995 insertions(+), 320 deletions(-) create mode 100644 block/throttle.c create mode 100755 tests/qemu-iotests/184 create mode 100644 tests/qemu-iotests/184.out -- 2.11.0