Re: [PATCH 00/16] support non power of 2 zoned devices
From: Johannes Thumshirn <hidden>
Date: 2022-05-02 22:07:47
Also in:
dm-devel, linux-btrfs, linux-f2fs-devel, linux-fsdevel, linux-nvme, lkml
On 27/04/2022 09:03, Pankaj Raghav wrote:
- Background and Motivation:
The zone storage implementation in Linux, introduced since v4.10, first
targetted SMR drives which have a power of 2 (po2) zone size alignment
requirement. The po2 zone size was further imposed implicitly by the
block layer's blk_queue_chunk_sectors(), used to prevent IO merging
across chunks beyond the specified size, since v3.16 through commit
762380ad9322 ("block: add notion of a chunk size for request merging").
But this same general block layer po2 requirement for blk_queue_chunk_sectors()
was removed on v5.10 through commit 07d098e6bbad ("block: allow 'chunk_sectors'
to be non-power-of-2"). NAND, which is the media used in newer zoned storage
devices, does not naturally align to po2, and so the po2 requirement
does not make sense for those type of zone storage devices.
Removing the po2 requirement from zone storage should therefore be possible
now provided that no userspace regression and no performance regressions are
introduced. Stop-gap patches have been already merged into f2fs-tools to
proactively not allow npo2 zone sizes until proper support is added [0].
Additional kernel stop-gap patches are provided in this series for dm-zoned.
Support for npo2 zonefs and btrfs support is addressed in this series.
There was an effort previously [1] to add support to non po2 devices via
device level emulation but that was rejected with a final conclusion
to add support for non po2 zoned device in the complete stack[2].Hey Pankaj, One thing I'm concerned with this patches is, once we have npo2 zones (or to be precise not fs_info->sectorsize aligned zones) we have to check on every allocation if we still have at least have fs_info->sectorsize bytes left in a zone. If not we need to explicitly finish the zone, otherwise we'll run out of max active zones. This is a problem for zoned btrfs at the moment already but it'll be even worse with npo2, because we're never implicitly finishing zones. See also https://lore.kernel.org/linux-btrfs/42758829d8696a471a27f7aaeab5468f60b1565d.1651157034.git.naohiro.aota@wdc.com (local) Thanks, Johannes