字节给出未来数据中心的发展趋势,包括计算、网络、存储三大组件。
字节目前遇到云存储的痛点主要包括:性能、成本、稳定性、定制化。性能方面,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%。