[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC 0/3] iothread: release iothread around aio_poll
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH RFC 0/3] iothread: release iothread around aio_poll |
Date: |
Fri, 20 Feb 2015 17:26:49 +0100 |
Right now, iothreads are relying on a "contention callback" to release
the AioContext (e.g. for block device operations or to do bdrv_drain_all).
This is necessary because aio_poll needs to be called within an
aio_context_acquire.
This series drops this requirement for aio_poll, with two effects:
1) it makes it possible to remove the "contention callback" in RFifoLock
(and possibly to convert it to a normal GRecMutex, which is why I am not
including a patch to remove callbacks from RFifoLock).
2) it makes it possible to start work around making critical sections
for the block layer fine-grained.
In order to do this, some data is moved from AioContext to local storage.
Stack allocation has size limitations, so thread-local storage is used
instead. There are no reentrancy problems because the data is only live
throughout a small part of aio_poll, and in particular not during the
invocation of callbacks.
Comments?
Paolo
Paolo Bonzini (3):
aio-posix: move pollfds to thread-local storage
AioContext: acquire/release AioContext during aio_poll
iothread: release iothread around aio_poll
aio-posix.c | 86 ++++++++++++++++++++++++++++++++++++++++-------------
aio-win32.c | 8 +++++
async.c | 10 +------
include/block/aio.h | 18 +++++------
iothread.c | 11 ++-----
tests/test-aio.c | 21 +++++++------
6 files changed, 96 insertions(+), 58 deletions(-)
--
2.3.0
- [Qemu-devel] [PATCH RFC 0/3] iothread: release iothread around aio_poll,
Paolo Bonzini <=