Currently, the timers run on iothread within BQL, so virtio-block dataplane can
not use throttle,
as Stefan Hajnoczi pointed out in his patches to port dataplane onto block
layer.(Thanks, Stefan)
To enable this feature, I plan to enable timers to run on AioContext's thread.
And maybe in future, hpet can run with its dedicated thread too.
Also, I see Alex Bligh is on the same effort by another method,(it is a good
idea)
"[RFC] aio/async: Add timed bottom-halves".
So I think it is better to post my series for discussion, although I have not
thought
very clearly point, e.g. sigaction
This series ports two parts of timer stuff onto AioContext: alarm timer and
timer list.
Currently I worked based on Stefanha's git tree
https://github.com/stefanha/qemu.git dataplane-block-layer.
---
Open issue:
The thread safe problem on timer list. To resolve that, I plan to adopt the
bh model.
(Not sure about this, maybe Stefan's solution in another thread is better)
Although leave most of the race issue unresolved, patch 4 has tried to fix one
of
them as Jan Kiszka points out that vm_clock can be read outside BQL, thanks Jan
:)
Liu Ping Fan (8):
timer: associate alarm_timer with AioContext
timer: pick out timer list info from QemuClock
timer: make timers_state static
timer: protect timers_state with lock
timer: associate timer with AioContext
timer: run timers on aio_poll
block: associate BlockDriverState with AioContext
block: enable throttle with aiocontext
aio-posix.c | 2 +
async.c | 12 ++
block.c | 13 ++-
cpus.c | 29 ++++-
hw/block/dataplane/virtio-blk.c | 1 +
include/block/aio.h | 14 +++
include/block/block.h | 1 +
include/block/block_int.h | 1 +
include/qemu/timer.h | 24 +++-
main-loop.c | 6 -
qemu-timer.c | 237 +++++++++++++++++++++++++++-------------
11 files changed, 253 insertions(+), 87 deletions(-)
--
1.8.1.4