1、低延迟高吞吐的软件设计思考基于以上三个发展趋势,再谈谈这些存储系统技术发展所带来的思考。由于时间关系主要讲两点。第一就是多级存储介质下的存储软件要如何考虑——新器件的到来让存储器变成多级架构,还有传统数据中心变成了硬件池化架构,其软件系统需要考虑哪些问题。首先,随着NVMe SSD的产生,带宽变化很大,传统HDD带宽约为80MB到100MB/s,现在傲腾SSD能达到7GB/s,延迟也有数量级变化。硬件性能激增的同时也要求稳定性,因此请求带宽和延迟抖动相对来说较小。另一方面硬件并发度增加,让你能同时处理更多请求数,以上是硬件变化。还有接口变化,像传统闪存系统提供软硬件交互,支持4KB块接口访问,是普通的单接口SSD,软件性能相对效率较低,优化也比较难。然后像英特尔又推出了一款双接口SSD,里面除了提供块接口外还同时提供直访字节接口,这样在软件和可靠性上有所提升,我们也曾经在这方面做了相关一套软件,确实性能比传统要高的多。还有像三星推出一kuan专门针对键值接口的SSD,能进行定向优化键值存储,因为是定向专用,所以只支持键值存储,无法支持文件系统。从硬件变化到接口变化再看架构变化。传统软硬件分层设备有一个FTL(Flash Translation Layer)转换层,存在比如性能问题——功能冗余、语义隔离(包括里面存在的写放大),还有耐久性问题,但它是标准硬件。之后还有开放通道SSD,我们在软硬件协同设计方面做了十多年的工作,主要克服普通SSD的性能和可靠性系列问题,尤其在云/数据中心里面得到很多应用,能进行性能隔离和定向优化,其存在问题在于硬件改动较大。近两年,西部数据还推出了一款分区SSD,基于Open-channel SSD开放架构,主要是把Zone分出来做一个抽象,缓解普通SSD的可靠性,其性能介于前面第一类和第二类之间,优势是硬件改动相比开放通道SSD较少。硬件接口和架构产生变化之后还要考虑系统设计,旨在实现低延迟高吞吐软件设计。这种设计用于内核态、用户态,或者两者优势兼具的新操作系统,在业界还一直有争论,内核态提供标准化抽象和封装,但里面有很多场景切换,性能相对较低,还存在内核开销等问题,优势是兼容性强,安全性高。用户态支持直访,性能较高但存在安全和兼容性问题。还有一种内核态和用户态协同,包括清华等很多单位在这方面都在做探索。另外,随着硬件变快以及CPU核数的增加,很多传统串行技术,现在变为采用并行技术降低延迟,提高吞吐率。比如Linux的NVMe,软件和硬件串行操作,延迟较高,如清华采用ccNVMe,通过软硬件操作并行来降低延迟。在吞吐率方面,通过做多任务/应用聚合吞吐来弥补传统像三星F2FS在扩展性上的不足。高速存储和网络协同设计另一个是高速存储和网络协同设计。存储介质要与网络介质匹配,存储介质性能才会发挥到最大,因此像NVMe SSD,基本上是与RDMA网络构建系统,NVMe over RDMA在业内比较热门。我们在NVMe over RDMA方面有很多研究,特别是轻量存储池化软件的设计,其核心是绕开服务器网络栈,节省网络栈开销,尤其是能让数据从智能网卡直达SSD,提供高吞吐和低延迟便利。除此之外,如斯坦福大学还提出硬件辅助虚拟化来加速IO路径,华盛顿大学通过智能网卡卸载存储功能以便提升硬件性能。2、硬件资源池化下的系统软件大家知道传统数据中心是由很多的单一服务器互联起来,处理器和内存按照不同趋势发展(剪刀差),导致数据中心内存不足就要加服务器,CPU也跟着增加,其实我们只想增加内存,计算能力是足够的,同理,CPU不足,增加服务器也就增加了多余的内存,这样会导致资源利用率低下,部署不够灵活。当然还有采用一些分布式技术让多个服务器进行协同处理,但目前基本上这种计算存储任务执行还是局限于单个服务器,分布式技术还解决不了这些问题。解耦数据中心架构解耦数据中心的架构,即做硬件资源池化是一个理想化的想法,也是一种趋势。硬件资源池化就是在数据中心里构建不同池子,CPU计算池,内存池,存储池,这些资源池用高速网络连接起来,现在英特尔、惠普都有这方面一些研究。当然这些池子通过高速互联网连接,对网络存在很大的挑战。但这样的部署设计,CPU计算能力不足就扩展CPU池,内存不足就扩展内存池子,升级简单,硬件资源利用率更高。当然理想很丰满,最大的问题是高速网络,网络传输性能会对Rack-Scale落地有制约,当然现在有很多公司在这方面进行努力研究。还有一个全新的开放协议——CXL,近年来发展势头很猛,也成为解耦互联的主流协议,国内很多企业也加入其中。英特尔去年成立CXL联盟,发布了从1.0到1.1,到现在2.0的CXL规范,正在努力缓解解耦数据中心的网络。CXL科普CXL不同于无线网及数据中心网络的连接模式,是全新的网络协议,支持三种模式——访问外存设备、处理器访问内存、设备访问内存,在物理层和协议层做了很多重新设计,能提供高吞吐和低延迟。系统设计对应要考虑如何使用,这里涉及到操作系统和运行时系统,资源池化的操作系统设计要考虑怎么将操作系统里的任务切分给不同硬件组件去做,组件还要去中心化,还要做好局部性,让网络有更好的支持。另外需要提供这种虚拟机抽象给应用层兼容现有软件,这是操作系统层要考虑的。运行时系统则要首先考虑支持高级语言比如java,还要应对传统垃圾回收效率低的问题,进行分布式动态内存垃圾回收,还有一些公司在把垃圾回收卸载到内存节点上去做。纯硬件方面由于网络问题无法快速落地。清华团队是基于软件、逻辑的角度来构建一个分布式持久性内存存储系统TH-DPMS,通过RDMA把持久性内存统一进行互连,构建具有全局地址空间的内存共享池,对外可以提供内存访问接口,对象接口等服务,具有高性能和扩展性,编程简单易管理,安全性也比较高。