This library provides an easier access to zoned namespace drives via xNVMe (>= v0.4)
Applications provide a buffer and a buffer size. xZTL decides where to write in the ZNS drive and returns a list of physical addresses as a list (mapping pieces).
Applications read by providing the physical block address as standard block devices.
This design requires the recovery of mapping by the application side.
We strongly believe that by centralizing the zone management into a single library, multiple applications will benefit from this design due to a simpler and thinner application backend design.
ZRocks: Zoned RocksDB (libzrocks.h)
This repository contains:
# libxztl: Zone Translation Layer User-space Library
xztl-core.c (Initialization)
xztl-ctx.c (xnvme asynchronous contexts support)
xztl-groups.c (grouped zones support)
xztl-mempool.c (lock-free memory pool support)
xztl-prometheus.c (Prometheus support)
xztl-stats.c (Statistics support)
ztl.c (Zone translation layer development core)
ztl-map.c (In-memory mapping table)
ztl-media.c (access to xnvme functions and ZNS devices)
ztl_metadata.c (Zone metadata management)
ztl-mpe.c (Persistent mapping table TODO)
ztl-pro-grp.c (Per group zone provisioning only 1 group for now)
ztl-pro.c (Zone provisioning)
ztl-wca.c (Write-cache aligned media I/Os from user I/Os)
ztl-zmd.c (Zone metadata management NOT IN USE)
# libzrocks: RocksDB Target
zrocks.c (target implementation)
include/libzrocks.h (interface to be used by RocksDB)
# unit tests
test-media-layer.c (Test xapp media layer)
test-mempool.c (Test xapp memory pool)
test-znd-media.c (Test libztl media implementation)
test-ztl.c (Test libztl I/O and translation layer)
test-append-mthread.c (Test multi-threaded append command)
test-zrocks.c (Test ZRocks target)
test-zrocks-rw.c (Test ZRocks Write/Read Bandwidth)
test-zrocks-metadata.c (Test ZRocks metadata)
Debian: apt install libnuma-dev libcunit1-dev libuuid1
Upgrade your kernel to above 5.14.14 to support character device for ZNS
-
Build and install xNVMe v0.4
-
Build RocksDB db_bench tool with xZTL plugin
$ git clone https://github.com/facebook/rocksdb.git $ cd rocksdb $ mkdir plugin/xztl $ git clone git@github.com:OpenMPDK/xZTL.git plugin/xztl $ DEBUG_LEVEL=0 ROCKSDB_PLUGINS=xztl make -j16 db_bench
-
In v0.5, the option zns is enhanced to specify the IO back-end if the kernel supports. The supported IO back-ends are threadpool, io_uring and SPDK.
Character abstraction --zns <dev_path> # The default backend is thrpool --zns <dev_path>?be=thrpool # thrpool backend --zns <dev_path>?be=io_uring_cmd # io_uring backend (io_uring_cmd for character device) SPDK abstraction --zns <dev_path>?nsid=N # e.g. pci:0000:01:00.0?nsid=1
-
./db_bench --env_uri=xztl:/dev/ng0n1 --zns /dev/nvme2n1?be=thrpool