multiwrite patches for 2.2
v2 cover multiwrite patches for 2.2
This adds some preparing patches for upcoming multiwrite modifications. I will leave the dangerous patches for after 2.2 release.
v1->v2: - incorporated Max's comments, but did not display the default
value for write merging (Patch 3) in the HMP since we do not do it for other commands. I would change this when the default changes.
- added an iotest for the write-merging cmdline parameter [Max]
- fixed iotest 067 output
Peter Lieven (6):
block: add accounting for merged requests
block: introduce bdrv_runtime_opts
block: add a knob to disable multiwrite_merge hw/virtio-blk: add a constant for max number of merged requests
block: add qemu-iotest for write-merge parameter
block: fix qemu-iotest reference output for test 067
block.c | 49 ++++++++++++++++++-- block/accounting.c | 7 +++ block/qapi.c | 3 ++ hmp.c | 10 +++- hw/block/virtio-blk.c | 4 +- include/block/accounting.h | 3 ++ include/block/block_int.h | 1 + qapi/block-core.json | 19 +++++++- qemu-options.hx | 1 + qmp-commands.hx | 2 + tests/qemu-iotests/067.out | 10 ++-- tests/qemu-iotests/108 | 108 ++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/108.out | 63 ++++++++++++++++++++++++++ tests/qemu-iotests/group | 1 + 14 files changed, 267 insertions(+), 14 deletions(-) create mode 100755 tests/qemu-iotests/108 create mode 100644 tests/qemu-iotests/108.out
Signature · 1 line
1.7.9.5
PATCH v2 1/6 block: add accounting for merged requests
--- block.c | 2 ++ block/accounting.c | 7 +++++++ block/qapi.c | 2 ++ hmp.c | 6 +++++- include/block/accounting.h | 3 +++ qapi/block-core.json | 9 ++++++++- 6 files changed, 27 insertions(+), 2 deletions(-)
block.c +2 -0
@@ -4585,6 +4585,8 @@ static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs, } } +block_merge_done (&bs->stats,BLOCK_ACCT_WRITE , num_reqs - outidx -1 ); +return outidx +1 ; }
block/accounting.c +7 -0
@@ -52,3 +52,10 @@ void block_acct_highest_sector(BlockAcctStats *stats, int64_t sector_num, stats->wr_highest_sector = sector_num + nb_sectors -1 ; } } + +void block_merge_done (BlockAcctStats *stats,enum BlockAcctType type, +int num_requests) +{ +assert (type <BLOCK_MAX_IOTYPE ); + stats->merged[type] += num_requests; +}
block/qapi.c +2 -0
@@ -337,6 +337,8 @@ static BlockStats *bdrv_query_stats(const BlockDriverState *bs) s->stats->wr_bytes = bs->stats.nr_bytes[BLOCK_ACCT_WRITE ]; s->stats->rd_operations = bs->stats.nr_ops[BLOCK_ACCT_READ ]; s->stats->wr_operations = bs->stats.nr_ops[BLOCK_ACCT_WRITE ]; + s->stats->rd_merged = bs->stats.merged[BLOCK_ACCT_READ ]; + s->stats->wr_merged = bs->stats.merged[BLOCK_ACCT_WRITE ]; s->stats->wr_highest_offset = bs->stats.wr_highest_sector *BDRV_SECTOR_SIZE ; s->stats->flush_operations = bs->stats.nr_ops[BLOCK_ACCT_FLUSH ];
hmp.c +5 -1
@@ -419,6 +419,8 @@ void hmp_info_blockstats(Monitor *mon, const QDict *qdict)" wr_total_time_ns=%" PRId64" rd_total_time_ns=%" PRId64" flush_total_time_ns=%" PRId64 +" rd_merged=%" PRId64 +" wr_merged=%" PRId64"\n" , stats->value->stats->rd_bytes, stats->value->stats->wr_bytes,
@@ -427,7 +429,9 @@ void hmp_info_blockstats(Monitor *mon, const QDict *qdict) stats->value->stats->flush_operations, stats->value->stats->wr_total_time_ns, stats->value->stats->rd_total_time_ns, - stats->value->stats->flush_total_time_ns); + stats->value->stats->flush_total_time_ns, + stats->value->stats->rd_merged, + stats->value->stats->wr_merged); }qapi_free_BlockStatsList (stats_list);
include/block/accounting.h +3 -0
@@ -39,6 +39,7 @@ typedef struct BlockAcctStats {uint64_t nr_bytes[BLOCK_MAX_IOTYPE ];uint64_t nr_ops[BLOCK_MAX_IOTYPE ];uint64_t total_time_ns[BLOCK_MAX_IOTYPE ]; +uint64_t merged[BLOCK_MAX_IOTYPE ];uint64_t wr_highest_sector; } BlockAcctStats;
@@ -53,5 +54,7 @@ void block_acct_start(BlockAcctStats *stats, BlockAcctCookie *cookie,void block_acct_done (BlockAcctStats *stats,BlockAcctCookie *cookie);void block_acct_highest_sector (BlockAcctStats *stats,int64_t sector_num,unsigned int nb_sectors); +void block_merge_done (BlockAcctStats *stats,enum BlockAcctType type, +int num_requests);#endif
qapi/block-core.json +8 -1
@@ -392,13 +392,20 @@ # growable sparse files (like qcow2) that are used on top # of a physical device. # +# @rd_merged: Reserved (Since 2.2) +# +# @wr_merged: Number of requests that have been merged into another request +# while performing a multiwrite_merge. (Since 2.2) +# +# # Since: 0.14.0 ## { 'type': 'BlockDeviceStats', 'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'rd_operations': 'int', 'wr_operations': 'int', 'flush_operations': 'int', 'flush_total_time_ns': 'int', 'wr_total_time_ns': 'int', - 'rd_total_time_ns': 'int', 'wr_highest_offset': 'int' } } + 'rd_total_time_ns': 'int', 'wr_highest_offset': 'int', + 'rd_merged': 'int', 'wr_merged': 'int' } } ## # @BlockStats:
Signature · 1 line
1.7.9.5
Re: [Qemu-devel] [PATCHv2 1/6] block: add accounting for merged requests
Quoted 14 lines · Peter Lieven
Signed-off-by Peter Lieven <[email protected]>Reviewed-by Max Reitz <[email protected]>--- block.c | 2 ++ block/accounting.c | 7 +++++++ block/qapi.c | 2 ++ hmp.c | 6 +++++- include/block/accounting.h | 3 +++ qapi/block-core.json | 9 ++++++++- 6 files changed, 27 insertions(+), 2 deletions(-)+++
b/qapi/block-core.json
qapi/block-core.json line 395
Quoted 4 lines
qapi/block-core.json +1
-0@@ -392,13 +392,20 @@ # growable sparse files (like qcow2) that are used on top # of a physical device. # +# @rd_merged: Reserved (Since 2.2)
Does this mean it is always output as 0 for now, but may be non-zero at some future date if we figure out how to do merged read requests? Is it even worth adding the field if it has no semantics? We can always add it later when it makes sense, and a client can be smart enough to realize that a missing field is the same as the field being present with value 0 (since that is what clients already have to do for 2.1).
I'd feel better with just a bit more documentation or else omitting the field. The rest of the patch is okay, though.
Signature · 2 lines
Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Re: [Qemu-devel] [PATCHv2 1/6] block: add accounting for merged requests
Am 22.10.2014 um 20:20 schrieb Eric Blake:
Quoted 25 lines · Peter Lieven
Quoted 13 lines
Signed-off-by Peter Lieven <[email protected]>Reviewed-by Max Reitz <[email protected]>--- block.c | 2 ++ block/accounting.c | 7 +++++++ block/qapi.c | 2 ++ hmp.c | 6 +++++- include/block/accounting.h | 3 +++ qapi/block-core.json | 9 ++++++++- 6 files changed, 27 insertions(+), 2 deletions(-)+++
b/qapi/block-core.jsonqapi/block-core.json line 395
Quoted 4 lines
qapi/block-core.json +1
-0@@ -392,13 +392,20 @@ # growable sparse files (like qcow2) that are used on top # of a physical device. # +# @rd_merged: Reserved (Since 2.2)Does this mean it is always output as 0 for now, but may be non-zero at some future date if we figure out how to do merged read requests? Is it even worth adding the field if it has no semantics? We can always add it later when it makes sense, and a client can be smart enough to realize that a missing field is the same as the field being present with value 0 (since that is what clients already have to do for 2.1).
Quoted 3 lines
I'd feel better with just a bit more documentation or else omitting the field. The rest of the patch is okay, though.
Read merging is no magic. I plan to integrate it for 2.3. There are a few open questions where and how to implement it, but this can be solved. The idea was to give people the change to implement read and write merging statistics at the same time.
But you are right, there should be more comments or the fields should not be published yet.
Peter
PATCH v2 2/6 block: introduce bdrv_runtime_opts
In reply to Peter LievenThis patch (orginally by Kevin) adds a bdrv_runtime_opts QemuOptsList. The list will absorb all options that belong to the BDS (and not the BlockBackend) and will be parsed and handled in bdrv_open_common.
--- block.c | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-)
block.c +33 -5
@@ -27,6 +27,7 @@#include "block/block_int.h" #include "block/blockjob.h" #include "qemu/module.h" +#include "qapi/qmp/qbool.h" #include "qapi/qmp/qjson.h" #include "sysemu/sysemu.h" #include "sysemu/blockdev.h" /* FIXME layering violation */
@@ -892,6 +893,19 @@ static void bdrv_assign_node_name(BlockDriverState *bs,QTAILQ_INSERT_TAIL (&graph_bdrv_states, bs, node_list); } +static QemuOptsList bdrv_runtime_opts = { + .name ="bdrv_common" , + .head =QTAILQ_HEAD_INITIALIZER (bdrv_runtime_opts.head), + .desc = { + { + .name ="node-name" , + .type =QEMU_OPT_STRING , + .help ="Node name of the block device node" , + }, + {/* end of list */ } + }, +}; +/* * Common part for opening disk images and files *
@@ -903,6 +917,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,int ret, open_flags;const char *filename;const char *node_name =NULL ; +QemuOpts *opts;Error *local_err =NULL ;assert (drv !=NULL );
@@ -923,19 +938,28 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,trace_bdrv_open_common (bs, filename ?:"" , flags, drv->format_name); - node_name =qdict_get_try_str (options,"node-name" ); + opts =qemu_opts_create (&bdrv_runtime_opts,NULL ,0 , &error_abort); +qemu_opts_absorb_qdict (opts, options, &local_err); +if (local_err) { +error_propagate (errp, local_err); + ret = -EINVAL ; + goto fail_opts; + } + + node_name =qemu_opt_get (opts,"node-name" );bdrv_assign_node_name (bs, node_name, &local_err);if (local_err) {error_propagate (errp, local_err); -return -EINVAL ; + ret = -EINVAL ; + goto fail_opts; } -qdict_del (options,"node-name" );/* bdrv_open() with directly using a protocol as drv. This layer is already * opened, so assign it to bs (while file becomes a closed BlockDriverState) * and return immediately. */ if (file !=NULL && drv->bdrv_file_open) {bdrv_swap (file, bs); +qemu_opts_del (opts);return 0 ; }
@@ -953,7 +977,8 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, ?"Driver '%s' can only be used for read-only devices" :"Driver '%s' is not whitelisted" , drv->format_name); -return -ENOTSUP ; + ret = -ENOTSUP ; + goto fail_opts; }assert (bs->copy_on_read ==0 );/* bdrv_new() and bdrv_close() make it so */
@@ -962,7 +987,8 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file,bdrv_enable_copy_on_read (bs); }else {error_setg (errp,"Can't use copy-on-read on read-only device" ); -return -EINVAL ; + ret = -EINVAL ; + goto fail_opts; } }
@@ -1027,6 +1053,8 @@ free_and_fail:g_free (bs->opaque); bs->opaque =NULL ; bs->drv =NULL ; +fail_opts: +qemu_opts_del (opts);return ret; }
Signature · 1 line
1.7.9.5
PATCH v2 3/6 block: add a knob to disable multiwrite_merge
In reply to Peter LievenThe block layer silently merges write requests since commit 40b4f539. This patch adds a knob to disable this feature as there has been some discussion lately if multiwrite is a good idea at all and as it falsifies benchmarks.
--- block.c | 9 +++++++++ block/qapi.c | 1 + hmp.c | 4 ++++ include/block/block_int.h | 1 + qapi/block-core.json | 10 +++++++++- qemu-options.hx | 1 + qmp-commands.hx | 2 ++ 7 files changed, 27 insertions(+), 1 deletion(-)
block.c +9 -0
@@ -901,6 +901,10 @@ static QemuOptsList bdrv_runtime_opts = { .name = "node-name", .type = QEMU_OPT_STRING, .help = "Node name of the block device node", + },{ + .name = "write-merging", + .type = QEMU_OPT_BOOL, + .help = "enable write merging (default: true)", }, {/* end of list */ } },
@@ -1003,6 +1007,7 @@ static int bdrv_open_common(BlockDriverState *bs, BlockDriverState *file, bs->opaque =g_malloc0 (drv->instance_size); bs->enable_write_cache = !!(flags &BDRV_O_CACHE_WB ); + bs->write_merging =qemu_opt_get_bool (opts,"write-merging" , true);/* Open the image, either directly or using a protocol */ if (drv->bdrv_file_open) {
@@ -4559,6 +4564,10 @@ static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs, {int i, outidx; +if (!bs->write_merging) { +return num_reqs; + } +// Sort requests by start sector qsort (reqs, num_reqs,sizeof (*reqs), &multiwrite_req_compare);
block/qapi.c +1 -0
@@ -58,6 +58,7 @@ BlockDeviceInfo *bdrv_block_device_info(BlockDriverState *bs) info->backing_file_depth =bdrv_get_backing_file_depth (bs); info->detect_zeroes = bs->detect_zeroes; + info->write_merging = bs->write_merging;if (bs->io_limits_enabled) {ThrottleConfig cfg;
hmp.c +4 -0
@@ -348,6 +348,10 @@ void hmp_info_block(Monitor *mon, const QDict *qdict) BlockdevDetectZeroesOptions_lookup[info->value->inserted->detect_zeroes]); } +if (!info->value->inserted->write_merging) { +monitor_printf (mon," Write Merging: off\n" ); + } +if (info->value->inserted->bps || info->value->inserted->bps_rd || info->value->inserted->bps_wr
include/block/block_int.h +1 -0
@@ -407,6 +407,7 @@ struct BlockDriverState {QDict *options;BlockdevDetectZeroesOptions detect_zeroes; +bool write_merging;/* The error object in use for blocking operations on backing_hd */ Error *backing_blocker;
qapi/block-core.json +9 -1
@@ -214,6 +214,8 @@ # # @detect_zeroes: detect and optimize zero writes (Since 2.1) # +# @write_merging: true if write merging is enabled (Since 2.2) +# # @bps: total throughput limit in bytes per second is specified # # @bps_rd: read throughput limit in bytes per second is specified
@@ -250,6 +252,7 @@ '*backing_file': 'str', 'backing_file_depth': 'int', 'encrypted': 'bool', 'encryption_key_missing': 'bool', 'detect_zeroes': 'BlockdevDetectZeroesOptions', + 'write_merging': 'bool', 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', 'image': 'ImageInfo',
@@ -1187,6 +1190,10 @@ # (default: false) # @detect-zeroes: #optional detect and optimize zero writes (Since 2.1) # (default: off) +# @write-merging: #optional enable the merging of write requests +# also known as multiwrite_merge (Since 2.2) +# (default: true, but this might change in the future +# depending on format/protocol/features used) # # Since: 1.7 ##
@@ -1200,7 +1207,8 @@ '*rerror': 'BlockdevOnError', '*werror': 'BlockdevOnError', '*read-only': 'bool', - '*detect-zeroes': 'BlockdevDetectZeroesOptions' } } + '*detect-zeroes': 'BlockdevDetectZeroesOptions', + '*write-merging': 'bool' } } ## # @BlockdevOptionsFile
qemu-options.hx +1 -0
@@ -432,6 +432,7 @@ DEF("drive", HAS_ARG, QEMU_OPTION_drive, " [,werror=ignore|stop|report|enospc][,id=name][,aio=threads|native]\n" " [,readonly=on|off][,copy-on-read=on|off]\n" " [,discard=ignore|unmap][,detect-zeroes=on|off|unmap]\n" + " [,write-merging=on|off]\n" " [[,bps=b]|[[,bps_rd=r][,bps_wr=w]]]\n" " [[,iops=i]|[[,iops_rd=r][,iops_wr=w]]]\n" " [[,bps_max=bm]|[[,bps_rd_max=rm][,bps_wr_max=wm]]]\n"
qmp-commands.hx +2 -0
@@ -2104,6 +2104,7 @@ Each json-object contain the following: - "iops_size": I/O size when limiting by iops (json-int) - "detect_zeroes": detect and optimize zero writing (json-string) - Possible values: "off", "on", "unmap" + - "write_merging": enable merging of write requests (json-bool) - "image": the detail of the image, it is a json-object containing the following: - "filename": image file name (json-string)
@@ -2181,6 +2182,7 @@ Example: "iops_wr_max": 0, "iops_size": 0, "detect_zeroes": "on", + "write_merging": "true", "image":{ "filename":"disks/test.qcow2", "format":"qcow2",
Signature · 1 line
1.7.9.5
Re: [Qemu-devel] [PATCHv2 3/6] block: add a knob to disable multiwrite_merge
Quoted 10 lines · Peter Lieven
The block layer silently merges write requests since commit
40b4f539. This patch adds a knob to disable this feature as there has been some discussion lately if multiwrite is a good idea at all and as it falsifies benchmarks.Signed-off-by Peter Lieven <[email protected]>Reviewed-by Max Reitz <[email protected]>Signed-off-by Peter Lieven <[email protected]>
Is the double s-o-b intentional?
hmp.c void hmp_info_block(Monitor *mon, const QDict *qdict) · line 353
Quoted 8 lines
+++
b/hmp.chmp.c +3
-0@@ -348,6 +348,10 @@ void hmp_info_block(Monitor *mon, const QDict *qdict) BlockdevDetectZeroesOptions_lookup[info->value->inserted->detect_zeroes]); } +if (!info->value->inserted->write_merging) { +monitor_printf (mon," Write Merging: off\n" ); + }
Is it also worth printing something if write merging is enabled?
Signature · 2 lines
Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Re: [Qemu-devel] [PATCHv2 3/6] block: add a knob to disable multiwrite_merge
Am 22.10.2014 um 20:29 schrieb Eric Blake:
Quoted 7 lines · Peter Lieven
Quoted 6 lines
The block layer silently merges write requests since commit
40b4f539. This patch adds a knob to disable this feature as there has been some discussion lately if multiwrite is a good idea at all and as it falsifies benchmarks.
Quoted 5 lines
Quoted 4 lines
Signed-off-by Peter Lieven <[email protected]>Reviewed-by Max Reitz <[email protected]>Signed-off-by Peter Lieven <[email protected]>Is the double s-o-b intentional?
Mistake
Quoted 7 lines
Quoted 7 lines
+++
b/hmp.chmp.c +0
-0@@ -348,6 +348,10 @@ void hmp_info_block(Monitor *mon, const QDict *qdict) BlockdevDetectZeroesOptions_lookup[info->value->inserted->detect_zeroes]); }
Quoted 5 lines
hmp.c void hmp_info_block(Monitor *mon, const QDict *qdict) · line 353
Quoted 3 lines
hmp.c +3
-0+if (!info->value->inserted->write_merging) { +monitor_printf (mon," Write Merging: off\n" ); + }Is it also worth printing something if write merging is enabled?
Enabled Write Merging is the default since 2009. We do not display all other defaults as well. But I don't mind.
Peter
PATCH v2 4/6 hw/virtio-blk: add a constant for max number of merged requests
In reply to Peter LievenAs it was not obvious (at least for me) where the 32 comes from; add a constant for it.
--- hw/block/virtio-blk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
hw/block/virtio-blk.c +3 -1
@@ -306,6 +306,8 @@ static bool virtio_blk_sect_range_ok(VirtIOBlock *dev,return true; } +#define MAX_MERGE_REQS 32 +static void virtio_blk_handle_write (VirtIOBlockReq *req,MultiReqBuffer *mrb) {BlockRequest *blkreq;
@@ -324,7 +326,7 @@ static void virtio_blk_handle_write(VirtIOBlockReq *req, MultiReqBuffer *mrb)block_acct_start (bdrv_get_stats (req->dev->bs), &req->acct, req->qiov.size,BLOCK_ACCT_WRITE ); -if (mrb->num_writes ==32 ) { +if (mrb->num_writes ==MAX_MERGE_REQS ) {virtio_submit_multiwrite (req->dev->bs, mrb); }
Signature · 1 line
1.7.9.5
PATCH v2 5/6 block: add qemu-iotest for write-merge parameter
In reply to Peter Lieven--- tests/qemu-iotests/108 | 108 ++++++++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/108.out | 63 ++++++++++++++++++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 172 insertions(+) create mode 100755 tests/qemu-iotests/108 create mode 100644 tests/qemu-iotests/108.out
tests/qemu-iotests/108 new file +108 -0
@@ -0,0 +1,108 @@ +#!/bin/bash +# +# Test if write-merging parameter is applied correctly +# +# Copyright (C) 2014 Peter Lieven <[email protected]> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# creator [email protected] + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt raw +_supported_proto file +_supported_os Linux + +function do_run_qemu() +{ + echo Testing: "$@" + $QEMU -nographic -qmp stdio -serial none "$@" + echo +} + +function run_qemu() +{ + do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp +} + +size=128M + +_make_test_img $size + +echo +echo === write-merging not specified === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-named-block-nodes" } +{ "execute": "quit" } +EOF + +echo +echo === write-merging set to on === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" } +{ "execute": "quit" } +EOF + +echo +echo === write-merging set to off === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" } +{ "execute": "quit" } +EOF + +echo +echo === file.write-merging set to on === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" } +{ "execute": "quit" } +EOF + +echo +echo === file.write-merging set to off === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" } +{ "execute": "quit" } +EOF + +# success, all done +echo "*** done" +rm -f $seq.full +status=0
tests/qemu-iotests/108.out new file +21 -0
@@ -0,0 +1,63 @@ +QA output created by 108 +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + +=== write-merging not specified === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}, {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {}, "iops_wr": 0, "ro": false, "node-name": "file", "backing_file_depth": 0, "drv": "file", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}]} +{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} + + +=== write-merging set to on === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "json:{\"write-merging\": \"on\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "json:{\"write-merging\": \"on\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "remo
vable":
true, "tray_open": false, "type": "unknown"}]}
+{"return": {}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}}+
+
+=== write-merging set to off ===
+
+Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0
+QMP_VERSION
+{"return": {}}
+{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": false, "image": {"virtual-size": 134217728, "filename": "json:{\"write-merging\": \"off\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "json:{\"write-merging\": \"off\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "r
emovable
": true, "tray_open": false, "type": "unknown"}]}
+{"return": {}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}}+
+
+=== file.write-merging set to on ===
+
+Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0
+QMP_VERSION
+{"return": {}}
+{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.raw", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": {}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}}+
+
+=== file.write-merging set to off ===
+
+Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0
+QMP_VERSION
+{"return": {}}
+{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.raw", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": {}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}}+
+*** done
tests/qemu-iotests/group +1 -0
@@ -106,3 +106,4 @@ 103 rw auto quick 104 rw auto 105 rw auto quick +108 rw auto quick
Signature · 1 line
1.7.9.5
Re: [Qemu-devel] [PATCHv2 5/6] block: add qemu-iotest for write-merge parameter
Quoted 3 lines · Peter Lieven
Signed-off-by Peter Lieven <[email protected]>--- tests/qemu-iotests/108 | 108 ++++++++++++++++++++++++++++++++++++++++++++
It's a pity, but 108 is already taken (by me and on Kevin's block branch at least). 108 having 108 lines would have been nice, though.
Quoted 61 lines
tests/qemu-iotests/108.out | 63 ++++++++++++++++++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 172 insertions(+)create mode 100755 tests/qemu-iotests/108
create mode 100644 tests/qemu-iotests/108.outtests/qemu-iotests/108 new file +49
-0@@ -0,0 +1,108 @@ +#!/bin/bash +# +# Test if write-merging parameter is applied correctly +# +# Copyright (C) 2014 Peter Lieven <[email protected]> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# creator [email protected] + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt raw +_supported_proto file +_supported_os Linux + +function do_run_qemu() +{ + echo Testing: "$@" + $QEMU -nographic -qmp stdio -serial none "$@" + echo +} + +function run_qemu() +{ + do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qmp +}
tests/qemu-iotests/108 line 59
Quoted 10 lines
tests/qemu-iotests/108 new file +10
-0+ +size=128M + +_make_test_img $size + +echo +echo === write-merging not specified === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF
Any reason you're creating a device? query-named-block-nodes works without, too.
Quoted 22 lines
tests/qemu-iotests/108 new file +22
-0+{ "execute": "qmp_capabilities" } +{ "execute": "query-named-block-nodes" } +{ "execute": "quit" } +EOF + +echo +echo === write-merging set to on === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" } +{ "execute": "quit" } +EOF + +echo +echo === write-merging set to off === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" }
tests/qemu-iotests/108 line 91
Quoted 10 lines
tests/qemu-iotests/108 new file +10
-0+{ "execute": "quit" } +EOF + +echo +echo === file.write-merging set to on === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" }
You should be using query-named-block-nodes here (and probably everywhere else, too). See the test output for the next case, which never says anything about write-merging being off (aside from the beautiful json file name). [0]
Quoted 36 lines
tests/qemu-iotests/108 new file +17
-0+{ "execute": "quit" } +EOF + +echo +echo === file.write-merging set to off === +echo + +run_qemu -drive file=$TEST_IMG,format=$IMGFMT,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0 <<EOF +{ "execute": "qmp_capabilities" } +{ "execute": "query-block" } +{ "execute": "quit" } +EOF + +# success, all done +echo "*** done" +rm -f $seq.full +status=0tests/qemu-iotests/108.out new file +13
-0@@ -0,0 +1,63 @@ +QA output created by 108 +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 + +=== write-merging not specified === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}, {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {}, "iops_wr": 0, "ro": false, "node-name": "file", "backing_file_depth": 0, "drv": "file", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}]} +{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}}
tests/qemu-iotests/108.out
Quoted 10 lines
tests/qemu-iotests/108.out new file +8
-0+ + +=== write-merging set to on === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "json:{\"write-merging\": \"on\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "json:{\"write-merging\": \"on\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "remo vable": true, "tray_open": false, "type": "unknown"}]}
Just so you know, this line (and some more) has been split because of email™. Therefore, this patch doesn't apply until fixed manually. It might be worth specifying some branch on some repo where we can pull this series from.
Quoted 28 lines
tests/qemu-iotests/108.out new file +26
-0+{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} + + +=== write-merging set to off === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": false, "image": {"virtual-size": 134217728, "filename": "json:{\"write-merging\": \"off\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "json:{\"write-merging\": \"off\", \"driver\": \"raw\", \"file\": {\"driver\": \"file\", \"filename\": \"TEST_DIR/t.raw\"}}", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "r emovable ": true, "tray_open": false, "type": "unknown"}]} +{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} + + +=== file.write-merging set to on === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=on -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.raw", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"}
tests/qemu-iotests/108.out
Quoted 10 lines
tests/qemu-iotests/108.out new file +10
-0+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} + + +=== file.write-merging set to off === + +Testing: -drive file=TEST_DIR/t.raw,format=raw,if=none,id=disk,node-name=root,file.node-name=file,file.write-merging=off -device virtio-blk-pci,drive=disk,id=virtio0 +QMP_VERSION +{"return": {}} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.raw", "format": "raw", "actual-size": 0, "dirty-flag": false}, "iops_wr": 0, "ro": false, "node-name": "root", "backing_file_depth": 0, "drv": "raw", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.raw", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]}
[0] No '"write_merging": false' here...
Max
Quoted 15 lines
tests/qemu-iotests/108.out new file +6
-0+{"return": {}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}} +{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "floppy0", "tray-open": true}} + +*** donetests/qemu-iotests/group +1
-0@@ -106,3 +106,4 @@ 103 rw auto quick 104 rw auto 105 rw auto quick +108 rw auto quick
PATCH v2 6/6 block: fix qemu-iotest reference output for test 067
In reply to Peter LievenOutput is changed by the addition of the write-merging parameter
--- tests/qemu-iotests/067.out | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
tests/qemu-iotests/067.out +5 -5
@@ -6,7 +6,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk -device virtio-blk-pci,drive=disk,id=virtio0 QMP_VERSION {"return": {}} -{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "disk", "locked": false, "removable": false, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}}
@@ -24,7 +24,7 @@ QMP_VERSION Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,if=none,id=disk QMP_VERSION {"return": {}} -{"return": [{"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} +{"return": [{"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"return": {}}
@@ -44,7 +44,7 @@ Testing: QMP_VERSION {"return": {}} {"return": "OK\r\n"} -{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"return": {}}
@@ -64,14 +64,14 @@ Testing: QMP_VERSION {"return": {}} {"return": {}} -{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} {"return": {}} {"return": {}} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"path": "/machine/peripheral/virtio0/virtio-backend"}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_DELETED", "data": {"device": "virtio0", "path": "/machine/peripheral/virtio0"}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "RESET"} -{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} +{"return": [{"io-status": "ok", "device": "ide1-cd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "floppy0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"device": "sd0", "locked": false, "removable": true, "tray_open": false, "type": "unknown"}, {"io-status": "ok", "device": "disk", "locked": false, "removable": true, "inserted": {"iops_rd": 0, "detect_zeroes": "off", "write_merging": true, "image": {"virtual-size": 134217728, "filename": "TEST_DIR/t.qcow2", "cluster-size": 65536, "format": "qcow2", "actual-size": SIZE, "format-specific": {"type": "qcow2", "data": {"compat": "1.1", "lazy-refcounts": false, "corrupt": false}}, "dirty-flag": false}, "iops_wr": 0, "ro": false, "backing_file_depth": 0, "drv": "qcow2", "iops": 0, "bps_wr": 0, "encrypted": false, "bps": 0, "bps_rd": 0, "file": "TEST_DIR/t.qcow2", "encryption_key_missing": false}, "tray_open": false, "type": "unknown"}]} {"return": {}} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN"} {"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "DEVICE_TRAY_MOVED", "data": {"device": "ide1-cd0", "tray-open": true}}
Signature · 1 line
1.7.9.5
Re: [Qemu-devel] [PATCHv2 6/6] block: fix qemu-iotest reference output for test 067
Quoted 6 lines · Peter Lieven
Output is changed by the addition of the write-merging parameter
Signed-off-by Peter Lieven <[email protected]>--- tests/qemu-iotests/067.out | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)