Linux开源存储全栈详解:从Ceph到容器存储
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 存储接口协议的演变

固态硬盘接口经历了SATA、mSATA、SATAExpress、M.2和U.2等多次革新,但这些都只是物理接口标准,也就是我们在外观上能够直接分辨的接口形式。至于难以通过外观直接判断的通信协议,则可以分为上层协议与传输协议两个方面的演变。存储接口协议如图2-8所示。

图2-8 存储接口协议

SATA接口最为原始,只支持SATA传输协议与AHCI上层协议。作为融合了多种协议的接口,M.2则能够兼容AHCI和NVMe两种上层协议,至于传输协议与传输层的布线有关,理论上一个M.2插槽既可以使用M.2 SATA传输协议的固态硬盘,也可以使用PCIe传输协议、NVMe上层协议的固态硬盘。M.2 SATA传输协议兼容性更好,而M.2 NVMe上层协议性能更佳。

AHCI的历史可以追溯到2004年,是在英特尔公司的领导下由多家公司联合研发的接口标准,它允许存储驱动程序启用高级串行ATA功能。相对于传统的IDE技术,AHCI能够改善传统硬盘的性能,它设计之初面向的就是机械硬盘,针对的是高延迟的机械磁盘的优化。因此AHCI不能完全发挥固态硬盘的优势,对Flash固态硬盘来说逐渐出现性能瓶颈,又因为非易失性存储是存储硬件的发展趋势,所以需要一种新的协议来突破AHCI的局限,于是NVMe顺势而生。

1.NVMe

NVMe或称NVMHCIS ( Non-Volatile Memory Host Controller Interface Specification,非易失性存储主机控制器接口标准)最早是由英特尔公司于2007年提出的。英特尔公司领衔成立了NVMHCIS工作组,成员包括三星、美光等公司,致力于使将来的存储产品从AHCI中解放出来。固态硬盘产品已经通过NVMe来取代AHCI发挥出极高的性能优势。

简单来说,NVMe就是能够使固态硬盘与主机通信速度更快的主机控制器接口规范。打个比方,假设你刚买了一辆超级跑车,能达到每小时400千米的时速,问题是,普通的道路不允许以这样的速度行驶,而且一般的城市道路限速为每小时几十千米,如果想要让跑车车速更快,那么就需要换一条路开。这个场景有点类似于固态硬盘推出之后存储行业的情况。闪存技术比传统的机械硬盘快很多倍,但是早期都是使用SATA或SAS将存储设备连接到系统和网络的,虽然对于硬盘驱动器来说,这些接口所能提供的性能已经足够,但是它们为固态硬盘带来了瓶颈。

这就促使人们寻找更好的方式将固态硬盘连接到主机,而这正是NVMe的用武之地。NVMe的主要特点如下所示。

· PCIe:NVMe使用PCIe总线来提供更大的带宽和更低的延迟连接。

· 并行性:NVMe SSD在很大程度上实现了并行性,极大地提高了吞吐量。当数据从存储设备传输到主机时,它会进入一个队列。传统的SATA设备只能支持一个队列,一次只能接收32条数据;而NVMe存储则支持最多64000个队列,每个队列有64000个条目。类似于跑车的例子,SATA就像只有一条车道的公路,可以容纳32辆车;而NVMe就像有6.4万条车道的公路,每条车道都能容纳6.4万辆汽车。当系统从硬盘驱动器读取数据时,一次只能读取一块数据。因为硬盘驱动器的磁头必须通过旋转移动到第一个数据块的正确位置,再次旋转移动到第二个数据块的正确位置,以此类推。但是闪存和其他非易失性存储技术没有移动部件,不需要旋转定位的过程,这就意味着系统可以同时从许多不同的位置读取数据。这就是为什么固态硬盘能够充分利用NVMe提供的并行性,而硬盘驱动器不能。

· 限速:SATA和SAS连接有比较低的速度限制,对于SATA理论上最大传输速度为6.0Gbps,超过一定限度,使用再快的闪存对系统的整体性能也没有影响。

2.NVMe-oF

在硬盘驱动器的时代,因为硬盘性能太低,所以要把很多硬盘堆在一起形成磁盘阵列,从而提供更高的性能或更大的容量。随着固态硬盘的发展,开始出现固态硬盘加硬盘驱动器组成缓存或分层,或者纯固态硬盘(全闪存)来满足应用需求的方案。

但是,随着NVMe SSD的普及,以及服务器本身能支持的固态硬盘数量进一步增加,本地的计算能力可能已经不能完全发挥固态硬盘的全部性能,计算或软件成为了性能瓶颈。

这个时候,就有两条途径:一是减少软件的开销,因此出现了SPDK;二是将计算与存储分离,把固态硬盘放到单独设备里面,把存储独立出来供很多主机共享。但是计算和存储分离了以后,却带来了带宽和延迟上的挑战,而这就是NVMe-oF要解决的问题。

NVMe-oF规范与NVMe规范大约有90%的内容相同,其实NVMe-oF只是在NVMe协议中的NVMe Transport部分进行了扩展,来支持InfiniBand、以太网及光纤通道等。

关于NVMe-oF,目前有两种类型的传输正在开发,使用RDMA的NVMe-oF和使用FC-NVMe的NVMe-oF。这里的RDMA包括了InfiniBand、RoCE(RDMA over Converged Ethernet)和iWARP(internet Wide Area RDMA Protocol),RDMA支持在不涉及处理器的情况下将数据传输到两台计算机的内存,并提供低延迟和快速的数据传输。从逻辑架构上看,与NVMe over PCIe相比,NVMe over RDMA在软件开销上的增加很小,可以近似地认为跨网络访问和本地访问的延迟几乎是一样的。