Loading
examples/nvme_fio_plugin: add initial support for ZNS
This adds initial support for ZNS by aligning the NVMe spec. defined ZNS structures and commands with the fio Zone representation and implementation of the following io-engine functions: get_zoned_model() / spdk_fio_get_zoned_model(), when namespace is ZNS and the Zoned-Command-Set is enabled, then this function informs fio that the device is ZBD_HOST_MANAGED. report_zones() / spdk_fio_report_zones(), submits a single zone-mgmt-recv and waits for its completion, converts the spec-defined zone-descriptors to the fio ZBD_ZONE representation and returns the number of zones in the converted report. reset_wp() / spdk_fio_reset_wp(), submits multiple zone-mgmt-send, covering the range [offset, offset+length] and waits for their completion. Four helper-functions are added to assist in the above implementations. get_fio_qpair(), this helper is added to retrieve the namespace matching the given fio-file, ensuring that management commands reach the correct namespace. spdk_fio_qpair_mdts_nbytes(), this helper is added to assist report_zones() retrieve the zone-report within the bounds of the maximum-data-transfer of the device. The functions pcu() and pcu_cb() provide a means to submit management-commands and waiting for their completions. They are needed since, although mgmt-send/recv are IO-commands in the context of NVMe, then for fio they are not part of the regular queue/event/getevents but utilized in a synchronous/blocking manner. Note, in the fio-zone-representation, then the start/len/capacity/wp fields are in units of bytes, whereas the corresponding values in NVMe are in lbas/sectors. It is worth noting as the offset <-> lba conversions do not take NVMe configurations with extended-lba format into account. Thus, the implementation is initial support for ZNS as more work is needed to support pi/extended-lba configurations. Note, a guard FIO_HAS_ZBD checks for the required io-engine ops version and indirectly testing for available of fio Zone representation by testing for a macro introduced in the same fio-release as the required fio Zone representation. Signed-off-by:Simon A. F. Lund <simon.lund@samsung.com> Change-Id: Id3d1d61a52db2e55019032c724197df4d559271a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4836 Tested-by:
SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by:
Jim Harris <james.r.harris@intel.com> Reviewed-by:
Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>