]> git.proxmox.com Git - mirror_qemu.git/commit
util/event-loop-base: Introduce options to set the thread pool size
authorNicolas Saenz Julienne <nsaenzju@redhat.com>
Mon, 25 Apr 2022 07:57:23 +0000 (09:57 +0200)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 9 May 2022 09:43:23 +0000 (10:43 +0100)
commit71ad4713cc1d7fca24388b828ef31ae6cb38a31c
treebaf49f521c85ffa4551b2cb73083562570b3c857
parent70ac26b9e5ca8374bb3ef3f30b871726673c9f27
util/event-loop-base: Introduce options to set the thread pool size

The thread pool regulates itself: when idle, it kills threads until
empty, when in demand, it creates new threads until full. This behaviour
doesn't play well with latency sensitive workloads where the price of
creating a new thread is too high. For example, when paired with qemu's
'-mlock', or using safety features like SafeStack, creating a new thread
has been measured take multiple milliseconds.

In order to mitigate this let's introduce a new 'EventLoopBase'
property to set the thread pool size. The threads will be created during
the pool's initialization or upon updating the property's value, remain
available during its lifetime regardless of demand, and destroyed upon
freeing it. A properly characterized workload will then be able to
configure the pool to avoid any latency spikes.

Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-id: 20220425075723.20019-4-nsaenzju@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
event-loop-base.c
include/block/aio.h
include/block/thread-pool.h
include/sysemu/event-loop-base.h
iothread.c
qapi/qom.json
util/aio-posix.c
util/async.c
util/main-loop.c
util/thread-pool.c