灵活数据放置 (FDP) 是 Google 和 Meta 提出的一项 NVMe™ 规范特性1。该特性的目的是减少多个应用在同一 NVMe SSD 上写入和修改数据时产生的写入放大 (WA)。对这些企业而言,较低的写入放大可带来诸多好处,包括可用容量更高(因为所需的预留空间更少)和设备使用寿命可能更长(因为磨损更少)。
我们提出了一项实验来确定 FDP 有多大帮助。在该测试中,我们使用了一个 7.68TB 的美光® 7450 PRO SSD,它分为四个容量相等 (1.92TB) 的命名空间来执行 Aerospike NoSQL 数据库的并行实例。Aerospike 针对 SSD 应用进行了高度优化,力求做到仅按顺序写入设备。这在运行单个实例时可实现非常低的写入放大系数 (WAF),但是当在同一物理设备上运行多个实例时,这些事务会混杂在一起,导致工作负载出现随机性。
每个 Aerospike 实例被配置为以不同的块大小(32KB、64KB、128KB、256KB)进行写入,以此模拟虚拟环境中不同的客户共享空间。我们还使用 4 个 1.92TB 的美光 7450 PRO SSD 单独运行了这些工作负载,我们将此视为 FDP 的最佳实现方式,即,所有应用数据都有专用的 NAND 空间,因此不会在设备上发生交错,如图 1 所示。
得益于 Aerospike 的优化,我们预计,当在自己的专用存储设备上运行单个应用实例时,写入放大系数将接近 1。通过运行 YCSB 工作负载 A(50% 读取/50% 更新)直到硬盘多次填满,我们证实了这一点。在理想情况下,大型设备上四个命名空间的行为应该与四个单独的设备相同。此场景下得到的数据布局如图 2 所示。
如果不采用 FDP,那么在 7.68TB 设备上运行多个工作负载时,硬盘不会按命名空间对 NAND 的空间进行划分,也无法确定在所运行实例的上下文中,应该将哪些 Aerospike 数据分组在一起。交错意味着从硬盘的角度来看,工作负载实际上变得更加随机,即使每个工作负载按顺序运行也不例外,如图 1 所示。 随着随机性的增加,我们看到,当四个实例在同一个不采用 FDP 的设备上运行时,写入放大系数会相应地增大至 1.84,相比之下,如果将它们分别在其专用设备上运行,该系数仅为 1.08,如图 3 所示。
虽然这只是一项基础实验,但它证明了在未来设备中采用 FDP 可能带来的好处。我们还可以看到,一些被设计为尽可能按顺序写入的应用在争夺同一硬盘资源时会如何从 FDP 中受益。
1 Chris Sabol (Google) 和 Ross Stenfort (Meta) 在 NVMExpress 演讲中提供了更多细节,具体请参见 https://nvmexpress.org/wp-content/uploads/Hyperscale-Innovation-Flexible-Data-Placement-Mode-FDP.pdf。