现代SSD不直接寻址NAND,而是通过固件实现逻辑地址到物理地址的间接映射,以优化性能和耐用性。固件需要维护逻辑地址表,映射每个逻辑地址到对应的物理位置,考虑NAND的物理特性,如芯片、带区、页面和扇区。每个条目通常约为4字节。
制造商在间接表空间和粒度之间权衡,通常基于8个扇区的单位(IU),即4KB。这意味着固件以4KB为粒度进行地址转换,而主机CPU可以以更小的粒度进行访问。这种设计降低了映射成本,但可能影响SSD的写入性能和耐用性。
Indirection Units(间接寻址单元,IU) 是用于管理闪存存储器中数据映射的一种结构,特别是在固态硬盘(SSD)中。它们的主要作用是将逻辑地址映射到物理地址,帮助管理和优化数据的读写过程。
随着SSD NAND容量的增加,IU表也随之增大。例如,4KB IU每TB需约1GB表空间。为了减少表空间需求并降低DRAM成本,可以增加IU大小,如8KB和16KB,但这会对小于IU大小的写入性能产生负面影响(WAF)。因此,制造商必须在表空间需求与性能之间找到平衡。
WAF(Write Amplification Factor) 是衡量闪存存储器(如SSD)在写入操作时实际写入数据量与用户请求写入数据量之间的比例。WAF越高,意味着SSD需要执行更多的写入操作,这可能导致性能下降和寿命缩短。 在SSD中,WAF问题尤为重要,因为闪存具有有限的写入周期。高WAF会加速闪存单元的磨损,降低SSD的使用寿命。此外,WAF还会影响SSD的性能,特别是在随机写入负载下。因此,优化WAF是设计高性能、长寿命SSD的关键因素。
为什么会出现WAF?HDD就没有这种现象吗?
WAF的出现主要是因为闪存存储器(如SSD)使用了“页”作为基本写入单元,而闪存的擦除操作是以“块”为单位进行的。这意味着,如果要更新存储在某一页的数据,闪存必须先将整个块的数据读出、修改,然后写入新的块,导致实际写入的数据量远大于用户请求的写入量,从而产生WAF。
相比之下,HDD(硬盘驱动器)以扇区为基本写入单位,数据的更新和删除可以直接在原位置进行,不需要像SSD那样进行块擦除和写入。因此,HDD并不存在WAF问题,写入效率通常较高,且不受写入周期的限制。然而,HDD的随机写入性能较差,整体性能不如SSD。
原理与测试数据
展示了不同大小的输入/输出(IO)在16KB IO单位(IU)下对写放大因子(WAF)的影响。较小的IO(如4K)导致较高的WAF,而较大的IO(如512K)则对WAF的影响较小。
16K IU 引起的写入放大因子(WAF)主要影响未对齐的写入操作,且对读取操作没有影响。影响随着写入大小的增加而显著降低,文件系统通常会聚合写入以减少 WAF。不同的写入大小对应不同的 WAF 值,较大的写入大小导致更低的 WAF,最终引起的 WAF 在一定条件下可以带来容量和成本的优势。
实际业务场景IO一般要经系统自带的优化,如小IO聚合后才写入SSD,图中显示了基于IO数量和数据容量两种标准下的测试结果,Avg Size一栏显示了这些业务场景基准测试过程中实际写入IO大小,可见:
要点总结
本文档探讨了16KB Indirection Units(IUs)对现代工作负载的影响,特别是在闪存存储设备中。
通过分析不同大小和类型的写入操作,文档展示了即便是在最不利的情况下,实际的WAF值也远低于理论上的最大值,并且对于大多数工作负载来说,这种影响是可以接受的。特别是,对于那些倾向于聚合大块数据并进行批量写入的应用程序,16KB IUs实际上可以提供更好的性能和成本效益,而不会显著增加WAF。
---【本文完】---