我们先来科普一下PCIe,NVMe,PCIe SSD这些概念。
PCIe简介
尽管老男孩已经介绍过了,阿呆还是再提一下。
如果数据是汽车,那么PCIe就是高速公路了,每个车道叫做Lane,车道有x1, x2, x4, x8, x12, x16, x32几种模式,就是有这么多条车道,速度就是相应的倍数。所以PCIe在性能上的扩展性很不错。
下面是从第一代到第四代PCIe每个Lane的性能。PCIe 1,2采用8b10b编码,就是10个bit有2个校验位,PCIe 3之后是128b/130b编码,130个bit才有2个校验位,效率更高。其实这是一个趋势,Intel的Omni Path Architecture(OPA)接口也用了较少的校验码。OPA的码率是1024/1056=64/66b。对于数据,Intel用了数据扰乱技术,使得奇偶校验能更好地发挥,同时也不用做额外的编码和冗余数据。扰乱其实就是把数据打乱,让有序的数据变得随机,0和1随机分布,而不是连续出现,出错的概率会降低。阿呆的理解是频谱变宽了,噪声平摊到某个频段就降低了。
NVMe简介
NVMe目前有两个协议:
- NVMe Over PCIe
- NVMe Over Fabrics (RDMA和Fibre Channel,冬瓜哥说过,FC != 光纤)
NVMe协议有以下优点:
- 命令集简单。如果你用过SATA或者SCSI命令集,就会明白NVMe多么简单。
- 命令是64字节,命令结束的通知是16字节。
- 支持多核,同时各自相互独立,不需要上锁。其实就是我们以前说过的多队列。
- 命令深度相当深,时间上来说跟无限差不多。
- 支持乱序发命令和执行。
NVMe PCIe SSD形式
如下图,NVMe SSD目前有三种形式:
- PCIe闪存卡,就是插在PC PCIe插槽上,扩展性,容量和散热都不太好。
- NVMe盘。U.2就跟普通硬盘一样,可以插到硬盘插槽,和SATA,SAS兼容。集成度高,数据共享方便,是未来的趋势。
- M.2。就是个长条,个头小,适合消费电子,比如笔记本,平板之类的。
如下图,NVMe SSD既可以直接连到主机,也可以通过PCIe交换机扩展,连很多NVMe SSD。图里面的DP是Downstream,UP顾名思义,就是Upstream。
PCIe SSD也能组网?
不要以为PCIe只是主机到设备的接口,它其实也可以联网!如下图,在PCIe交换机的帮助下,四台主机,10个NVMe SSD组成了一个存储网络。
看得出来,PCIe SSD组网的关键就是PCIe交换机,下面我们来介绍常见的几种PCIe交换技术。
非透明桥NTB
我们知道一个PCIe RC root complex出来之后就是个PCI地址域,只能是这个地址域里面的组件相互通信。但是两个PCI地址域之间怎么通信呢,通过非透明桥Non Transparent Bridge,能够把地址域进行转换,变成另一个PCI地址域地址,实现两个PCI域通信。
动态分区
Dynamic Partitioning,这个阿呆了解不多,根据网文的意思,是根据配置,可以把任何一个NVMe SSD分配到不同的Host,实现一个盘被两个Host访问。跟Multi-Root技术有点像,就是动态调整NVMe SSD的RC。还有个Multi-cast技术,一个Host的命令可以发到多个NVMe SSD,实现多个数据备份。
SR-IOV
物理模块 (Physical Function, PF)
用于支持 SR-IOV 功能的 PCI 功能,如 SR-IOV 规范中定义。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 设备一样进行发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。
虚拟模块 (Virtual Function, VF)
与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 仅允许拥有用于其自身行为的配置资源。
每个 SR-IOV 设备都可有一个物理功能 (Physical Function, PF),并且每个 PF 最多可有 64,000 个与其关联的虚拟功能 (Virtual Function, VF)。PF 可以通过寄存器创建 VF,这些寄存器设计有专用于此目的的属性。
一旦在 PF 中启用了 SR-IOV,就可以通过 PF 的总线、设备和功能编号(路由 ID)访问各个 VF 的 PCI 配置空间。每个 VF 都具有一个 PCI 内存空间,用于映射其寄存器集。VF 设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的 PCI 设备。创建 VF 后,可以直接将其指定给 IO 来宾域或各个应用程序。此功能使得VF可以共享物理设备,并在没有 CPU 和虚拟机管理程序软件开销的情况下执行 I/O。
上图中每个VF有自己的Namespace,也有共享的Namespace E。下图中,每个虚拟机有一个NVMe驱动,可以访问NVMe SSD中的VF,不需要物理机的NVMe驱动支持,就能直接访问NVMe SSD。
多主机系统
如下图,两个PCIe Switch级联,这样有四个主机都能访问系统中的每一个NVMe SSD。
PCIe SSD网络
刚刚我们还停留在系统层次,但是为了多卖PCIe Switch,Microsemi绘出了更加美丽的蓝图——一张PCIe SSD的大网,网络的连接点就是很多PCIe Switch。太强悍了,每个主机都能高速访问几十上百个SSD,数据大家共享,相比以太网或者Infiniband,又获得了低延时和低成本。从价格到性能都是完胜目前的其他连接形式。真的是独孤求败!下图显示了PCIe网络相比以太网,Infiniband等的最大优势:延迟短。
不过你要真想这么搞,可要做好牺牲的准备,毕竟,没有一个产品一诞生就是完美的,很多想不到的坑需要前驱者去填。美丽的蓝图为什么往往难以实现?因为要做的事情太多,每一个改变都很艰难。一张白纸,能画出最新最美的图画。但是,刚走出森林的人类,花了几百万年才有了文字。
要实现上面这个PCIe SSD网络,你需要做:
- NVMe SSD能够被很多主机分享:怎样划分Namespace,怎样解决冲突问题,怎样分配带宽,怎样动态切换到不同主机?
- 主机之间通信:既然是网络,那主机之间也得有通信机制,互相同步。一般使用高速以太网,RDMA形式。
- 如何管理?这么多PCIe Switch,每一个的端口和路径怎么配置?NVMe SSD怎么分配?
- 故障处理:Switch,SSD,Host都有可能挂掉,需要做好故障处理。
PCIe存储网络优缺点汇总
类别 |
PCIe网络 |
说明 |
成本 |
低 |
比Inifiniband便宜,不需要昂贵的Switch和HBA |
复杂度 |
高 |
尽管主机端和NVMe SSD都是现成的,单是PCIe Switch并没有标准化,是个潜在的复杂点 |
性能 |
高 |
高带宽,低延迟,完美 |
功耗 |
低 |
没有复杂的网络协议开销 |
标准化 |
很标准 |
标准主机和NVMe SSD |
扩展性 |
有限 |
不能超过256个SSD和128个主机 |
引用
http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2016/20160808_PreConfD_Onufryk.pdf