From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43286) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK6r5-0000ws-5A for qemu-devel@nongnu.org; Wed, 20 Aug 2014 10:27:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XK6qy-0002uH-W5 for qemu-devel@nongnu.org; Wed, 20 Aug 2014 10:27:15 -0400 Received: from dew.nodalink.com ([95.130.14.197]:39491) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XK6qy-0002tt-Pb for qemu-devel@nongnu.org; Wed, 20 Aug 2014 10:27:08 -0400 Date: Wed, 20 Aug 2014 14:27:06 +0000 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140820142706.GA20887@nodalink.com> References: <1407939839-27483-1-git-send-email-benoit.canet@nodalink.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1407939839-27483-1-git-send-email-benoit.canet@nodalink.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [RFC V2 0/8] Throttle group cooperative round robin scheduling List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?iso-8859-1?Q?Beno=EEt?= Canet Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com On Wed, Aug 13, 2014 at 04:23:51PM +0200, Beno=EEt Canet wrote: > Hi, >=20 > Here is my current wip on the throttle group support. >=20 > For the user interface I implemented Stefanha's idea proposed in Stuttg= art. >=20 > For the throttling algorithm I use a cooperative round robin scheduler. >=20 > Classical round robin works with a fixed HZ ticks and it's totaly incom= patible > with the throttling algorithm. >=20 > 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. >=20 > The advantages of this algorigthm are: >=20 > -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 sched= uling=20 > then with and dispatchs queues > -Compatible with the throttling code with almost no changes > -As you go scheduling >=20 > Best regards >=20 > Beno=EEt >=20 > Beno=EEt 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 >=20 > 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 >=20 > --=20 > 2.1.0.rc1 >=20 ping