From: Sam Li <faithilikerun@gmail.com>
To: qemu-devel@nongnu.org
Cc: dmitry.fomichev@wdc.com, Markus Armbruster <armbru@redhat.com>,
Eric Blake <eblake@redhat.com>,
dlemoal@kernel.org, Hanna Reitz <hreitz@redhat.com>,
stefanha@redhat.com, hare@suse.de, Kevin Wolf <kwolf@redhat.com>,
qemu-block@nongnu.org, Sam Li <faithilikerun@gmail.com>
Subject: [PATCH v4 0/4] Add full zoned storage emulation to qcow2 driver
Date: Mon, 18 Sep 2023 17:53:09 +0800 [thread overview]
Message-ID: <20230918095313.5492-1-faithilikerun@gmail.com> (raw)
This patch series add a new extension - zoned format - to the
qcow2 driver thereby allowing full zoned storage emulation on
the qcow2 img file. Users can attach such a qcow2 file to the
guest as a zoned device.
Write pointer are preserved in the zoned metadata. It will be
recovered after power cycle. Meanwhile, any open (implicit or
explicit) zone will show up as closed.
Zone states are in memory. Read-only and offline states are
device-internal events, which are not considerred in qcow2
emulation for simplicity. The other zone states
(closed, empty, full) can be inferred from write poiner
values, presistent across QEMU reboots. The open states are
kept in memory using open zone lists.
To create a qcow2 file with zoned format, use command like this:
$ qemu-img create -f qcow2 test.qcow2 -o size=768M -o
zone_size=64M -o zone_capacity=64M -o nr_conv_zones=0 -o
max_append_sectors=512 -o max_open_zones=0 -o max_active_zones=0
-o zone_model=1
Then add it to the QEMU command line:
-blockdev node-name=drive1,driver=qcow2,file.driver=file,file.filename=../qemu/test.qcow2 \
-device virtio-blk-pci,drive=drive1 \
v3->v4:
- use QLIST for implicit, explicit open zones management [Stefan]
- keep zone states in memory and drop state bits in wp metadata structure [Damien, Stefan]
- change zone resource management and iotests accordingly
- add tracing for number of implicit zones
- address review comments [Stefan, Markus]:
* documentation, config, style
v2->v3:
- drop zoned_profile option [Klaus]
- reformat doc comments of qcow2 [Markus]
- add input validation and checks for zoned information [Stefan]
- code style: format, comments, documentation, naming [Stefan]
- add tracing function for wp tracking [Stefan]
- reconstruct io path in check_zone_resources [Stefan]
v1->v2:
- add more tests to qemu-io zoned commands
- make zone append change state to full when wp reaches end
- add documentation to qcow2 zoned extension header
- address review comments (Stefan):
* fix zoned_mata allocation size
* use bitwise or than addition
* fix wp index overflow and locking
* cleanups: comments, naming
Sam Li (4):
docs/qcow2: add the zoned format feature
qcow2: add configurations for zoned format extension
qcow2: add zoned emulation capability
iotests: test the zoned format feature for qcow2 file
block/qcow2.c | 893 ++++++++++++++++++++++-
block/qcow2.h | 30 +
block/trace-events | 2 +
docs/interop/qcow2.txt | 42 ++
docs/system/qemu-block-drivers.rst.inc | 33 +
include/block/block_int-common.h | 13 +
qapi/block-core.json | 30 +-
tests/qemu-iotests/tests/zoned-qcow2 | 129 ++++
tests/qemu-iotests/tests/zoned-qcow2.out | 133 ++++
9 files changed, 1302 insertions(+), 3 deletions(-)
create mode 100755 tests/qemu-iotests/tests/zoned-qcow2
create mode 100644 tests/qemu-iotests/tests/zoned-qcow2.out
--
2.40.1
next reply other threads:[~2023-09-18 9:54 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-18 9:53 Sam Li [this message]
2023-09-18 9:53 ` [PATCH v4 1/4] docs/qcow2: add the zoned format feature Sam Li
2023-09-27 20:48 ` Stefan Hajnoczi
2023-09-18 9:53 ` [PATCH v4 2/4] qcow2: add configurations for zoned format extension Sam Li
2023-09-25 13:05 ` Markus Armbruster
2023-09-25 13:21 ` Sam Li
2023-09-28 15:15 ` Eric Blake
2023-10-09 9:17 ` Sam Li
2023-09-18 9:53 ` [PATCH v4 3/4] qcow2: add zoned emulation capability Sam Li
2023-09-28 19:17 ` Eric Blake
2023-10-09 7:43 ` Sam Li
2023-09-18 9:53 ` [PATCH v4 4/4] iotests: test the zoned format feature for qcow2 file Sam Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230918095313.5492-1-faithilikerun@gmail.com \
--to=faithilikerun@gmail.com \
--cc=armbru@redhat.com \
--cc=dlemoal@kernel.org \
--cc=dmitry.fomichev@wdc.com \
--cc=eblake@redhat.com \
--cc=hare@suse.de \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).