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. They are unlikely to have any users, since they were broken until 1.0 and (unlike slirp) we never had any report. I tested this under Wine, with a RHEL virtual machine booting just as glacially as before. "info blockstats" does show a slightly higher overhead, so I would like this to be tested on real Windows hosts. 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 improvements to block/raw-posix.c (such as asynchronous discard support) scheduled for 1.3. The platform independent APIs introduced by patches 4 and 5 are also useful for native AIO on Win32. 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 | 12 +- 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 | 297 ++++++++++++++- block/raw-win32.c | 187 +++++++--- 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 | 679 ----------------------------------- 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 file modificati, 1323 inserzioni(+), 978 rimozioni(-) 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.11.2