[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH RFC 02/14] qemu aio: prepare for supporting selectiv
From: |
Ming Lei |
Subject: |
[Qemu-devel] [PATCH RFC 02/14] qemu aio: prepare for supporting selective bypass coroutine |
Date: |
Thu, 17 Jul 2014 00:31:09 +0800 |
If device thinks that it isn't necessary to apply coroutine
in its performance sensitive path, it can call
qemu_aio_set_bypass_co(false) to bypass the coroutine which
has supported bypass mode and just call the function directly.
One example is virtio-blk dataplane.
Signed-off-by: Ming Lei <address@hidden>
---
async.c | 1 +
include/block/aio.h | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/async.c b/async.c
index 34af0b2..251a074 100644
--- a/async.c
+++ b/async.c
@@ -293,6 +293,7 @@ AioContext *aio_context_new(void)
(EventNotifierHandler *)
event_notifier_test_and_clear);
timerlistgroup_init(&ctx->tlg, aio_timerlist_notify, ctx);
+ qemu_aio_set_bypass_co(ctx, false);
return ctx;
}
diff --git a/include/block/aio.h b/include/block/aio.h
index c23de3c..48d827e 100644
--- a/include/block/aio.h
+++ b/include/block/aio.h
@@ -87,6 +87,9 @@ struct AioContext {
/* TimerLists for calling timers - one per clock type */
QEMUTimerListGroup tlg;
+
+ /* support selective bypass coroutine */
+ bool bypass_co;
};
/* Used internally to synchronize aio_poll against qemu_bh_schedule. */
@@ -303,4 +306,14 @@ static inline void aio_timer_init(AioContext *ctx,
timer_init(ts, ctx->tlg.tl[type], scale, cb, opaque);
}
+static inline void qemu_aio_set_bypass_co(AioContext *ctx, bool bypass)
+{
+ ctx->bypass_co = bypass;
+}
+
+static inline bool qemu_aio_get_bypass_co(AioContext *ctx)
+{
+ return ctx->bypass_co;
+}
+
#endif
--
1.7.9.5
- [Qemu-devel] [PATCH RFC 00/14] dataplane: performance optimization and multi virtqueue, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 01/14] qemu coroutine: support bypass mode, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 02/14] qemu aio: prepare for supporting selective bypass coroutine,
Ming Lei <=
- [Qemu-devel] [PATCH RFC 03/14] block: support to bypass qemu coroutinue, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 04/14] Revert "raw-posix: drop raw_get_aio_fd() since it is no longer used", Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 05/14] dataplane: enable selective bypassing coroutine, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 06/14] qemu/obj_pool.h: introduce object allocation pool, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 07/14] dataplane: use object pool to speed up allocation for virtio blk request, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 08/14] linux-aio: fix submit aio as a batch, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 09/14] linux-aio: increase max event to 256, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 10/14] linux-aio: remove 'node' from 'struct qemu_laiocb', Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 11/14] hw/virtio-pci: introduce num_queues property, Ming Lei, 2014/07/16
- [Qemu-devel] [PATCH RFC 12/14] hw/virtio/virtio-blk.h: introduce VIRTIO_BLK_F_MQ, Ming Lei, 2014/07/16