Message ID | 20220401093523.873508-1-nsaenzju@redhat.com |
---|---|
Headers | show |
Series | util/thread-pool: Expose minimun and maximum size | expand |
On Fri, 2022-04-01 at 11:35 +0200, Nicolas Saenz Julienne wrote: Subject says 0/4 where is should've been 0/3. > As discussed on the previous RFC[1] the thread-pool's dynamic thread > management doesn't play well with real-time and latency sensitive > systems. This series introduces a set of controls that'll permit > achieving more deterministic behaviours, for example by fixing the > pool's size. > > We first introduce a new common interface to event loop configuration by > moving iothread's already available properties into an abstract class > called 'EventLooopBackend' and have both 'IOThread' and the newly > created 'MainLoop' inherit the properties from that class. > > With this new configuration interface in place it's relatively simple to > introduce new options to fix the even loop's thread pool sizes. The > resulting QAPI looks like this: > > -object main-loop,id=main-loop,thread-pool-min=1,thread-pool-max=1 > > Note that all patches are bisect friendly and pass all the tests. > > [1] https://patchwork.ozlabs.org/project/qemu-devel/patch/20220202175234.656711-1-nsaenzju@redhat.com/ > > @Stefan I kept your Signed-off-by, since the changes trivial/not > thread-pool related > > --- > Changes since v3: > - Avoid duplication in qom.json by creating EventLoopBaseProperties. > - Fix failures on first compilation due to race between > event-loop-base.o and qapi header generation. > > Changes since v2: > - Get rid of wrong locking/waiting > - Fix qapi versioning > - Better commit messages > > Changes since v1: > - Address all Stefan's comments > - Introduce new fix > > Nicolas Saenz Julienne (3): > Introduce event-loop-base abstract class > util/main-loop: Introduce the main loop into QOM > util/event-loop-base: Introduce options to set the thread pool size > > event-loop-base.c | 140 +++++++++++++++++++++++++++++++ > include/block/aio.h | 10 +++ > include/block/thread-pool.h | 3 + > include/qemu/main-loop.h | 10 +++ > include/sysemu/event-loop-base.h | 41 +++++++++ > include/sysemu/iothread.h | 6 +- > iothread.c | 68 +++++---------- > meson.build | 26 +++--- > qapi/qom.json | 40 +++++++-- > util/aio-posix.c | 1 + > util/async.c | 20 +++++ > util/main-loop.c | 65 ++++++++++++++ > util/thread-pool.c | 55 +++++++++++- > 13 files changed, 416 insertions(+), 69 deletions(-) > create mode 100644 event-loop-base.c > create mode 100644 include/sysemu/event-loop-base.h >
On Fri, Apr 01, 2022 at 11:35:20AM +0200, Nicolas Saenz Julienne wrote: > As discussed on the previous RFC[1] the thread-pool's dynamic thread > management doesn't play well with real-time and latency sensitive > systems. This series introduces a set of controls that'll permit > achieving more deterministic behaviours, for example by fixing the > pool's size. > > We first introduce a new common interface to event loop configuration by > moving iothread's already available properties into an abstract class > called 'EventLooopBackend' and have both 'IOThread' and the newly > created 'MainLoop' inherit the properties from that class. > > With this new configuration interface in place it's relatively simple to > introduce new options to fix the even loop's thread pool sizes. The > resulting QAPI looks like this: > > -object main-loop,id=main-loop,thread-pool-min=1,thread-pool-max=1 > > Note that all patches are bisect friendly and pass all the tests. > > [1] https://patchwork.ozlabs.org/project/qemu-devel/patch/20220202175234.656711-1-nsaenzju@redhat.com/ > > @Stefan I kept your Signed-off-by, since the changes trivial/not > thread-pool related Looks good to me. I will wait for Markus to review the QAPI schema changes. Stefan
On Mon, 2022-04-04 at 10:29 +0100, Stefan Hajnoczi wrote: > On Fri, Apr 01, 2022 at 11:35:20AM +0200, Nicolas Saenz Julienne wrote: > > As discussed on the previous RFC[1] the thread-pool's dynamic thread > > management doesn't play well with real-time and latency sensitive > > systems. This series introduces a set of controls that'll permit > > achieving more deterministic behaviours, for example by fixing the > > pool's size. > > > > We first introduce a new common interface to event loop configuration by > > moving iothread's already available properties into an abstract class > > called 'EventLooopBackend' and have both 'IOThread' and the newly > > created 'MainLoop' inherit the properties from that class. > > > > With this new configuration interface in place it's relatively simple to > > introduce new options to fix the even loop's thread pool sizes. The > > resulting QAPI looks like this: > > > > -object main-loop,id=main-loop,thread-pool-min=1,thread-pool-max=1 > > > > Note that all patches are bisect friendly and pass all the tests. > > > > [1] https://patchwork.ozlabs.org/project/qemu-devel/patch/20220202175234.656711-1-nsaenzju@redhat.com/ > > > > @Stefan I kept your Signed-off-by, since the changes trivial/not > > thread-pool related > > Looks good to me. I will wait for Markus to review the QAPI schema changes. ping :)