On Wed, Aug 20, 2014 at 02:27:06PM +0000, Benoît Canet wrote: > On Wed, Aug 13, 2014 at 04:23:51PM +0200, Benoît Canet wrote: > > Hi, > > > > Here is my current wip on the throttle group support. > > > > For the user interface I implemented Stefanha's idea proposed in Stuttgart. > > > > For the throttling algorithm I use a cooperative round robin scheduler. > > > > Classical round robin works with a fixed HZ ticks and it's totaly > > incompatible > > with the throttling algorithm. > > > > So the cooperative round robin scheduler is a way for each block device to > > decide > > if a pause must be done and a timer be armed and most important of all which > > other block device of the group must resume the work once the timer is > > fired. > > > > The advantages of this algorigthm are: > > > > -only one timer active at a given time (no more cpu usage than regular > > throttling) > > -no central place didacting the sheduling policy like a didactureship: > > we love collaboration isn't it ?:) > > -No need to deal with incoming queues to collect requests before > > scheduling > > then with and dispatchs queues > > -Compatible with the throttling code with almost no changes > > -As you go scheduling > > > > Best regards > > > > Benoît > > > > Benoît Canet (8): > > throttle: Extract timers from ThrottleState into a separate > > ThrottleTimers structure > > throttle: Add throttle group infrastructure > > throttle: Add throttle group infrastructure tests > > throttle: Prepare to have multiple timers for one ThrottleState > > throttle: Add a way to know if throttle_schedule_timer had armed a > > timer > > throttle: Add a way to fire one of the timers asap like a bottom half > > throttle: Add throttle group support > > throttle: Update throttle infrastructure copyright > > > > block.c | 211 > > ++++++++++++++++++++++++++++++++++----- > > block/Makefile.objs | 1 + > > block/qapi.c | 7 +- > > block/throttle-groups.c | 212 > > ++++++++++++++++++++++++++++++++++++++++ > > blockdev.c | 18 +++- > > hmp.c | 4 +- > > include/block/block.h | 3 +- > > include/block/block_int.h | 9 +- > > include/block/throttle-groups.h | 45 +++++++++ > > include/qemu/throttle.h | 46 ++++++--- > > qapi/block-core.json | 5 +- > > qemu-options.hx | 1 + > > qmp-commands.hx | 3 +- > > tests/test-throttle.c | 137 +++++++++++++++++++------- > > util/throttle.c | 107 +++++++++++++------- > > 15 files changed, 684 insertions(+), 125 deletions(-) > > create mode 100644 block/throttle-groups.c > > create mode 100644 include/block/throttle-groups.h > > > > -- > > 2.1.0.rc1 > > > > ping
ping