mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
Replace posix-aio with custom thread pool
glibc implements posix-aio as a thread pool and imposes a number of limitations. 1) it limits one request per-file descriptor. we hack around this by dup()'ing file descriptors which is hideously ugly 2) it's impossible to add new interfaces and we need a vectored read/write operation to properly support a zero-copy API. What has been suggested to me by glibc folks, is to implement whatever new interfaces we want and then it can eventually be proposed for standardization. This requires that we implement our own posix-aio implementation though. This patch implements posix-aio using pthreads. It immediately eliminates the need for fd pooling. It performs at least as well as the current posix-aio code (in some circumstances, even better). Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5996 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
8de2410635
commit
3c529d9359
6 changed files with 287 additions and 106 deletions
20
configure
vendored
20
configure
vendored
|
@ -149,7 +149,6 @@ FreeBSD)
|
|||
bsd="yes"
|
||||
audio_drv_list="oss"
|
||||
audio_possible_drivers="oss sdl esd pa"
|
||||
aio_lib="-lpthread"
|
||||
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
|
||||
kqemu="yes"
|
||||
fi
|
||||
|
@ -159,7 +158,6 @@ bsd="yes"
|
|||
audio_drv_list="oss"
|
||||
audio_possible_drivers="oss sdl esd"
|
||||
oss_lib="-lossaudio"
|
||||
aio_lib="-lrt -lpthread"
|
||||
;;
|
||||
OpenBSD)
|
||||
bsd="yes"
|
||||
|
@ -167,7 +165,6 @@ openbsd="yes"
|
|||
audio_drv_list="oss"
|
||||
audio_possible_drivers="oss sdl esd"
|
||||
oss_lib="-lossaudio"
|
||||
aio_lib="-lpthread"
|
||||
;;
|
||||
Darwin)
|
||||
bsd="yes"
|
||||
|
@ -178,7 +175,6 @@ audio_drv_list="coreaudio"
|
|||
audio_possible_drivers="coreaudio sdl fmod"
|
||||
OS_CFLAGS="-mdynamic-no-pic"
|
||||
OS_LDFLAGS="-framework CoreFoundation -framework IOKit"
|
||||
aio_lib="-lpthread"
|
||||
;;
|
||||
SunOS)
|
||||
solaris="yes"
|
||||
|
@ -527,15 +523,6 @@ if test "$mingw32" = "yes" ; then
|
|||
bsd_user="no"
|
||||
fi
|
||||
|
||||
if [ "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
|
||||
AIOLIBS=
|
||||
elif [ "$bsd" = "yes" ]; then
|
||||
AIOLIBS="$aio_lib"
|
||||
else
|
||||
# Some Linux architectures (e.g. s390) don't imply -lpthread automatically.
|
||||
AIOLIBS="-lrt -lpthread"
|
||||
fi
|
||||
|
||||
if test ! -x "$(which cgcc 2>/dev/null)"; then
|
||||
sparse="no"
|
||||
fi
|
||||
|
@ -954,14 +941,17 @@ fi
|
|||
|
||||
##########################################
|
||||
# AIO probe
|
||||
AIOLIBS=""
|
||||
|
||||
if test "$aio" = "yes" ; then
|
||||
aio=no
|
||||
cat > $TMPC << EOF
|
||||
#include <aio.h>
|
||||
int main(void) { return aio_write(NULL); }
|
||||
#include <pthread.h>
|
||||
int main(void) { pthread_mutex_t lock; return 0; }
|
||||
EOF
|
||||
if $cc $ARCH_CFLAGS -o $TMPE $AIOLIBS $TMPC 2> /dev/null ; then
|
||||
aio=yes
|
||||
AIOLIBS="-lpthread"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue