Skip to content

Commit

Permalink
docs/zoned-storage: add zoned device documentation
Browse files Browse the repository at this point in the history
Add the documentation about the zoned device support to virtio-blk
emulation.

Signed-off-by: Sam Li <faithilikerun@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Reviewed-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Acked-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20230427172019.3345-9-faithilikerun@gmail.com
Message-id: 20230324090605.28361-9-faithilikerun@gmail.com
[Add index-api.rst to fix "zoned-storage.rst:document isn't included in
any toctree" error and fix pre-formatted command-line indentation.
--Stefan]
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
  • Loading branch information
sgzerolc authored and stefanhaRH committed Apr 28, 2023
1 parent 8d6164e commit 2ee9aa9
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/devel/index-api.rst
Expand Up @@ -12,3 +12,4 @@ generated from in-code annotations to function prototypes.
memory
modules
ui
zoned-storage
43 changes: 43 additions & 0 deletions docs/devel/zoned-storage.rst
@@ -0,0 +1,43 @@
=============
zoned-storage
=============

Zoned Block Devices (ZBDs) divide the LBA space into block regions called zones
that are larger than the LBA size. They can only allow sequential writes, which
can reduce write amplification in SSDs, and potentially lead to higher
throughput and increased capacity. More details about ZBDs can be found at:

https://zonedstorage.io/docs/introduction/zoned-storage

1. Block layer APIs for zoned storage
-------------------------------------
QEMU block layer supports three zoned storage models:
- BLK_Z_HM: The host-managed zoned model only allows sequential writes access
to zones. It supports ZBD-specific I/O commands that can be used by a host to
manage the zones of a device.
- BLK_Z_HA: The host-aware zoned model allows random write operations in
zones, making it backward compatible with regular block devices.
- BLK_Z_NONE: The non-zoned model has no zones support. It includes both
regular and drive-managed ZBD devices. ZBD-specific I/O commands are not
supported.

The block device information resides inside BlockDriverState. QEMU uses
BlockLimits struct(BlockDriverState::bl) that is continuously accessed by the
block layer while processing I/O requests. A BlockBackend has a root pointer to
a BlockDriverState graph(for example, raw format on top of file-posix). The
zoned storage information can be propagated from the leaf BlockDriverState all
the way up to the BlockBackend. If the zoned storage model in file-posix is
set to BLK_Z_HM, then block drivers will declare support for zoned host device.

The block layer APIs support commands needed for zoned storage devices,
including report zones, four zone operations, and zone append.

2. Emulating zoned storage controllers
--------------------------------------
When the BlockBackend's BlockLimits model reports a zoned storage device, users
like the virtio-blk emulation or the qemu-io-cmds.c utility can use block layer
APIs for zoned storage emulation or testing.

For example, to test zone_report on a null_blk device using qemu-io is::

$ path/to/qemu-io --image-opts -n driver=host_device,filename=/dev/nullb0 -c "zrp offset nr_zones"
6 changes: 6 additions & 0 deletions docs/system/qemu-block-drivers.rst.inc
Expand Up @@ -430,6 +430,12 @@ Hard disks
you may corrupt your host data (use the ``-snapshot`` command
line option or modify the device permissions accordingly).

Zoned block devices
Zoned block devices can be passed through to the guest if the emulated storage
controller supports zoned storage. Use ``--blockdev host_device,
node-name=drive0,filename=/dev/nullb0,cache.direct=on`` to pass through
``/dev/nullb0`` as ``drive0``.

Windows
^^^^^^^

Expand Down

0 comments on commit 2ee9aa9

Please sign in to comment.