浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

看这名就知道文章特别干货,双端口对于SSD和数据中心来讲着实是个重要特性,Memblaze工程师汪洋倾力打造了上下两篇双端口文章,从应用模型、设计实现到可靠性和性能测试,都介绍一遍。这篇是上篇,介绍了双端口应用模式和设计实现。


双数据路径(或多路径)对企业级应用并不陌生。原来,电脑都通过单一路径连接到一个装置。随着时间的推移,这种实现模式逐渐暴露出了种种弊端。在单路径场景中,如果从主机到驱动器本身的数据路径受到破坏,则无法访问数据,这为双路径(或多路径)概念铺平道路。


SCSI设备是第一个使用两个物理连接实现双端口功能的设备。随着串行连接的SCSI(SAS)的出现,通过一个物理连接来实现双端口连接成为可能。由于双端口允许数据从两个端口独立传输,因此该技术可以为任何一条数据路径提供容错。双端口很快成为流行的配置。


随着NVMe SSD技术的飞速发展,双端口技术在企业级存储系统中的应用也成为必然,由于其在高性能高可靠性上的优势,有着更为广阔的前景及市场。


双端口NVMe SSD支持单个主机内存在的两条数据路径,同时通过两个控制器访问相同的存储设备实现冗余。在另一种常见的应用场景中,两个主机系统也可以同时使用双端口访问同一存储系统。如果在一条数据路径丢失时发生系统故障或电源丢失,可用的数据路径将继续运行,对业务连续无影响,就好像没有发生故障,对QoS的影响达到最小。

双端口应用模型

根据双端口应用的场景,可以分为双活,主从,以及链路冗余等模式。如下图所示,

浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

图1 - 双活模式


Server A 与server B分别通过PCIe switch连接同一块NVMe SSD,两者能够同时访问相同的存储空间,互相做存储数据的冗余备份。当然整个系统可以有多块PBlaze5,这要看服务器的配置而定。

浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

图2 - 主从模式


Server A 与server B 分别通过PCIe switch 连接到多块NVMe SSD,两个server通过心跳线互为双机热备,在一条路径失败的情况下,可以保证服务不中断。

浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

图3 - 链路冗余模式


一个Server分别通过两个PCIe switch连接到同一块NVMe SSD,相当于对数据链路做了冗余,在这种模型下,server可以看到2个x2的PCIe设备,即2个NVMe设备,通过操作系统本身的multiple path等技术使能链路冗余。


双端口设计实现

双端口PBlaze5 PCIe NVMe SSD既可以应用于常规的server采用单端口模式,提供PCIe3.0 x4的带宽,又可以接入双端口服务器自动适配成双端口模式,每个控制器达到PCIe3.0 x2的带宽。在双端口模式下,两个端口完全独立,控制器提供两组PCIe接口的端口寄存器,包括端口控制,端口状态,时钟状态寄存器。由于存储设备是独立供电的,每一个server完全独立于另一个server实现上电或者下电,互不影响。


浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

图4 - 单端口与双端口模式对比


另外,由于NVMe 协议支持multiple namespace,将multiple namespace扩展到双端口NVMe SSD将会使企业级存储系统更加灵活和多元化。


浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

图5 - multiple namespace下双端口模式


Namespace在NVMe协议里有详细的定义,Multiple namespaces是指根据盘的逻辑地址划分多个namespace空间,多个空间可以独立的进行格式化等操作,与双端口一样也是是PBlaze5的重要特性。下图是一个Linux中32个namespace的PBlaze5。(Multiple namespaces更多细节将由我们另一位工程师解读,这里不再赘述。)

浅析U.2接口NVMe SSD双端口模式(上)——应用模式与设计实现

这节就先写到这,后续有一个多图进阶篇,介绍双端口盘的可靠性测试,并展示双端口模式下各种场景中的性能效果。好看的还在后面。