本文主要是介绍字节跳动ZNS SSD应用案例解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、ZNS SSD基本原理
ZNS SSD的原理是把namespace空间划分多个zone空间,zone空间内部执行顺序写。这样做的优势:
-
降低SSD内部的写放大,提升SSD的寿命
-
降低OP空间,host可以获得更大的使用空间
-
降低SSD内部DRAM的容量,降低整体的SSD成本
-
降低SSD写延迟
-
ZNS写入了标准NVME协议,更易于打造软件生态,利于普及
与SMR架构类似,ZNS SSD的zone空间内部,也是追加写。每次顺序写完成后,有一个标记位“Write Pointer”来记录已经写过数据所在的LBA位置。
Zone的状态有以下几个:
-
Full:zone写满的状态
-
Empty:zone数据空的状态
-
Explicitly Opened:对zone执行open zone命令成功后的状态
-
Implicitly Opened:对处于Empty或者Closed状态的zone完成写数据后的状态
-
Closed:还未写满的zone,在close zone命令成功后的状态
-
Read Only:处于只读状态的zone
-
Offline:zone处于异常状态,可能是介质异常或者其他的问题
在Linux内核适配方面,针对zoned设备,之前针对SMR已经有ZAC/ZBC命令规范,并在4.10内核已经支持。针对ZNS SSD,在内核5.10以后也支持了ZNS SSD,软件生态已经基本完善。
在传统的SSD中,SSD控制器会搭配10-100个NAND Die存储介质,管理这些NAND介质就需要一个强大的算法,这里就有一个FTL管理层。
在这个过程中,ZNS SSD最大的优势是取消了块接口税(Block Inteface Tax)。
与传统Block SSD相比,性能更加稳定,不受OP的影响。
如果在文件系统层删除一个文件,比如下图文件C,在没有GC搬迁的情况下,会在无效数据C会占用大量的存储空间。
GC搬迁有效数据到空的block后,之前无效文件C所在数据块block就可以被整个block擦除了。
整个GC的过程最终导致写放大WAF的增加。写放大的增加相应对SSD带来的负面效应就是写带宽下降、读延迟升高、使用寿命下降等问题。
在ZNS的场景下,不同应用按照Zone配置信息,相应存放业务数据。主要集中在顺序读写的workload场景。由于是Host管理数据的摆放和存取位置,会最大程度减少GC垃圾回收。
减少SSD的DRAM空间和去掉OP冗余空间,提升用户可用的容量。
二者具体的优劣对比:
扩展阅读:NVMe SSD:ZNS与FDP对决,你选谁?
二、字节跳动ZNS SSD应用案例分析
字节给出未来数据中心的发展趋势,包括计算、网络、存储三大组件。
字节目前遇到云存储的痛点主要包括:性能、成本、稳定性、定制化。性能方面,SSD的垃圾回收在传统SSD并不可控。成本方面,传统SSD需要预留一定的OP预留空间。稳定性方面,出现异常后,传统SSD的定位周期很大程度依赖SSD厂商。定制化方面,目前主要有SGL、CMB、PMR、ZNS等。
在使用ZNS SSD的场景中,字节采用了软硬结合的方式整体优化。软件方面,负责GC,WL,NAND数据存放位置优化以及QoS优化。硬件方面,主要负责是底层NAND异常和NAND管理,以及CMB、PMR特性。
软件架构如下:NAND相关等盘体异常可以通过AER进行错误上报。
软件针对数据管理的架构:
利用分布式存储chunk管理,与Zone SSD映射关系如下:
通过分布式存储完成Host侧的垃圾回收GC:
Host在对ZNS SSD写数据过程中,有一个很重要的特性就是要支持写入数据最后一个LBA overwrite覆盖写,优化NAND存储空间,最终降低写放大。LBA覆盖写在ZNS标准协议是不支持的,需要定制化设计。
同时,对于有硬件,有两个重要的定制功能,是需要支持CMB和PMR。
CMB(Controller Memory Buffer),即控制器内存缓冲区,是SSD控制器内部用于缓存数据的动态随机访问存储器(DRAM)。它的主要目的是加速数据处理,减少读写操作的延迟。通过使用CMB,SSD可以预先将一部分数据缓存在高速的DRAM中,然后根据需要快速地从CMB中提供数据给主机系统,或者临时存储等待写入闪存的数据。
CMB的工作原理包括:
-
预取(Prefetching):当控制器预测到即将需要的数据时,会提前将其加载到CMB中,从而减少了实际从闪存读取数据的时间。
-
写回(Write-back):如果主机发出一个写入请求,而目标地址已经存在于CMB中,那么控制器可以选择先更新CMB中的数据,稍后再将修改后的数据写入闪存。这允许更快地响应写入操作,并且有助于提高整体性能。
在 NVME 1.4 SPEC引入了类似CMB的PMR(Persistent Memory Region),PMR的作用是提供一种内存级读写速度、断电后数据不会丢失的存储区域。它使用此功能创建并控制一个称为持久性内存区域(PMR)的存储区域,该存储区可以映射到PCI Express总线上的地址空间上面,并且可被主机和其他设备访问。PMR的主要特点是,在电源断电(power cycle),控制器复位以及PMR启用/禁用切换之后,写入PMR的数据也会保留。此功能使SSD除了提供通过逻辑块地址(LBA)访问的存储区域外,还提供了另一个非易失性存储区域,并且这块存储区域假定的访问方法是内存访问而不是块访问。
Zero Copy通过消除这些不必要的数据复制来提高效率。它允许数据直接从源缓冲区传输到目标设备,而不需要经过中间缓冲区。这样可以减少CPU的参与,释放更多的计算资源,并加快数据传输的速度。
SGL(Scatter-Gather List)是实现Zero Copy的一种方法。在这种机制下,应用将一系列分散的数据块(称为scatter-gather list)提交给设备驱动程序,而不是一个连续的内存区域。驱动程序则可以直接将这些分散的数据块传输到目标设备上,从而避免了在传输过程中对数据进行复制。
结合Zero Copy技术和SGL,可以显著提升存储系统的性能,尤其是对于需要处理大量小规模I/O操作的应用场景,如数据库、虚拟化环境和大数据分析等。
针对云数据中心对ZNS SSD的特别定制需求,字节跳动总结如下:
基于字节跳动公布的ZNS SSD的应用效果显示:可用容量提升30%,带宽提升3倍,成本下降20%。
这篇关于字节跳动ZNS SSD应用案例解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!