]> www.infradead.org Git - users/hch/xfs.git/tag
xfs-zoned-allocator-2025-03-03
object 9c477912b2f58da71751f244aceecf5f8cc549ed
authorChristoph Hellwig <hch@lst.de>
Mon, 3 Mar 2025 15:17:22 +0000 (08:17 -0700)
xfs: add support for zoned devices

Add support for the new zoned space allocator and thus for zoned devices:

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

to XFS. This has been developed for and tested on both SMR hard drives,
which are the oldest and most common class of zoned devices:

   https://zonedstorage.io/docs/introduction/smr

and ZNS SSDs:

   https://zonedstorage.io/docs/introduction/zns

It has not been tested with zoned UFS devices, as their current capacity
points and performance characteristics aren't too interesting for XFS
use cases (but never say never).

Sequential write only zones are only supported for data using a new
allocator for the RT device, which maps each zone to a rtgroup which
is written sequentially.  All metadata and (for now) the log require
using randomly writable space. This means a realtime device is required
to support zoned storage, but for the common case of SMR hard drives
that contain random writable zones and sequential write required zones
on the same block device, the concept of an internal RT device is added
which means using XFS on a SMR HDD is as simple as:

$ mkfs.xfs /dev/sda
$ mount /dev/sda /mnt

When using NVMe ZNS SSDs that do not support conventional zones, the
traditional multi-device RT configuration is required.  E.g. for an
SSD with a conventional namespace 1 and a zoned namespace 2:

$ mkfs.xfs /dev/nvme0n1 -o rtdev=/dev/nvme0n2
$ mount -o rtdev=/dev/nvme0n2 /dev/nvme0n1 /mnt

The zoned allocator can also be used on conventional block devices, or
on conventional zones (e.g. when using an SMR HDD as the external RT
device).  For example using zoned XFS on normal SSDs shows very nice
performance advantages and write amplification reduction for intelligent
workloads like RocksDB.

Some work is still in progress or planned, but should not affect the
integration with the rest of XFS or the on-disk format:

 - support for quotas
 - support for reflinks

Note that the I/O path already supports reflink, but garbage collection
isn't refcount aware yet and would unshare shared blocks, thus rendering
the feature useless.
-----BEGIN PGP SIGNATURE-----

iQI/BAABCgApFiEEgdbnc3r/njty3Iq9D55TZVIEUYMFAmfFyIcLHGhjaEBsc3Qu
ZGUACgkQD55TZVIEUYPS/w/9EGxxpEB3D3Md3gw4ZugONktUup3V/2SjI4GPGRn/
ZzaBywR8UzDCMVWcR3Yzgi90KtU4MNHIDhhzQ++tnbOLsqZ9448qdQLEyVZ+5CG2
/xW4Znf+zsJ9CgYpYD/nHcMJIArVuZTrUUlQHETW+crrEtaLtzFzGCi3Wnl40nPi
+micWEnb4Ddyw9sLOYobA5n+k7IZFS6bz2BYkHsqT+0lp1q0JdK1gANTzvTHfda/
XWmOZggb+y8VVJ8mXN2R0Q0f1MtyYsA3RH1cgS9K7H1nCMqr45uvrSLumOaYpAV7
tGM/cEy5Lq5yf37R/Zz3W85pJJmLsGYJ0YFGgGNcVVmY/Hr1D8hmMdu9Osny9ULV
j7QFVLP6bP17/y0cdYKp3uF9QV0HjmcanZdzdY/Ndd+wY1LeYKERojavo/5ymdXF
0rckesfxjxCjBwgPDYpbawhA9ok1gzotm9s9aCh2UWMY5qwUbVDzAUIeMPREVA/R
9XSFgPkkdPxkHHWqZBZ2fEv6ucGRNTIPTMX92o4zZj3Zd6CTpXC+KIK1MNIcSnkl
rmBfPQ5e/MDcaE9OBfFjd637+3cUDV2UcEb0m7GOv2bQhztreLjR7OghFQhySkUw
iQULym1UVdcT72NPxORSIafa06EuhTllGvCHXDxDdZ2dCujMSkFQKZfARr+R+pqL
ll8=
=l2Bw
-----END PGP SIGNATURE-----