|
@@ -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"
|