* [Qemu-devel] [PATCH 0/3] null driver patches @ 2015-03-30 9:23 Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 1/3] block/null: Latency simulation by adding new option "latency-ns" Fam Zheng ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Fam Zheng @ 2015-03-30 9:23 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, qemu-block, Stefan Hajnoczi The first patch was the same one from 03/18 which is reviewed by Eric. The second patch allows testing commit to a null image. The third adds a stanza to MAINTAINERS. Fam Zheng (3): block/null: Latency simulation by adding new option "latency-ns" block/null: Support reopen MAINTAINERS: Add Fam Zheng as Null block driver maintainer MAINTAINERS | 6 +++++ block/null.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++----- qapi/block-core.json | 5 +++- 3 files changed, 71 insertions(+), 7 deletions(-) -- 1.9.3 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 1/3] block/null: Latency simulation by adding new option "latency-ns" 2015-03-30 9:23 [Qemu-devel] [PATCH 0/3] null driver patches Fam Zheng @ 2015-03-30 9:23 ` Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 2/3] block/null: Support reopen Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer Fam Zheng 2 siblings, 0 replies; 7+ messages in thread From: Fam Zheng @ 2015-03-30 9:23 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, qemu-block, Stefan Hajnoczi Aio context switch should just work because the requests will be drained, so the scheduled timer(s) on the old context will be freed. Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> --- block/null.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++------ qapi/block-core.json | 5 ++++- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/block/null.c b/block/null.c index ec2bd27..fa56eac 100644 --- a/block/null.c +++ b/block/null.c @@ -12,8 +12,11 @@ #include "block/block_int.h" +#define NULL_OPT_LATENCY "latency-ns" + typedef struct { int64_t length; + int64_t latency_ns; } BDRVNullState; static QemuOptsList runtime_opts = { @@ -30,6 +33,12 @@ static QemuOptsList runtime_opts = { .type = QEMU_OPT_SIZE, .help = "size of the null block", }, + { + .name = NULL_OPT_LATENCY, + .type = QEMU_OPT_NUMBER, + .help = "nanoseconds (approximated) to wait " + "before completing request", + }, { /* end of list */ } }, }; @@ -39,13 +48,20 @@ static int null_file_open(BlockDriverState *bs, QDict *options, int flags, { QemuOpts *opts; BDRVNullState *s = bs->opaque; + int ret = 0; opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); qemu_opts_absorb_qdict(opts, options, &error_abort); s->length = qemu_opt_get_size(opts, BLOCK_OPT_SIZE, 1 << 30); + s->latency_ns = + qemu_opt_get_number(opts, NULL_OPT_LATENCY, 0); + if (s->latency_ns < 0) { + error_setg(errp, "latency-ns is invalid"); + ret = -EINVAL; + } qemu_opts_del(opts); - return 0; + return ret; } static void null_close(BlockDriverState *bs) @@ -58,28 +74,41 @@ static int64_t null_getlength(BlockDriverState *bs) return s->length; } +static coroutine_fn int null_co_common(BlockDriverState *bs) +{ + BDRVNullState *s = bs->opaque; + + /* Only emulate latency after vcpu is running. */ + if (s->latency_ns && qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) > 0) { + co_aio_sleep_ns(bdrv_get_aio_context(bs), QEMU_CLOCK_VIRTUAL, + s->latency_ns); + } + return 0; +} + static coroutine_fn int null_co_readv(BlockDriverState *bs, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov) { - return 0; + return null_co_common(bs); } static coroutine_fn int null_co_writev(BlockDriverState *bs, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov) { - return 0; + return null_co_common(bs); } static coroutine_fn int null_co_flush(BlockDriverState *bs) { - return 0; + return null_co_common(bs); } typedef struct { BlockAIOCB common; QEMUBH *bh; + QEMUTimer timer; } NullAIOCB; static const AIOCBInfo null_aiocb_info = { @@ -94,15 +123,33 @@ static void null_bh_cb(void *opaque) qemu_aio_unref(acb); } +static void null_timer_cb(void *opaque) +{ + NullAIOCB *acb = opaque; + acb->common.cb(acb->common.opaque, 0); + timer_deinit(&acb->timer); + qemu_aio_unref(acb); +} + static inline BlockAIOCB *null_aio_common(BlockDriverState *bs, BlockCompletionFunc *cb, void *opaque) { NullAIOCB *acb; + BDRVNullState *s = bs->opaque; acb = qemu_aio_get(&null_aiocb_info, bs, cb, opaque); - acb->bh = aio_bh_new(bdrv_get_aio_context(bs), null_bh_cb, acb); - qemu_bh_schedule(acb->bh); + /* Only emulate latency after vcpu is running. */ + if (s->latency_ns && qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) > 0) { + aio_timer_init(bdrv_get_aio_context(bs), &acb->timer, + QEMU_CLOCK_VIRTUAL, SCALE_NS, + null_timer_cb, acb); + timer_mod_ns(&acb->timer, + qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + s->latency_ns); + } else { + acb->bh = aio_bh_new(bdrv_get_aio_context(bs), null_bh_cb, acb); + qemu_bh_schedule(acb->bh); + } return &acb->common; } diff --git a/qapi/block-core.json b/qapi/block-core.json index 7873084..e158a7c 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1310,11 +1310,14 @@ # Driver specific block device options for the null backend. # # @size: #optional size of the device in bytes. +# @latency-ns: #optional emulated latency (in nanoseconds) in processing +# requests. Default to zero which completes requests immediately. +# (Since 2.4) # # Since: 2.2 ## { 'type': 'BlockdevOptionsNull', - 'data': { '*size': 'int' } } + 'data': { '*size': 'int', '*latency-ns': 'uint64' } } ## # @BlockdevOptionsVVFAT -- 1.9.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/3] block/null: Support reopen 2015-03-30 9:23 [Qemu-devel] [PATCH 0/3] null driver patches Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 1/3] block/null: Latency simulation by adding new option "latency-ns" Fam Zheng @ 2015-03-30 9:23 ` Fam Zheng 2015-03-30 12:54 ` Eric Blake 2015-03-30 9:23 ` [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer Fam Zheng 2 siblings, 1 reply; 7+ messages in thread From: Fam Zheng @ 2015-03-30 9:23 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, qemu-block, Stefan Hajnoczi Reopen is used in block-commit. With this always-succeed operation, it is now possible to test committing to a null drive, by specifying "null-aio://" or "null-co://" as the backing image when creating the qcow2 image. Signed-off-by: Fam Zheng <famz@redhat.com> --- block/null.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/block/null.c b/block/null.c index fa56eac..e0cb612 100644 --- a/block/null.c +++ b/block/null.c @@ -178,6 +178,12 @@ static BlockAIOCB *null_aio_flush(BlockDriverState *bs, return null_aio_common(bs, cb, opaque); } +static int null_reopen_prepare(BDRVReopenState *reopen_state, + BlockReopenQueue *queue, Error **errp) +{ + return 0; +} + static BlockDriver bdrv_null_co = { .format_name = "null-co", .protocol_name = "null-co", @@ -190,6 +196,7 @@ static BlockDriver bdrv_null_co = { .bdrv_co_readv = null_co_readv, .bdrv_co_writev = null_co_writev, .bdrv_co_flush_to_disk = null_co_flush, + .bdrv_reopen_prepare = null_reopen_prepare, }; static BlockDriver bdrv_null_aio = { @@ -204,6 +211,7 @@ static BlockDriver bdrv_null_aio = { .bdrv_aio_readv = null_aio_readv, .bdrv_aio_writev = null_aio_writev, .bdrv_aio_flush = null_aio_flush, + .bdrv_reopen_prepare = null_reopen_prepare, }; static void bdrv_null_init(void) -- 1.9.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] block/null: Support reopen 2015-03-30 9:23 ` [Qemu-devel] [PATCH 2/3] block/null: Support reopen Fam Zheng @ 2015-03-30 12:54 ` Eric Blake 0 siblings, 0 replies; 7+ messages in thread From: Eric Blake @ 2015-03-30 12:54 UTC (permalink / raw) To: Fam Zheng, qemu-devel; +Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block [-- Attachment #1: Type: text/plain, Size: 558 bytes --] On 03/30/2015 03:23 AM, Fam Zheng wrote: > Reopen is used in block-commit. With this always-succeed operation, it > is now possible to test committing to a null drive, by specifying > "null-aio://" or "null-co://" as the backing image when creating the > qcow2 image. > > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > block/null.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 604 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer 2015-03-30 9:23 [Qemu-devel] [PATCH 0/3] null driver patches Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 1/3] block/null: Latency simulation by adding new option "latency-ns" Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 2/3] block/null: Support reopen Fam Zheng @ 2015-03-30 9:23 ` Fam Zheng 2015-03-30 12:53 ` Eric Blake 2 siblings, 1 reply; 7+ messages in thread From: Fam Zheng @ 2015-03-30 9:23 UTC (permalink / raw) To: qemu-devel; +Cc: Kevin Wolf, qemu-block, Stefan Hajnoczi Signed-off-by: Fam Zheng <famz@redhat.com> --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index d7e9ba2..30073a3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1172,6 +1172,12 @@ S: Supported F: block/gluster.c T: git git://github.com/codyprime/qemu-kvm-jtc.git block +Null +M: Fam Zheng <famz@redhat.com> +L: qemu-block@nongnu.org +S: Supported +F: block/null.c + Bootdevice M: Gonglei <arei.gonglei@huawei.com> S: Maintained -- 1.9.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer 2015-03-30 9:23 ` [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer Fam Zheng @ 2015-03-30 12:53 ` Eric Blake 2015-04-01 1:24 ` Fam Zheng 0 siblings, 1 reply; 7+ messages in thread From: Eric Blake @ 2015-03-30 12:53 UTC (permalink / raw) To: Fam Zheng, qemu-devel; +Cc: Kevin Wolf, Stefan Hajnoczi, qemu-block [-- Attachment #1: Type: text/plain, Size: 826 bytes --] On 03/30/2015 03:23 AM, Fam Zheng wrote: > Signed-off-by: Fam Zheng <famz@redhat.com> > --- > MAINTAINERS | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/MAINTAINERS b/MAINTAINERS > index d7e9ba2..30073a3 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -1172,6 +1172,12 @@ S: Supported > F: block/gluster.c > T: git git://github.com/codyprime/qemu-kvm-jtc.git block > > +Null I wonder if "Null Block Driver" would be any easier to read. > +M: Fam Zheng <famz@redhat.com> > +L: qemu-block@nongnu.org > +S: Supported > +F: block/null.c Reviewed-by: Eric Blake <eblake@redhat.com> > + > Bootdevice > M: Gonglei <arei.gonglei@huawei.com> > S: Maintained > -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 604 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer 2015-03-30 12:53 ` Eric Blake @ 2015-04-01 1:24 ` Fam Zheng 0 siblings, 0 replies; 7+ messages in thread From: Fam Zheng @ 2015-04-01 1:24 UTC (permalink / raw) To: Eric Blake; +Cc: Kevin Wolf, qemu-block, qemu-devel, Stefan Hajnoczi On Mon, 03/30 06:53, Eric Blake wrote: > On 03/30/2015 03:23 AM, Fam Zheng wrote: > > Signed-off-by: Fam Zheng <famz@redhat.com> > > --- > > MAINTAINERS | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/MAINTAINERS b/MAINTAINERS > > index d7e9ba2..30073a3 100644 > > --- a/MAINTAINERS > > +++ b/MAINTAINERS > > @@ -1172,6 +1172,12 @@ S: Supported > > F: block/gluster.c > > T: git git://github.com/codyprime/qemu-kvm-jtc.git block > > > > +Null > > I wonder if "Null Block Driver" would be any easier to read. Yes, I'll change it. Fam > > > +M: Fam Zheng <famz@redhat.com> > > +L: qemu-block@nongnu.org > > +S: Supported > > +F: block/null.c > > Reviewed-by: Eric Blake <eblake@redhat.com> > > > + > > Bootdevice > > M: Gonglei <arei.gonglei@huawei.com> > > S: Maintained > > > > -- > Eric Blake eblake redhat com +1-919-301-3266 > Libvirt virtualization library http://libvirt.org > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-04-01 1:24 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-03-30 9:23 [Qemu-devel] [PATCH 0/3] null driver patches Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 1/3] block/null: Latency simulation by adding new option "latency-ns" Fam Zheng 2015-03-30 9:23 ` [Qemu-devel] [PATCH 2/3] block/null: Support reopen Fam Zheng 2015-03-30 12:54 ` Eric Blake 2015-03-30 9:23 ` [Qemu-devel] [PATCH 3/3] MAINTAINERS: Add Fam Zheng as Null block driver maintainer Fam Zheng 2015-03-30 12:53 ` Eric Blake 2015-04-01 1:24 ` Fam Zheng
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).