问题
云本地磁盘以其实惠的价格和高性能而极具吸引力。在云本地磁盘中,物理存储设备直接连接到计算服务器,并作为块设备虚拟化到虚拟机(VM)。在这种设置下,计算节点受其有限的计算和存储资源的限制,只能提供有限数量的VM(也称为ECS实例)。
随着CPU的性能的快速增长,促使进一步复用资源,为每台服务器提供更多实例。然而,这种想法受到存储设备发展的限制。一方面,硬盘驱动器拥有高密度,但带宽仍在每个驱动器250MB/s左右,从而阻止本地磁盘在实现相同服务级别目标(SLO)的同时增加容量。另一方面,高性能存储类内存(SCM)固态硬盘,提供了有竞争力的性能,但存储容量有限,成本高得多[22]。
一种新方法是采用新兴的QLC SSD[26,32,39,40,50]作为本地磁盘。QLC固态硬盘的高密度(比SLC高4倍)和低成本(不到SLC的1/4)提供了可接受的大容量。
本文方法
本文探讨了利用基于QLC的高容量固态硬盘制作云本地磁盘的可能性。并进行了三次初步的尝试:部署QLC SSD作为替代品,使用高性能SSD(HP-SSD)构建分层系统(即OpenCAS[8]),使用dm分区(内核设备映射器)[4]。但QLC固态硬盘不能简单地作为替代品,原因有两点:
-
QLC SSD采用粗粒度的逻辑到物理(L2P)映射(例如,Intel P5316 QLC SSD中的64KB间接单元[21,26,28,51])。64KB比传统NVMe SSD中的4KB L2P条目大得多,从而导致高设备级写入放大(即,4KB逻辑写入变为64KB NAND写入)。
-
使用闪存转换层(FTL)管理QLC内部的地址映射,导致垃圾收集的严重NAND级写入放大,因为具有不同寿命的数据混合在一起[17]。
基于以上经验教训,本文提出了CSAL,即阿里云的下一代云本地磁盘。CSAL需要大约3GB的DRAM用于内存数据结构,管理HP-SSD作为写缓冲区,并使用大容量分区命名空间(ZNS)QLC SSD进行持久性。
-
设计了两级L2P表,以实现细粒度(4KB)数据访问,从而减轻设备级写放大。
-
周期性执行压缩,将冷数据聚合为对底层ZNS QLC SSD的大顺序写入来回收写入缓冲区空间。压缩是由用户(即VM)进行的,因此可以尽最大努力减少NAND级别的写入放大。
开源代码:https://github.com/spdk/spdk
实验结果表明,CSAL始终以优异的性能占据优势,在微观、应用和部署基准方面,与排名第二的方法相比,CSAL分别可以实现2.22倍、1.82倍和2.03倍的加速。
总结
本文针对云本地磁盘,探讨利用QLC SSD的可能性,通过三次初步实验分析了主要的性能瓶颈:(1)QLC SSD采用粗粒度的逻辑到物理(L2P)映射(64KB),比传统NVMe SSD中的4KB L2P条目大得多,导致高设备级写入放大。(2)使用闪存转换层(FTL)管理QLC内部的地址映射,导致垃圾收集的NAND级写放大,因为不同寿命的数据混合在一起。本文提出CSAL,使用大约3GB的DRAM用于内存数据结构,使用HP-SSD作为写缓冲区,使用大容量分区命名空间(ZNS)QLC SSD进行持久化。包括两个技术:(1)两级L2P表,以实现细粒度(4KB)数据访问,减轻设备级写放大。(2)周期性执行压缩,将冷数据聚合为对底层ZNS QLC SSD的大顺序写入来回收写入缓冲区空间,减少NAND级别的写入放大。