一、FDP 是什么?
FDP(Flexible Data Placement,灵活数据放置),是 NVMe 2.1 标准(2024 年发布)中引入的一项新技术,也是一个可选功能,核心目标是降低 SSD 的写放大(WAF)。简单来说,它让主机(如电脑、服务器)能更精准地控制数据在 SSD 内部的存储位置,从而:
- 减少无效数据写入,降低 SSD 写放大因子(WAF)
- 提升服务质量(QoS)稳定性
- 减少主机预留空间(OP)占用
- 延长 SSD 寿命并提升性能
- 优化存储系统总体拥有成本(TCO)
写放大问题:SSD 响应 Host 写入而执行了额外 NAND 介质写入操作的现象。而 WAF = NAND 介质总写入量 / Host 发出的总写入量。
技术背景
- 传统方案的局限:过去降低写放大主要依赖超额配置(OP),即预留部分存储空间,但会浪费资源且增加成本。
- 技术演进:后来,Open Channel SSD、Streams 这些技术想来拯救这个局面,可它们要么太复杂,就像让你用一堆复杂的工具去组装家具,一般人搞不定;要么限制太多,就像给你规定只能走特定的几条路,很不自由,所以一直没能流行起来。ZNS(分区命名空间)技术倒是能把写放大降得很低,可它只允许数据像排队一样顺序写入,对于复杂的存储需求来说,就像只让你用一种姿势跑步,根本满足不了。
- FDP诞生: 尴尬之际,Meta 和 Google 这两个 “科技大佬” 带头搞出了 FDP 技术。它就像是找到了一个完美的平衡点,既不像传统的 CNS SSD 那样对物理层控制得那么粗糙,又不像 Open Channel SSD 那样让主机介入得太深,难以兼容,FDP 刚刚好填补了这个 “主机控制粒度” 的空白区域,平衡了灵活性与兼容性。


FDP、Stream、ZNS 对比
二、FDP 如何工作?
技术设计思想
在 CNS SSD(传统固态硬盘) 这个 “老房子” 里,主机就像个只能看到门牌号(LBA)的人,对房子内部结构一无所知。而 FDP SSD 这个 “新房子” 可不一样,它给主机一把 “万能钥匙”,也就是回收单元句柄(RUH),让主机能了解房子里更详细的布局。通过这种增加 “逻辑 - 物理” 映射关系透明度的方式,主机能做很多厉害的事:
- 数据分流隔离(热冷数据分池存储):就像把夏天和冬天的衣服分别放在不同的衣柜,热数据(经常用的数据)和冷数据(很少用的数据)也能分开存储,避免混在一起不好找。
- 物理边界对齐(减少 NAND 擦写碎片):数据结构按照 NAND 闪存的物理块来摆放,减少因为乱放导致的额外擦写操作,让数据存储更规整。
- 写入位置精控(优化 GC 效率):主机可以像指挥交通一样,更为精确地控制数据写到哪个区域,这样垃圾回收(GC)的时候,就不用像无头苍蝇一样乱找,效率大大提高。
核心架构组件
FDP 有三个超重要的 “小伙伴”,这里称之为 “三剑客”。
- RU(回收单元):它是基础存储单元,就像一个小仓库,由一组 NAND 块组成,通常大小在 GB 级别。和传统 SSD 超级块比起来,它可牛多了。以前超级块就像个黑盒子,主机没办法管里面的东西怎么放,现在 RU 这个小仓库,主机可以直接进去指挥,而且还支持随机写入,就像你可以随便把东西放在小仓库的任何地方。多个不同来源(不同命名空间)的数据,都能像不同班级的同学一起在这个小仓库里 “集合”。
- RG(回收组):它是 RU 的 “大集合”,通常对应 NAND 晶粒(Die),可以把它想象成一栋由多个小仓库组成的大楼。如果 SSD 采用超级块架构,那这栋楼可能只有 1 个 RG;要是按 Die 管理,每个 Die 就对应 1 个 RG。主机可以像管理不同楼层一样,针对特定 Die 内的 RU 进行写入控制。
- RUH(回收单元句柄):它是 SSD 内部管理 RU 的 “小助手”,像一个连接主机和 RU 的桥梁。一个命名空间可以和 1 到 128 个 RUH 交朋友,RUH 数量就像调节阀门,决定了 “写入并行度 - 资源占用” 的平衡。RUH 多了,主机操作更灵活,但可能会占用更多资源,就像人多了虽然热闹,但管理起来也麻烦;RUH 少了,性能更稳定,不过主机的操作就没那么自由了。
除此之外,FDP 还有放置句柄、耐力组、FDP 配置和数据放置指令等组件。
数据隔离策略
FDP 有两种 “隔离魔法”:
- 初始隔离(Initially Isolated):在数据写入的时候,就像给不同的数据贴上不同的标签,保证它们分开。但在后续的垃圾回收(GC)过程中,这些数据就像长大了的孩子,可以混在一起玩耍了。这种方式实现起来成本比较低,就像简单地分个组。
- 持续隔离(Persistently Isolated):从数据写入到最后,就像给数据建了一个个独立的小房间,全生命周期都隔离着。不过这样 SSD 就得花更多资源来维护,就像要给每个小房间都安排专人管理。
刚开始,FDP 设备可能大多会先用初始隔离模式,毕竟要在成本和隔离效果之间找到一个完美的平衡点,就像买东西要在价格和质量之间权衡一样。
工作机制详解
写入机制对比
如下图,
传统 SSD:
- 固件把 NAND 这个 “大房间” 划分成 SuperBlock 来管理,就像把房间划分为几个小区域。每个 SuperBlock 从所有 Channel,所有 Die 0 中取一个 NAND Block 绑定组合而成,这是为了 NAND 能同时编程并实现最大吞吐量而设计的。
- 固件只盯着一个 SuperBlock 写入指针(Write Position)。
- 主机根本不知道数据具体被放在 NAND 的哪个角落,就像你在一个大房间里找东西,却无从下手。
FDP SSD:
- 以 RU 为单位给 NAND 这个 “大房间” 重新划分,每个 RU 都是一个小区域。
- 每个 RU 都有自己独立的 Write Position。即 FDP SSD 拥有多个 Write Position。
- 主机可以根据 RUH 这个 “导航仪”,可以选择把数据写到哪个具体区域,此时的 Host 对这个大房间有了一定的方向感和空间感。
FDP 的效果
以 6 个小块组成的 Erase Block 为例,假设这是一个小收纳盒,深蓝色块是没用的东西(无效数据)。传统 SSD 进行 GC(清理收纳盒)的时候,因为东西乱放,可能得清理 3 个收纳盒才能腾出 1 个干净的,这就是写放大,WAF = 3,效率很低。而 FDP SSD 呢,数据都是按 RU(小仓库)隔离存放的,没用的东西都集中在一个收纳盒里,GC 的时候,只需要擦除 1 个收纳盒就能开始新一轮存放,WAF = 1。这种精细化的数据放置策略,就像把东西整理得井井有条,从根本上减少了 NAND 擦写次数。实验数据也证明,在典型场景下,FDP 能把 WAF 降低 60% 以上,效果超显著!
三、FDP 的现状与未来
目前 FDP 已完成标准化,并被 Linux 内核支持。三星等厂商已推出支持 FDP 的 SSD 产品,通过实际案例验证其在 CacheLib 等应用中的有效性。未来随着更多厂商加入,FDP 有望成为 SSD 数据管理的主流方案之一。
实际应用场景
- 企业级存储:数据库、虚拟化平台等对性能和寿命敏感的场景。
- 云存储:多租户环境下的数据隔离与资源优化。
- 边缘计算:减少设备功耗与维护成本。
总结
FDP 通过精细化的数据放置,在不牺牲兼容性的前提下大幅提升 SSD 效率,是 SSD 技术从 "硬件主导" 向 "软硬协同" 演进的重要里程碑。
Reference
NVM Express® Base Specification, Revision 2.2
FDP_Whitepaper_102423_Final