This patch series is part 2 in my EventNotifier/AIO improvements for QEMU 1.2. It extends use of EventNotifier to the main loop and AIO subsystems. A new API using EventNotifier is added to aio.c and a new portable thread pool is introduced (based on code from posix-aio-compat.c, mostly) that uses this API. raw-posix.c is converted to use the new thread pool, and support for asynchronous I/O is finally added to Win32 as well.
The network drivers (curl, libiscsi, nbd) have to be disabled under Windows. I tested this under Wine, with a RHEL virtual machine booting just as glacially as before. However, "info blockstats" does show a slightly higher overhead, so I would like this to be tested on real Windows hosts. However, even if the result is negative, I would prefer to keep the early parts (i.e. drop only the last patch) since they are a prerequisite for more improvements to block/raw-posix.c (such as asynchronous discard support). Paolo Bonzini (12): event_notifier: enable it to use pipes event_notifier: add Win32 implementation main-loop: use event notifiers aio: provide platform-independent API aio: add Win32 implementation linux-aio: use event notifiers qemu-thread: add QemuSemaphore aio: add generic thread-pool facility block: switch posix-aio-compat to threadpool raw: merge posix-aio-compat.c into block/raw-posix.c raw-posix: rename raw-posix-aio.h, hide unavailable prototypes raw-win32: add emulated AIO support Makefile.objs | 13 +- aio.c => aio-posix.c | 9 + aio-win32.c | 177 +++++++++ block/Makefile.objs | 6 +- block/{raw-posix-aio.h => raw-aio.h} | 19 +- block/raw-posix.c | 301 ++++++++++++++- block/raw-win32.c | 189 +++++++--- event_notifier-posix.c | 118 ++++++ event_notifier-win32.c | 59 +++ event_notifier.c | 67 ---- event_notifier.h | 20 +- linux-aio.c | 51 +-- main-loop.c | 106 +----- oslib-posix.c | 31 -- posix-aio-compat.c | 681 ---------------------------------- qemu-aio.h | 19 +- qemu-common.h | 1 - qemu-thread-posix.c | 74 ++++ qemu-thread-posix.h | 5 + qemu-thread-win32.c | 35 ++ qemu-thread-win32.h | 4 + qemu-thread.h | 7 + thread-pool.c | 279 ++++++++++++++ thread-pool.h | 34 ++ trace-events | 5 + 25 files changed, 1329 insertions(+), 981 deletions(-) rename aio.c => aio-posix.c (92%) create mode 100644 aio-win32.c rename block/{raw-posix-aio.h => raw-aio.h} (62%) create mode 100644 event_notifier-posix.c create mode 100644 event_notifier-win32.c delete mode 100644 event_notifier.c delete mode 100644 posix-aio-compat.c create mode 100644 thread-pool.c create mode 100644 thread-pool.h -- 1.7.10.4