qemu-e2k/util
Stefan Hajnoczi 8c6b0356b5 util/async: make bh_aio_poll() O(1)
The ctx->first_bh list contains all created BHs, including those that
are not scheduled.  The list is iterated by the event loop and therefore
has O(n) time complexity with respected to the number of created BHs.

Rewrite BHs so that only scheduled or deleted BHs are enqueued.
Only BHs that actually require action will be iterated.

One semantic change is required: qemu_bh_delete() enqueues the BH and
therefore invokes aio_notify().  The
tests/test-aio.c:test_source_bh_delete_from_cb() test case assumed that
g_main_context_iteration(NULL, false) returns false after
qemu_bh_delete() but it now returns true for one iteration.  Fix up the
test case.

This patch makes aio_compute_timeout() and aio_bh_poll() drop from a CPU
profile reported by perf-top(1).  Previously they combined to 9% CPU
utilization when AioContext polling is commented out and the guest has 2
virtio-blk,num-queues=1 and 99 virtio-blk,num-queues=32 devices.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20200221093951.1414693-1-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2020-02-22 08:26:47 +00:00
..
aio-posix.c aio-posix: avoid reacquiring rcu_read_lock() when polling 2020-02-22 08:26:47 +00:00
aio-wait.c
aio-win32.c
aiocb.c
async.c util/async: make bh_aio_poll() O(1) 2020-02-22 08:26:47 +00:00
atomic64.c
base64.c
bitmap.c
bitops.c
buffer.c
bufferiszero.c
cacheinfo.c util/cacheinfo: fix crash when compiling with uClibc 2020-01-21 14:18:12 -10:00
compatfd.c
coroutine-sigaltstack.c
coroutine-ucontext.c
coroutine-win32.c
crc32c.c
cutils.c util/cutils: Turn FIXME comment into QEMU_BUILD_BUG_ON() 2019-12-18 12:26:25 +01:00
dbus.c util: add dbus helper unit 2020-01-06 18:41:32 +04:00
drm.c
envlist.c
error.c error: make Error **errp const where it is appropriate 2019-12-18 08:36:16 +01:00
event_notifier-posix.c event_notifier: avoid dandling file descriptor in event_notifier_cleanup 2019-10-24 19:26:52 +02:00
event_notifier-win32.c
fifo8.c
filemonitor-inotify.c
filemonitor-stub.c
getauxval.c
guest-random.c replay: record and replay random number sources 2020-01-07 12:08:39 +01:00
hbitmap.c hbitmap: handle set/reset with zero length 2019-10-28 11:22:30 +01:00
hexdump.c
host-utils.c
id.c chardev: generate an internal id when none given 2020-01-07 16:50:09 +04:00
iov.c util/ioc.c: try to reassure Coverity about qemu_iovec_init_extended 2019-10-08 14:27:35 +01:00
iova-tree.c
keyval.c
lockcnt.c
log.c linux-user: Use `qemu_log' for strace 2020-02-19 11:17:40 +01:00
main-loop.c Do not use %m in common code to print error messages 2019-10-22 09:38:42 +02:00
Makefile.objs mem: move nvdimm_device_list to utilities 2020-02-21 09:15:03 +11:00
memfd.c linux-user: add memfd_create 2019-09-11 08:46:17 +02:00
mmap-alloc.c core: replace getpagesize() with qemu_real_host_page_size 2019-10-26 15:38:06 +02:00
module.c util/module: fix a memory leak 2020-01-08 16:01:18 +01:00
notify.c xen / notify: introduce a new XenWatchList abstraction 2019-09-24 12:18:47 +01:00
nvdimm-utils.c mem: move nvdimm_device_list to utilities 2020-02-21 09:15:03 +11:00
osdep.c osdep: add qemu_unlink() 2020-01-02 16:29:32 +04:00
oslib-posix.c core: replace getpagesize() with qemu_real_host_page_size 2019-10-26 15:38:06 +02:00
oslib-win32.c core: replace getpagesize() with qemu_real_host_page_size 2019-10-26 15:38:06 +02:00
pagesize.c
path.c
qdist.c
qemu-co-shared-resource.c util: introduce SharedResource 2019-10-28 11:22:31 +01:00
qemu-config.c
qemu-coroutine-io.c yield_until_fd_readable: make it work with any AioContect 2019-10-25 14:38:29 +02:00
qemu-coroutine-lock.c
qemu-coroutine-sleep.c qemu-coroutine-sleep: Silence Coverity warning 2019-11-18 16:01:34 -06:00
qemu-coroutine.c
qemu-error.c error: Fix -msg timestamp default 2019-12-18 08:36:15 +01:00
qemu-openpty.c
qemu-option.c
qemu-print.c
qemu-progress.c
qemu-sockets.c util/qemu-sockets: fix keep_alive handling in inet_connect_saddr 2019-09-25 08:15:44 -05:00
qemu-thread-common.h
qemu-thread-posix.c qemu-thread: Add qemu_cond_timedwait 2019-09-16 17:13:06 +02:00
qemu-thread-win32.c qemu-thread: Add qemu_cond_timedwait 2019-09-16 17:13:06 +02:00
qemu-timer-common.c Remove support for CLOCK_MONOTONIC not being defined 2020-02-12 16:23:01 +01:00
qemu-timer.c qemu-timer: reuse MIN macro in qemu_timeout_ns_to_ms 2019-10-24 20:10:18 +02:00
qht.c
qsp.c qsp: Use WITH_RCU_READ_LOCK_GUARD 2019-12-17 19:33:52 +01:00
range.c
rcu.c
readline.c
stats64.c
sys_membarrier.c
systemd.c Do not use %m in common code to print error messages 2019-10-22 09:38:42 +02:00
thread-pool.c
throttle.c
timed-average.c
trace-events
unicode.c
uri.c
uuid.c
vfio-helpers.c Report stringified errno in VFIO related errors 2020-02-18 20:20:49 +01:00