NVMe ZNS:为什么有些 SSD 要求数据按区域顺序写?

TL;DR

ZNS 把 SSD 命名空间划分为必须顺序写入的区域,让主机参与闪存数据布局与回收。本文解释这种分工如何减少无效搬运,也说明它给文件系统和应用带来的管理成本。

ZNS 把 SSD 命名空间划分为必须顺序写入的区域,让主机参与闪存数据布局与回收。本文解释这种分工如何减少无效搬运,也说明它给文件系统和应用带来的管理成本。

NVMe ZNS:为什么有些 SSD 要求数据按区域顺序写?

传统 SSD 常常让主机把数据写到任意逻辑地址,设备内部再负责把新数据搬到合适的闪存位置。闪存有擦除块、写入页等物理限制,因此 SSD 需要后台整理和垃圾回收。NVMe ZNS(Zoned Namespace)改变了主机与设备分工:把命名空间切成许多区(zone),并要求主机按照规则在每个区内顺序写入。

为什么顺序写有帮助?NAND 闪存通常不能像覆盖内存那样直接改写任意位置。设备必须把有效页搬走、擦除整块、再写入新数据。传统 SSD 会用闪存转换层隐藏这些操作,但随机更新可能造成额外写入,也就是写放大。ZNS 把一部分布局责任交给主机,让应用知道数据属于哪个区、何时关闭区、何时重置区,从而更好地将生命周期相近的数据放在一起。

一个 zone 通常有自己的写入位置状态。主机不能随意跳到区中间覆盖旧内容,而要按顺序追加;区写满后,可在数据不再需要时整体重置。对日志、分层存储、视频流或某些数据库工作负载而言,把连续写入的数据放进相同生命周期的区域,能让空间回收更可预测,也可能减少设备内部不必要的数据搬迁。

代价是软件必须参与管理。应用或文件系统要处理 zone 的状态、并发写入顺序、空间分配与回收;如果数据更新模式不适合顺序追加,迁移和重写逻辑可能反而增加复杂度。ZNS 也不会自动让每一块 SSD 都更快、更耐用。效果取决于设备实现、主机软件、工作负载与运维策略。

可以把它想成仓库里的单向货架:每个区域只允许从入口依次摆放货物,不允许在中间随手抽换;当整区都过期后,再一次性清空重用。这样仓库管理员(主机软件)更容易规划整理,但必须自己记住货物的位置与去留。传统 SSD 则更像由仓库内部员工接管布局,主机简单一些,内部搬运对主机不透明。

因此,ZNS 的核心不是“新型文件系统”或“取消 SSD 控制器”,而是通过顺序写区域把部分闪存管理责任显式交给主机。它为可预测、高效的存储软件打开了空间,也要求整个软件栈理解分区写入规则。挑选场景时应先确认应用是否天然适合追加写和按区回收。

来源:NVM Express:Zoned Namespaces (ZNS) Command Set

KEEP READING