mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
aio-posix: add io_uring fd monitoring implementation
The recent Linux io_uring API has several advantages over ppoll(2) and epoll(2). Details are given in the source code. Add an io_uring implementation and make it the default on Linux. Performance is the same as with epoll(7) but later patches add optimizations that take advantage of io_uring. It is necessary to change how aio_set_fd_handler() deals with deleting AioHandlers since removing monitored file descriptors is asynchronous in io_uring. fdmon_io_uring_remove() marks the AioHandler deleted and aio_set_fd_handler() will let it handle deletion in that case. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Link: https://lore.kernel.org/r/20200305170806.1313245-6-stefanha@redhat.com Message-Id: <20200305170806.1313245-6-stefanha@redhat.com>
This commit is contained in:
parent
b321051cf4
commit
73fd282e7b
6 changed files with 376 additions and 5 deletions
|
@ -14,6 +14,9 @@
|
|||
#ifndef QEMU_AIO_H
|
||||
#define QEMU_AIO_H
|
||||
|
||||
#ifdef CONFIG_LINUX_IO_URING
|
||||
#include <liburing.h>
|
||||
#endif
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
#include "qemu/thread.h"
|
||||
|
@ -96,6 +99,8 @@ struct BHListSlice {
|
|||
QSIMPLEQ_ENTRY(BHListSlice) next;
|
||||
};
|
||||
|
||||
typedef QSLIST_HEAD(, AioHandler) AioHandlerSList;
|
||||
|
||||
struct AioContext {
|
||||
GSource source;
|
||||
|
||||
|
@ -181,6 +186,10 @@ struct AioContext {
|
|||
* locking.
|
||||
*/
|
||||
struct LuringState *linux_io_uring;
|
||||
|
||||
/* State for file descriptor monitoring using Linux io_uring */
|
||||
struct io_uring fdmon_io_uring;
|
||||
AioHandlerSList submit_list;
|
||||
#endif
|
||||
|
||||
/* TimerLists for calling timers - one per clock type. Has its own
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue