mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
linux-aio: share one LinuxAioState within an AioContext
This has better performance because it executes fewer system calls and does not use a bottom half per disk. Originally proposed by Ming Lei. [Changed #include "raw-aio.h" to "block/raw-aio.h" in win32-aio.c to fix build error as reported by Peter Maydell <peter.maydell@linaro.org>. --Stefan] Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 1467650000-51385-1-git-send-email-pbonzini@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> squash! linux-aio: share one LinuxAioState within an AioContext
This commit is contained in:
parent
4e90ccc28e
commit
0187f5c9cb
7 changed files with 58 additions and 111 deletions
|
@ -47,6 +47,9 @@ typedef struct AioHandler AioHandler;
|
|||
typedef void QEMUBHFunc(void *opaque);
|
||||
typedef void IOHandler(void *opaque);
|
||||
|
||||
struct ThreadPool;
|
||||
struct LinuxAioState;
|
||||
|
||||
struct AioContext {
|
||||
GSource source;
|
||||
|
||||
|
@ -119,6 +122,13 @@ struct AioContext {
|
|||
/* Thread pool for performing work and receiving completion callbacks */
|
||||
struct ThreadPool *thread_pool;
|
||||
|
||||
#ifdef CONFIG_LINUX_AIO
|
||||
/* State for native Linux AIO. Uses aio_context_acquire/release for
|
||||
* locking.
|
||||
*/
|
||||
struct LinuxAioState *linux_aio;
|
||||
#endif
|
||||
|
||||
/* TimerLists for calling timers - one per clock type */
|
||||
QEMUTimerListGroup tlg;
|
||||
|
||||
|
@ -335,6 +345,9 @@ GSource *aio_get_g_source(AioContext *ctx);
|
|||
/* Return the ThreadPool bound to this AioContext */
|
||||
struct ThreadPool *aio_get_thread_pool(AioContext *ctx);
|
||||
|
||||
/* Return the LinuxAioState bound to this AioContext */
|
||||
struct LinuxAioState *aio_get_linux_aio(AioContext *ctx);
|
||||
|
||||
/**
|
||||
* aio_timer_new:
|
||||
* @ctx: the aio context
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue