qemu-e2k/util
Nicolas Saenz Julienne 71ad4713cc 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>
2022-05-09 10:43:23 +01:00
..
aio-posix.c util/event-loop-base: Introduce options to set the thread pool size 2022-05-09 10:43:23 +01:00
aio-posix.h aio-posix: fix spurious ->poll_ready() callbacks in main loop 2022-03-17 11:23:18 +00:00
aio-wait.c
aio-win32.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
aiocb.c
async.c util/event-loop-base: Introduce options to set the thread pool size 2022-05-09 10:43:23 +01:00
atomic64.c osdep: Move memalign-related functions to their own header 2022-03-07 13:16:49 +00:00
base64.c
bitmap.c Replace config-time define HOST_WORDS_BIGENDIAN 2022-04-06 10:50:37 +02:00
bitops.c
block-helpers.c
block-helpers.h
buffer.c
bufferiszero.c cpuid: use unsigned for max cpuid 2022-02-04 09:07:43 -05:00
cacheflush.c include: Move qemu_[id]cache_* declarations to new qemu/cacheinfo.h 2022-02-21 13:30:20 +00:00
cacheinfo.c include: Move qemu_[id]cache_* declarations to new qemu/cacheinfo.h 2022-02-21 13:30:20 +00:00
compatfd.c util: replace pipe()+cloexec with g_unix_open_pipe() 2022-05-03 15:18:14 +04:00
coroutine-sigaltstack.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
coroutine-ucontext.c coroutine-ucontext: use QEMU_DEFINE_STATIC_CO_TLS() 2022-05-04 15:55:23 +02:00
coroutine-win32.c coroutine-win32: use QEMU_DEFINE_STATIC_CO_TLS() 2022-05-04 15:55:23 +02:00
crc32c.c
crc-ccitt.c
cutils.c include: move qemu_fdatasync() to osdep 2022-04-21 17:03:51 +04:00
dbus.c
drm.c
envlist.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
error-report.c error-report: fix g_date_time_format assertion 2022-04-28 08:51:56 +02:00
error.c
event_notifier-posix.c Replace qemu_pipe() with g_unix_open_pipe() 2022-05-03 15:17:56 +04:00
event_notifier-win32.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
fdmon-epoll.c
fdmon-io_uring.c aio-posix: fix build failure io_uring 2.2 2022-03-17 11:23:18 +00:00
fdmon-poll.c
fifo8.c
filemonitor-inotify.c
filemonitor-stub.c
getauxval.c
guest-random.c
hbitmap.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
hexdump.c include: move C/util-related declarations to cutils.h 2022-04-06 14:31:43 +02:00
host-utils.c Replace config-time define HOST_WORDS_BIGENDIAN 2022-04-06 10:50:37 +02:00
id.c
int128.c
iov.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
iova-tree.c util: add iova_tree_find_iova 2022-03-15 13:57:44 +08:00
keyval.c include: add qemu/keyval.h 2022-04-21 17:03:51 +04:00
lockcnt.c
log.c util/log: Support per-thread log files 2022-04-20 10:51:11 -07:00
main-loop.c util/event-loop-base: Introduce options to set the thread pool size 2022-05-09 10:43:23 +01:00
memalign.c osdep: Move memalign-related functions to their own header 2022-03-07 13:16:49 +00:00
memfd.c
meson.build meson, configure: move libgio test to meson 2022-04-28 08:52:22 +02:00
mmap-alloc.c Replace qemu_real_host_page variables with inlined functions 2022-04-06 10:50:38 +02:00
module.c
notify.c
nvdimm-utils.c
osdep.c softmmu: remove deprecated --enable-fips option 2022-04-26 16:12:25 +01:00
oslib-posix.c util: rename qemu_*block() socket functions 2022-05-03 15:53:20 +04:00
oslib-win32.c util: rename qemu_*block() socket functions 2022-05-03 15:53:20 +04:00
path.c
qdist.c
qemu-co-shared-resource.c
qemu-config.c remove -writeconfig 2022-04-28 08:51:56 +02:00
qemu-coroutine-io.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
qemu-coroutine-lock.c
qemu-coroutine-sleep.c
qemu-coroutine.c coroutine: use QEMU_DEFINE_STATIC_CO_TLS() 2022-05-04 15:55:23 +02:00
qemu-option.c
qemu-print.c
qemu-progress.c include: move progress API to qemu-progress.h 2022-04-06 14:31:43 +02:00
qemu-sockets.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
qemu-thread-common.h
qemu-thread-posix.c thread-posix: optimize qemu_sem_timedwait with zero timeout 2022-04-06 14:31:56 +02:00
qemu-thread-win32.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
qemu-timer-common.c
qemu-timer.c Use g_new() & friends where that makes obvious sense 2022-03-21 15:44:44 +01:00
qht.c osdep: Move memalign-related functions to their own header 2022-03-07 13:16:49 +00:00
qsp.c
range.c
rcu.c rcu: use coroutine TLS macros 2022-03-04 18:14:40 +01:00
readline.c
selfmap.c
stats64.c
sys_membarrier.c
systemd.c
thread-pool.c util/event-loop-base: Introduce options to set the thread pool size 2022-05-09 10:43:23 +01:00
throttle.c
timed-average.c
trace-events
trace.h
transactions.c
unicode.c
uri.c
userfaultfd.c
uuid.c
vfio-helpers.c Replace qemu_real_host_page variables with inlined functions 2022-04-06 10:50:38 +02:00
vhost-user-server.c util: rename qemu_*block() socket functions 2022-05-03 15:53:20 +04:00
yank.c