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
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
--
2.35.1
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 :) -- Nicolás Sáenz
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 > -- Nicolás Sáenz
© 2016 - 2026 Red Hat, Inc.