From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43276) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T0HLZ-0002nw-6O for qemu-devel@nongnu.org; Sat, 11 Aug 2012 15:27:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T0HLX-0006v5-Ul for qemu-devel@nongnu.org; Sat, 11 Aug 2012 15:27:41 -0400 Received: from v220110690675601.yourvserver.net ([78.47.199.172]:34087) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T0HLX-0006ux-KZ for qemu-devel@nongnu.org; Sat, 11 Aug 2012 15:27:39 -0400 Message-ID: <5026B21A.6000701@weilnetz.de> Date: Sat, 11 Aug 2012 21:27:22 +0200 From: Stefan Weil MIME-Version: 1.0 References: <1344338247-17567-1-git-send-email-pbonzini@redhat.com> In-Reply-To: <1344338247-17567-1-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 00/12] Portable thread-pool/AIO, Win32 emulated AIO List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: aliguori@linux.vnet.ibm.com, qemu-devel@nongnu.org, stefanha@linux.vnet.ibm.com Am 07.08.2012 13:17, schrieb Paolo Bonzini: > 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 > Hi, I needed these changes for compilation with MinGW32: diff --git a/block/raw-posix.c b/block/raw-posix.c index ad65604..c948f97 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -280,8 +280,10 @@ static int raw_open_common(BlockDriverState *bs, const char *filename, return 0; +#ifdef CONFIG_LINUX_AIO out_free_buf: qemu_vfree(s->aligned_buf); +#endif out_close: close(fd); return -errno; diff --git a/block/raw-win32.c b/block/raw-win32.c index 7a5b86f..ef5e200 100644 --- a/block/raw-win32.c +++ b/block/raw-win32.c @@ -42,7 +42,7 @@ typedef struct RawWin32AIOData { struct iovec *aio_iov; int aio_niov; size_t aio_nbytes; - off_t aio_offset; + off64_t aio_offset; int aio_type; } RawWin32AIOData; Label out_free_buf is only used with CONFIG_LINUX_AIO. off_t is always 32 bit with MinGW header files, but we want support for large files, so off64_t is a better choice here. It also avoids a compiler warning when the value is right shifted by 32 bits. I noticed some messages from checkpatch.pl. Some (but not all) of them were caused by the renamed file. Maybe this file should be fixed before it is renamed. Regards, Stefan