【冬瓜哥画PPT】最完整的存储系统接口/协议/连接方式总结
声明:只要在本页面底部赞赏2元或以上者,冬瓜哥便将本文中的配图PPT原稿推送给你,每天晚上在公众号上统一对已打赏的朋友推送原稿。来吧,兄弟们!!
上周,冬瓜哥写过一篇各种存储接口协议总结,不过是篇比较初步的。本次,冬瓜哥打算图文并茂的完整总结一下常见的存储协议接口连接器。
一.顶层协议描述了什么
在存储系统中,上层协议可以泛指“指令”,也就是比如“读出从某某开始的多少长度的扇区”,读/写类指令包含三大关键信息:
1. 操作码,OperationCode,或者称为OP code。比如Write,Read,Control(Inquery,Standby等等)。
2. 起始地址:从哪开始读。如果是文件的话,精确到字节。如果是硬盘的话,精确到LBA(扇区)。
3. 长度:从起始地址往后多长的一段字节或者扇区。
二.下层协议及接口又是做什么用的
那么,指令如果传递给对端的设备?你可以自己将上述指令的二进制码再编码一下,用手电筒的量灭传递给对方,传对方收到之后闪一下手电筒表示已经收到。此时,手电筒编码、收到后怎么表示收到,这也是一种协议,属于传输层协议。而手电筒就是物理层的接口,最终通过物理层,也就是光在真空中传播来将信息发送到对方。
同理,SCSI指令/协议和NVMe指令/协议,是存储系统面向机械盘和固态介质分别开发的两种上层协议。它们可以被over到传输层协议+网络层/链路层/物理层接口上传输到对方,比如scsi over fc,scsi over sas、[(scsiover tcp)over ip] over ethernet(iSCSI), scsi over RDMA over IB(SRP), scsi over tcp over ip over ib。以及NVMe over PCIE over 标准插槽、NVMe over PCIE overM.2接口、NVMe over PCIE over SFF8639接口等等。
NVMe最好是直接over到PCIE上,因为目前来讲,PCIE的物理层+链路层+网络层+传输层还是非常高效的,算是开放式IT设备外部IO总线里速率较高使用最广泛的。当然,如果为了扩展性考虑,也可以把NVMe overTCP/IP over 以太网,或者NVMe over RDMA over 以太网/IB,或者NVMe Over FC等等。
底层接口,同样是手电筒,有人用灯丝灯泡的,有人用led的,有人用袖珍的,有人用手提的,有人用头戴的。这就是接口不同,但是它们传递的信息编码、物理层,都是一样的。比如,PCIE可以用标准插槽,也可以用自定义的插槽,但是里面的信号针脚数量都是一样的。
三.各类存储系统使用的协议及接口一览
存储系统中的硬件物理接口,包括:
1. SCSI协议及接口:最原始的上层协议及底层接口标准。有人可能蒙掉了,SCSI不是上层协议的名字么,为何底层物理接口也叫SCSI?因为SCSI这个标准最早的时候把上层协议一直到底层传输协议、网络层、物理层全给定义了。下图就是SCSI体系设备侧的接口物理形态。目前已被淘汰。其定义了:表示层到物理层。
2. IDE协议及接口:承载ATA协议。面向消费级,与SCSI接口处于同一个时代。同属并行总线接口,最大接2个设备。物理层速率比同时代SCSI接口低。目前已被淘汰。其定义了:传输层到物理层
3. FC协议及接口:用于存储系统时则承载SCSI协议,理论上可以承载任何上层协议。分为FCAL和FC Fabric两种网络层拓扑。磁盘接入的是FCAL拓扑。物理层接口如下图所示。为了满足企业级对可用性的要求,FC盘被作为双数据接口,接入两个成环器再各自上联到FC控制器上。图中所示的接口中包含两套数据针脚。其定义了:传输层到物理层
4. SATA协议及接口:仅用于承载ATA协议。其用于取代IDE接口。属于串行总线,每个通道只能接入一个设备,采用特殊的Mux可以复用多个设备。下图中左侧为数据口,右侧为供电口。数据口有三根地线和两对差分线。供电口有不同电流的多路冗余供电。其定义了:传输层到物理层
5. SAS协议及接口:在存储系统中用来取代FCAL接口。目前速率为12Gb/s,支持交换式组网,电路交换,不能成环。其定义了:传输层到物理层。SAS和SATA的连接器看上去差不多,仔细观察会发现SATA连接器中间的缺口在SAS上是被补平的,其反面其实还有7根数据线,这就是企业级冗余所要求的双端口,这第二个数据口接入到第二个SAS控制器或者Expander上。
6. PCIE协议及接口:承载PCIE传输协议。其可承载各种上层协议。用于存储系统时,一般直接承载NVMe协议,也可以承载SCSI协议,但是后者没有普及。其定义了:传输层到物理层。目前PCIE设备侧连接器形态主要是标准插槽或者SFF8639(U.2)。
7. emmc协议及接口:没有连接器,直接从flash颗粒管脚以贴片的方式与emmc控制器的管脚相连。承载emmc上层协议(与ATA/SCSI/NVMe处于同一个阶层)。底层物理层采用并行总线。emmc与早期scsi的做法类似,从顶层协议到底层物理层全都定义了一套自己的标准。其定义了:表示层到物理层
8. ufs协议及接口:没有连接器,直接从flash颗粒管脚以贴片的方式与ufs控制器的管脚相连。底层物理层采用串行总线。上层协议采用ufs协议(与ATA/SCSI/NVMe/emmc处于同一个阶层)。ufs与早期scsi的做法类似,从顶层协议到底层物理层全都定义了一套自己的标准。其定义了:表示层到物理层
三. 连接器
上述的SCSI、FC、SAS等各种协议都相应定义了自己的物理层连接器形态。但这并不意味着某种连接器只能承载当初定义它的那个协议。比如,SATA连接器可以承载以太网物理层信号,RJ45连接器可以承载串行通信协议物理层信号。SAS协议定义的HD miniSAS连接器可以承载PCIE物理层信号,等等。有个原则就是,为高速率传输协议定义的连接器,可以承载低速率传输协议,反之则不行。
1. 上述各种协议原生定义的连接器,不再多描述。
2. SAS方面,由于引入了Expander,外置端口形态在早期比较多,但是到12Gb速率时代之后,逐渐统一成HD miniSAS类型的连接器,如下图所示,分内口和外置口两个版本。miniSAS逐渐不再用。
3. U.2连接器(SFF8649连接器),其中包含SAS、SATA和PCIE x4三套接口,充分利用空间,将三套金手指信号做到接口上,各干各的。意味着可以插入一块SAS或SATA或PCIE盘。样子乍一看和SAS差不多,但是别搞混了,还是有差别的。U.2实质上是一种combo组合接口。其定义了:连接器
4. M.2连接器广泛用于平板电脑里的固态存储介质。其底层可承载PCIE传输协议,然后可以SCSI over PCIE,NVMe over PCIE。其也可以直接跑SATA信号
总结一下:
顶层协议 | 传输层协议 | 物理层接口/连接器 | 端到端 |
SCSI (面向机械盘) | SCSI FC SAS TCP(over IP) RDMA oE/oIB TCP(over IP) | SCSI FC SAS Ethernet Infiniband | SCSI over SCSI over SCSI(Phased out) SCSI over FC SCSI over SAS SCSI over TCP/IP over Ethernet (iSCSI) SCSI over RDMA over IB(SRP) SCSI over TCP/IP over IB |
NvMe (面向固态盘) | PCIE
| PCIe standard M.2 SFF8639(U.2) | NvMe over PCIE over standard interface NvMe over PCIE over M.2 NvMe over PCIE over SFF8639 |
ATA (For PC Disk Drive) | ATA SATA | IDE SATA M.2 | ATA over IDE(Phased out) ATA over SATA |
EMMC UFS | EMMC UFS | EMMC UFS | full end to end, not overed to other transportation protocol yet |
(注:上表由热心网友yvonne.cai整理,特此致谢!)
四.各类存储系统控制器/HBA一览
通信是双方的,上文中大家看到的只是硬盘/外设一侧的接口形态,所有设备必须被接入到IO通道控制器上,比如IDE需要接入到IDE控制器,SATA盘需要接入到SATA控制器,SAS接入到SAS控制器,SCSI、PCIE等各自也都有各自的控制器。这些IO通道控制器在后端通过各自的连接器将1个、2个或者多个设备通过各自不同的总线方式挂接上,在前端则通过PCIE或者内部私有总线与系统IO桥相连,IO桥在通过更高速的总线连接到CPU。所以这类控制器又被称为总线适配器,如果将这类IO控制器做成一张板,插到PCIE槽上与IO桥相连,则称之为HostBus Adapter,HBA。当然,PCIE控制器是直接集成到CPU里的,PCIE设备是直接连接到CPU而不需要HBA,最多用个连接器转接板将CPU上的PCIEIO管脚连接到外部连接器或者插槽上。
1. SATA、IDE、PCIE、emmc、ufs这些协议的接口控制器,由于太过常用,一般都被集成到系统IO桥芯片中了。不需要转接到PCIE外扩出HBA来。
2. SCSI HBA
3. FC HBA
4. SAS HBA
5. 以太网HBA
6. Infiniband HBA
IB体系习惯把HBA叫做HCA(HostChannel Adapter)
五.带Raid功能的HBA被称为Raid卡
在HBA上增加或者增强对应资源,比如嵌入式CPU、板载DRAM、硬加速计算逻辑等,便可实现各种Raid了,此时HBA上报给OS的并不是其下挂的物理资源,而是经过Raid虚拟化之后逻辑资源。由于提升了并发性,增加了Write Back模式的缓存并加以电池或者超级电容保护,这些逻辑资源拥有更高的速度、更好的时延和更好的可靠性。
1. SCSIRaid卡
2. SATARaid卡
3. SAS Raid卡
六. SAS/SATA硬盘、HBA、接入到服务器中的方式
下图是最早期的SCSI硬盘的接入方式,由于采用总线结构,背板可以做成无源背板,而且走线十分方便,大部分导线被焊接到背板的PCB上,只留一个链接器连接到SCSI HBA/Raid卡即可。由于SCSI底层接口已经被淘汰,不多描述。
1. SAS卡直连无源背板形式。该形式下,SAS卡(不管是HBA还是带Raid功能的HBA)采用x4的线缆直接连接到背板上的连接器,背板上每4个硬盘接口被导入到一个x4的连接器上从而直接连接到SAS卡。也就是说,如果有16块盘,那么背板需要出4个x4连接器,分别连接到SAS卡一侧的一个x4连接器上,前提是SAS卡必须支持对应数量的直连设备。目前Adaptec的12Gb SAS HBA可以单芯片最大直连16个SAS设备,为接入密度最大的产品。
2. SAS卡连接带Expander的有源背板形式。有些型号的SAS卡最大只能直连8个设备,而有些服务器比如Dell R910,其前面板有12个硬盘槽位。此时,只能靠SAS Expander(简称EXP)了。12个槽位先连接到EXP上,EXP再出1个或者2个上行的x4口连接到HBA上。下图就是Dell R910的带SASEXP的背板。
3. SAS卡连接Expander子板再连接无源背板的形式。有些时候服务器厂商不想为了增加一个Expander而再制作一款背板,而是想利用现有的无源背板,比如支持16盘位的无源背板,再加上一小块子板,将Expander放在这个子板上,再将这个子板与SAS HBA及背板分别连接起来。下图是Dell R730服务器的硬盘连接部分的俯视图。可以看到那块黄色的子卡,其背面有一块SAS Expander芯片,北向采用4个x4接口连接到SAS HBA,南向采用连接器与无源背板相连。
4. SAS卡直连设备无背板形式。这种形式下,SAS/SATA盘直接放到服务器托架上,比如PC机,不提供背板。此时需要使用1分4的线缆,x4那头接到SAS卡上,分出来的4个数据口分别接一个SAS/SATA设备。 1分4的线缆如下图所示。
5. SAS连接到服务器机箱外置的JBOD形式。这种形态并无本质上的变化,只是要求HBA提供外置接口,用外置线缆,硬盘和背板放到单独的箱子中。一般JBOD上的背板都是带Expander的,这样可以只保留一两个上行接口即可。
七. NVMe固态盘、PCIE转接卡、PCIE交换芯片接入到服务器中的方式
1. 全Combo形式。如下图,24个插槽均为SFF8639也就是U.2接口,这就意味着不管是插SATA/SAS还是NVMe SSD到任何一个槽位,混差,数量配比不限,系统都可以识别到对应的硬盘,也就是所谓三模式(Tri-mode)。所以,每个接口必须将对应的金手指触点真的连接到对应的控制芯片上,如下图,每个插槽均连接SAS信号到SAS HBA以及PCIE信号到PCIE Switch芯片。这样做的成本当然是非常高的。
2. 只有固定槽位支持全Combo盘的形式。如下图,同样是这24个插槽,同样均为SFF8639也就是U.2接口,但是只有最后的4个槽位同时支持三模式Tri-mode,其余的20个槽位只支持SAS/SATA盘。
3. 只有固定槽位支持NVMe盘的形式。为了进一步节省成本,服务器厂商还可以让少数几个槽位只支持NVMe固态盘而不支持SAS/SATA,虽然依然是U.2接口,上面依然有对应的SAS/SATA的金手指信号,但是这些信号是被空置在那里的,没有连接任何上游的芯片。只有PCIE对应的针脚会被连接到上游芯片。而由于只有比如2个、4个NVMe Only的槽位,按照每个NVMe固态盘使用x4 Lane的PCIE接口的话,4个盘共需要16个Lane,可以将这16个Lane对应的金手指信号直接连接到CPU,也就是连接到主板上的一个x16的槽位上。所以,需要一块连接器转接卡先插到主板的x16 PCIE插槽上,转接板下游再出4个x4的miniSAS或者HD miniSAS连接器,然后用线缆连接到该连接器,线缆另一端再与硬盘背板上对应的miniSAS或者HDminiSAS连接器相连,这样就是下图所示的拓扑了。
该服务器是一台戴尔服务器上的第一代 Express Flash PCIe SSD,以及PCIe 2.0的转接卡。散热片下面的是一块信号Repeter/Relay,其内部就是大量的三态缓冲门,为了增强信号质量,增强信号电流。
八.Dell R930服务器的硬盘连接方式简析
Dell R930服务器是一台最大支持4路CPU,提供最大24盘位的高端服务器。在硬盘配置方面,其提供了3个不同的背板,4盘位SAS/SATA背板,24 SAS/SATA盘位背板,以及16 SAS/SATA盘位+8 NVMe固态盘位背板。下面我们就来说说最后这种SAS和NVMe混布的选择。
下图就是配置了该背板的服务器前视图。可以看到竖插的12块SAS/SATA盘和左右两边最下方的各两块横插的SAS/SATA盘;以及左右两边上方的各4块NVMe固态盘。
对于NVMe盘位,其采用了NVMe Only的方式而不是Combo方式,也就是说这8个NVMe插槽只有PCIE信号被接入了系统中,SAS信号空置。如下图所示,可以看到每一边的4个U.2插槽上的x4 PCIE Lane信号被分别连接到一个HDminiSAS连接器,两边各4个。再采用对应的线缆连接到分别连接到一块PCIE连接器转接卡上,插入到主板的x16插槽中。
下图中可以看到这两块PCIE连接器转接卡的样子,其插在了服务器的最后方。
可以看到散热片下面的信号中继芯片,以及右侧的对应的4个HDminiSAS连接器。
Dell R930服务器在前部还提供了一个特殊的托架,这个托架中可以安置两块子板,每个子板上有一片SAS Expander。由于戴尔R930配备的SAS HBA/Raid卡最大只能支持8盘直连,所以当配置的SAS硬盘数量大于8块时,必须增加SASExpander。该Expander子板采用连接器的方式与背板相连,从而与硬盘信号对接,上游提供对应的HDminiSAS连接器,通过线缆连接到其PERC9 Raid卡上。该托架可放置两块Expander子板,这样就可以将所有SAS/SATA硬盘分两部分分别接入到其中一块Expander,提升SAS链路的并发度。同时,R930支持插两块PERC9 Raid卡,那就可以分别接一块Expander子卡,进一步提升存储系统性能了。
最后,还有一种利用PCIE Switch将存储部分接入系统的方案,比如,在Dell PowerEdge FX2平台上,就使用了支持Partition功能的双PCIE Switch,具体可以参考冬瓜哥的另一篇文章:《PCIE交换芯片及在戴尔PowerEdge FX2平台上的应用》
声明:只要在本页面底部赞赏2元或以上者,冬瓜哥便将本文中的配图PPT原稿推送给你,每天晚上在公众号上统一对已打赏的朋友推送原稿。来吧,兄弟们!!