前言
协议是通信计算机双方必须遵守的一组约定,如怎么样建立连接、怎么样互相识别等,只有遵守这个约定,计算机之间才能相互通信交流。
协议不仅仅要定义双发互相通信所使用的语言,还要规定所使用的硬件、传输介质、传输协议以及各自的接口技术等。
SCSI
SCSI协议简介
SCSI即小型计算机接口(Small Computer System Interface),指的是一个庞大的协议体系,到目前为止经历了SCSI-1/SCSI-2/SCS1-3变迁。
SCSI协议定义了一套不同设备利用该框架进行信息交互的模型和必要指令集。
SCSI协议本质上同传输介质无关,SCSI可以在多种介质上实现,甚至是虚拟介质。

SCSI的参考文档是一个大的集合,大致分为三类:设备/模型/链路。
- SCSI体系结构文档:包括了基本架构模型SAM和SPC文档,描述了SCSI整体架构细节,如任务队列模型,基本共有指令模型等。
- SCSI设备实现文档:包括了具体设备实现,比如块设备(磁盘)SBC,流设备(磁带)SSC的指令系统。
- SCSI传输链路实现文档:包括FCP/SAS/iSCSI/FCoE等,描述了SCSI协议在介质上的实现细节。
SCSI的历史
SCSI-1
·1983-1985推出
·支持异步和同步
·支持7个8bit设备
·最大速度5MBps
·50pin数据线6m距离
·已经淘汰
SCSI-2
·1988-1994推出
·兼容SCSI-1
·支持16bit宽带
·最大速度20MBps
SCSI-3
·1993年成为标准
·兼容SCSI-2/SCSI-1
·真正成为了一个体系结构
·支持FCP/IEEE1394等多种介质
SCSI逻辑拓扑
启动器(Initiator),本质上,SCSI是一个C/S架构,其中客户端成为启动器,负责向SCSI目标器发送请求指令,一般主机系统都充当了启动器的角色。
目标器(Target),处理SCSI指令的服务端称为目标器,它接收来自主机的指令并解析处理,比如磁盘阵列的角色就是目标器。
逻辑单元(LUN),LUN是SCSI目标器中所描述的名字空间资源,一个目标器可以包括多个LUN,而且每个LUN的属性可以有所区别,比如LUN#0可以是磁盘,LUN#1可以是其他设备。
SCSI的Initiator与Target共同构成了一个典型的C/S模型,每个指令都是“请求/应答”这样的模型来实现。
- Initiator主要任务:发出SCSI请求。
- Target主要任务:回答SCSI请求,通过LUN提供业务,并通过任务管理器提供任务管理功能。

SCSI启动器模型
主机的SCSI系统一般工作中“启动器”模式下面,由于SCSI的体系结构来说,分为了“架构层(中间层)”,“设备层”,“传输层”,故此一般的操作系统,都将SCSI分为三个层次,包括Windows,Linux,AIX,Solaris,BSD。
Windows将SCSI启动器分为三个逻辑层次,分别是Storage/Tape等驱动、ScsiPort和MiniPort。
- 其中ScsiPort负责实现SCSI的基本框架性处理流程,比如设备发现,名字空间扫描等。
Linux将SCSI启动器分为三个逻辑层次,分别是SCSI设备驱动、scsi_mod中间层和SCSI适配卡驱动(HBA)。
- 其中scsi_mod中间层复杂处理SCSI设备无关和适配器无关的流程处理,比如一些异常,名字空间维护等。
- HBA驱动提供SCSI指令的打包解包传输等链路实现细节,设备驱动实现特定的SCSI设备驱动,比如著名的sd(SCSI磁盘)驱动,st(SCSI磁带)驱动,sr(SCSI光盘设备)驱动等。
Solaris的结构和Linux/Windows很类似,分别是SCSI设备驱动、SSA中间层和SCSI适配卡驱动。
AIX的结构分为三层,分别是SCSI设备驱动、SCSI中间层和SCSI适配驱动。

SCSI目标器模型
Target一般依据SCSI体系结构,分为三个层次,分别是链路端口层(Port Layer),中间层( Middle Layer),目标设备层(Device Layer)。
其中最重要的是中间层,在中间层中将以SAM/SPC为规范,对LUN命名空间,链路端口,目标设备,任务,任务集,会话等进行管理维护。
端口层的驱动都以注册的形式动态载入,设备层的驱动也是动态载入。

目标器中的PORT模型:PORT主要完成的任务是对链路上携带的SCSI指令的解包和封包,如将指令打包为FPC或者iSCSI或者SAS等,或者将指令从FCP/iSCSI/SAS中解出。
目标器中的Device模型:Device是一个SCSI指令“分析器”,通过处理INQUIRT高速Initiator当前LUN是什么设备,通过READ/WRITE处理IO。
目标器中间层:中间层维护了LUN空间”,“任务集”,“任务(命令)”等模型。对LUN空间维护又两种方法:一种是所有PORT都看见的是一个全局的LUN,另一种是为每个PORT维护一个LUN空间。
SCSI协议和存储系统
SCSI协议是主机与存储设备通信的基本协议。DAS使用SCSI协议实现主机服务器与存储设备的互联。

控制器首先向总线处理器发出请求使用总线的信号。该请求被接受之后,控制器高速缓存就开始执行发送操作。在这个过程中,控制器占用了总线,总线上所连接的其它设备都不能使用总线。当然,由于总线具备中断功能,所以总线处理器可以随时中断这一传输过程并将总线控制权交给其它设备,以便执行更高优先级的操作。
SCSI 控制器相当于一个小型CPU,有自己的命令集和缓存。SCSI是一种特殊的总线结构,可以对计算机中的多个设备进行动态分工操作,对于系统同时要求的多个任务可以灵活机动的适当分配,动态完成。
SCSI协议寻址
传统的SCSI控制器连接单条总线,相应的只具有一个总线号。企业级的一个服务器则可能配置了多个SCSI控制器,从而就可能有多条SCSI总线。在引入存储网络之后,每个FC HBA(Host Bus Adapter)或iSCSI(Internet SCSI)网卡也都各连接着一条总线,因此必须对每一条总线分配一个总线号,在他们之间依靠不同的总线号加以区分。
为了对连接在SCSI总线上的设备寻址,SCSI协议引入了SCSI设备ID和逻辑单元号LUN(Logical Unit Number)。在SCSI总线上的每个设备都必须有一个唯一的设备ID,当然服务器中的主机总线适配器也拥有自己的设备ID,固定为7。每条总线,包括总线适配器,最多允许有8个或者16个设备ID。设备ID一方面用以寻址,另一个作用是标识该设备在总线使用上的优先级。
每一个存储设备可能包括若干个子设备,如虚拟磁盘、磁带驱动器等。 因此SCSI协议引入了逻辑单元号LUN ID,以便于对存储设备中的子设备进行寻址。
使用一个三元描述标识一个SCSI目标:总线号/目标设备ID/逻辑单元号LUN ID。

iSCSI、FC、FCoE
iSCSI的诞生
iSCSI协议最早由IBM、CISCO、HP发起,2004年起作为正式的IETF标准,现有的iSCSI协议依据AM2(SCSI Architecture Model-2)。iSCSI(Internet SCSI)把SCSI命令和块状数据封装在TCP中在IP网络中传输。iSCSI作为SCSI的传输层协议,基本出发点是利用成熟的IP网络技术来实现和延伸SAN。
iSCSI简介
iSCSI是互联网小型计算机系统接口(Internet Small Computer System Interface)的简称,是一种在TCP/IP上进行数据块传输的标准,可以理解为SCSI over IP。
iSCSI(Internet SCSI)把SCSI命令和块状数据封装在TCP中在IP网络中传输。iSCSI作为SCSI的传输层协议,基本出发点是利用成熟的IP网络技术来实现和延伸SAN。
SCSI协议层负责生成CDB,并将其送到iSCSI协议层,然后由 iSCSI协议层进一步封装成PDU,经IP网络进行传送。

SCSI命令、响应、数据
接收SCSI数据,产生iSCSI协议数据,封装为iSCSI PDU
iSCSI PDU封装为TCP/IP Packet收发
转化比特流,在物理链路传送
iSCSI启动器/目标器
发起端(Initiator)
- SCSI层负责生成CDB(命令描述符块),将CDB传给iSCSI。
- iSCSI层负责生成iSCSI PDU(协议数据单元),并通过IP网络将PDU发给target。
目标器(Target)
- iSCSI层收到PDU,将CDB传给SCSI层。
- SCSI层负责解释CDB的意义,必要时发送响应。
iSCSI的通信体系仍然继承了SCSI的部分特性,在iSCSI通信中,具有一个发起I/O请求的启动器设备(Initiator)和响应请求并执行实际I/O操作的目标器设备(Target)。在Initiator和Target建立连接后,Target在操作中作为主设备控制整个工作过程。
- iSCSI Initiator:iSCSI启动器,可分为三种,即软件Initiator驱动程序、硬件的TOE(TCP Offload Engine,TCP卸载引擎)卡以及iSCSI HBA卡。就性能而言,软件Initiator驱动程序最差、TOE卡居中、iSCSI HBA卡最佳。
- iSCSI Target:iSCSI目标器iSCSI Target,通常为iSCSI 磁盘阵列、iSCSI 磁带库等。
iSCSI协议为Initiator和Target定义了一套命名和寻址方法。所有的iSCSI节点都是通过其iSCSI名称被标识的。这种命名方式使得iSCSI名称不会与主机名混淆。

iSCSI体系结构
iSCSI节点将SCSI指令和数据封装成iSCSI包,然后该数据封装被传送给TCP/IP层,再由TCP/IP协议将iSCSI包封装成IP协议数据以适合在网络中传输。

在支持iSCSI的系统中,用户在一台SCSI存储设备上发出存数据或取数据的命令,操作系统对该请求进行处理,并将该请求转换成一条或者多条SCSI指令,然后再传给目标SCSI控制卡。iSCSI节点将指令和数据封装(Encapsulation)起来,形成一个iSCSI包,然后该数据封装被传送给TCP/IP层,再由TCP/IP协议将iSCSI包封装成IP协议数据以适合在网络中传输。也可以对封装的SCSI命令进行加密处理,然后在不安全的网络上传送。
数据包可以在局域网或Internet上传送。在接收存储控制器上,数据包重新被组合,然后存储控制器读取iSCSI包中的SCSI控制命令和数据发送到相应的磁盘驱动器上,磁盘驱动器再执行初始计算机或应用所需求的功能。如果发送的是数据请求,那么将数据从磁盘驱动器中取出进行封装后发送给发出请求的计算机,而这整个过程对于用户来说都是透明的。尽管SCSI命令的执行和数据准备可以通过使用标准TCP/IP和现成的网络控制卡的软件来完成,但是在利用软件完成封装和解封装的情况下,在主机处理器上实现这些功能需要很多的CPU运算周期来处理数据和SCSI命令。如果将这些事务交给专门的设备处理,则可以将对系统性能的影响减少到最小程度,因此,发展在iSCSI标准下并执行SCSI命令和完成数据准备的专用iSCSI适配器是有必要的。iSCSI 适配器结合了NIC和HBA的功能。这种适配器以块方式取得数据,利用 TCP/IP处理引擎在适配卡上完成数据分化和处理,然后通过IP网络送出IP数据包。这些功能的完成使用户可以在不降低服务器性能的基础上创建一个基于IP的SAN。
iSCSI和SCSI、TCP和IP的关系

存储中的FC
FC(Fibre Channel)可称为FC协议,或者FC网络、FC互联。由于其性能较高,逐渐发展到前端作为主机接口,并逐渐发展出点对点、交换机等组网。
存储网络引入FC后,有如下优势:
- 提高扩展性
- 增加传输距离
- 解决安全性问题
像TCP/IP一样,FC协议集同样具备TCP/IP协议集以及以太网中的很多概念,如FC交换、FC交换机、FC路由、FC路由器、SPF路由算法等。

FC协议结构
FC-0:物理界面-这是最下一层, FC-0定义物理连接。它的主要用途是选择协议操作的不同物理介质和数据速率。这种方式确保系统具有最大限度的灵活性, 允许采用现有连接线和不同的技术以满足不同系统的需求。常用连接线为铜缆和光缆。
FC-1:字节编码-本层记录8b/10b传输编码用于平衡传输位流。此外, 编码还可以作为数据传输和接受错误检测机制。选择8b/10b编码是因为它的优秀的传输特性, 这个极为稳定的编码降低了部件设计成本同时保证了良好的传输密度易于时钟恢复。注: 8b/10b设计也用于 IBM ESCON。
FC-2:数据分发-本层包含在网络内发送数据的基本规则。包括:
- 如何将数据切分为小帧;
- 一次可以发送多少数据(流控制);
- 帧应当发送到什么地方。它同时包括根据应用定义服务等级。
FC-3:通用服务-本层定义包括条带(通过多条通道传输数据), 多点传送(将一个信息发送到多个目标)和查寻组(为一个节点映射多个端口)等先进功能。于是当FC-2为单一端口定义功能时, FC-3层为可以跨端口定义功能。
FC-4:高层协议映射-本层将光纤通道性能映射为IP, SCSI或ATM等协议。SCSI是FC协议的子集。

FC的拓扑结构
与以太网类似,FC提供了几种网络拓扑结构:
点对点连接:
- 最简单的拓扑结构,允许两节点之间直接通信,一般是一个存储设备和一台服务器。
FC-AL拓扑:
- 类似于以太网共享总线拓扑,但是连接方式不是总线,而是一条仲裁环路(Arbitral Loop)。每个FC-AL设备首尾相连构成了一个环路。
- 数据帧在仲裁环内是一跳一跳被传输的,并且任何时刻数据帧只能按照一个方向向下游传输。如图A节点想与H节点通信,在A节点赢得仲裁后,向H节点发送数据帧,但是此环的数据是顺时针方向传递,所以A发出的数据帧,按照B-C-D-E-F-G-H的顺序传送,需要绕一圈,效率低。
Fabric拓扑:
- 与以太网交换拓扑类似,Fabric意为“网状结构”,表明这种拓扑是一个网状交换矩阵。
- 相对于仲裁环路来说,转发效率大大提升。
- FC设备通过光纤或者铜线等各种标注的线缆连接到Fabric交换机,便可以实现各个节点基于FC Fabric拓扑方式的点对点通信。

FC协议中的7种端口类型
光纤通道解除了工作站对每一端口的管理工作,每一端口只需管理自己到Fabric简单的点对点连接,其他的Fabric功能由光纤通道交换机来完成。
设备(节点)端口:
- N_Port:Fabric直连连接设备。
- NL_Port:Loop连接设备。
交换机端口:
- E_Port:扩展端口(交换机到交换机)。
- F_Port:Fabric端口,是Fabric面向用户N_Port的连接点。
- FL_Port:Fabric Loop端口。
- G_Port:普通(Generic)端口,可以转换为E或F端口。
- U_Port:通用(Universal)端口,用于描述自动端口检测的术语。

FC适配器
FC主机总线适配器,即FC HBA(Host Bus Adapter)。支持连接FC网络的应用,实现高带宽高性能存储组网方案。


FC HBA卡:光纤通道卡,Fibre Channel HBA,用于服务器和光纤阵列的连接。
FCoE协议
FCoE协议直接在增强型无损以太网基础设施上传输光纤信道信号功能的协议。
FCoE把FC帧封装在以太网帧中,允许LAN和SAN的业务流量在同一个以太网中传送。

从FC协议的角度来看,FCoE就是把FC承载在一种新型的链路上,即以太网二层链路。需要注意的是,这个以太网必须是增强型无损以太网,才能满足FC协议对链路层的传输要求。
FCoE的特点:
- 协议标准组织:2008年提交美国国家标准委员会(ANSI)T11 委员会进行审批,需要与IEEE密切配合。
- 协议目标:FCoE希望利用以太网的拓展性,同时保留光纤通道在高可靠性和高效率方面的优势。
- 其他挑战:FC与以太网相结合,需要克服防止丢包、路径冗余和故障切换、帧分段与重组、无阻塞传输等方面的问题。
- FC固有的兼容性差、不支持远距离传输两大问题,FCoE同样无法解决。
FC与FCoE对比
FCoE:是定义从FC到IEEE 802.3以太网络的映射协议,使用的是以太网的物理层和数据链路层和FC的网络层、服务层和协议层。
FCoE保留FC-2以上的协议栈,把FC中的FC-0和FC-1用以太网的链路层取代。

在原有FC2 层基础上,进行了细分:
- FC-2V: FC2 虚拟子层
- FC-2M:FC2 多路器子层
- FC-2P:FC2 虚拟物理层
FC_BB_E映射协议要求FCoE在底层使用无损以太网传输,全双工、无损地承载FC帧。物理线路上使用Ethernet协议。
FC与FCoE对比:
- FC中,FC-0的作用是定义承载介质类型,FC-1作用是定义帧编解码方式,这两层是在FC SAN网络传输时需要定义的方式。而FCoE是运行在以太网中,所以不需要这两层处理,而是用以太网的链路层取代这两层处理。
- 运行环境不同:FC协议是运行在传统的FC SAN的存储网络中。而FCoE则是运行在以太网的存储协议。
- 运行通道不同:FC协议是运行在FC网络中,所有的报文都是运行在FC通道中。在以太网中存在各种协议报文,有IP,ARP等传统以太网协议,而FCoE是运行要在以太网中需要创建一个虚拟的FC通道来承载FCoE报文。
- 与FC协议相比增加了FIP初始化协议:由于FCoE是运行在以太网中的存储协议,要让FCoE能正常的运行在以太网中,就需要FIP初始化协议来获取FCoE运行的相应vlan,与哪个FCF建立虚通道,和虚链路的维护等。所以从这方面来讲FCoE比FC多了一个FIP的初始化协议 。
FCoE需要其他协议支持:由于以太网是可以容忍网络丢包的,但是FC协议不允许出现丢包,那么FCoE做为以太网中传输的FC协议来说同样是继承了这点特点不允许丢包。所以想要FCoE协议可以正常的运行在以太网络中就需要对以太网做一定的增强来避免丢包 ,这种增强型的以太网叫CEE(Converged Enhanced Ethernet)。
SAS、SATA
SAS的背景
并行总线已经发展到顶峰,到达带宽的极限;
Fibre Channel、InfiniBand、Ethernet等串行总线对于存储应用来说都存在缺点:
- FC:价格昂贵,适用于复杂组网、远距离的场景
- InfiniBand:组网复杂,价格昂贵贵
- iSCSI:时延高、传输速率慢
串行接口结构简单,支持热插拔,传输速度快,执行效率高。一般情况下,较大的并行电缆会带来电子干扰,SAS的电缆结构可以解决这个问题。SAS的电缆结构节省了空间,从而提高了使用SAS硬盘服务器的散热、通风能力。
什么是SAS
SAS(Serial Attached SCSI),是SCSI总线协议的串行标准,即串行连接SCSI。SAS采用串行技术以获得更高的传输速率和更好的扩充性,并兼容SATA硬盘。SAS采用点对点架构,目前的传输速率高达3Gbps、 6Gbps、 12Gbps 或更高,支持全双工模式。


更低的成本:
- SAS的背板可以兼容SAS和SATA两类硬盘,使用不同类型的硬盘时不需要再重新进行投资。
- 不需要为SCSI和SATA标准分别设计不同的产品,同时也减少了设计时布线的复杂度和PCB的层数,因此降低了成本。
- 系统集成商也不需要为给客户配置不同硬盘而采购不同的背板和线缆。
- 可连接更多的设备。
- SAS技术引入了SAS扩展器,使SAS系统可以连接更多的设备,其中每个扩展器允许连接多个端口,每个端口可以连接SAS设备、主机或其他SAS扩展器。
高可靠性
- 器件可靠性同SCSI硬盘、FC盘,比SATA好。
- 保留了经过验证的SCSI命令集。
高性能
- 端口单向速率高。
与SATA兼容
- SATA硬盘可以直接装入SAS环境里。
- 可以在同一个系统里使用SATA或SAS盘,符合现在日益流行的分级存储战略。
SAS协议层次结构

SAS标准将SAS架构分为6层,从低到高依次是物理层、phy层、链路层、端口层、传输层和应用层,每层负责一定的功能。
- 物理层:对于线缆、接头、收发器等硬件进行了定义;
- PHY层:包括了最低级的协议,比如编码方案和供电/复位序列等等;
- 链路层:描述的是如何控制phy层连接管理,以及原语、CRC校验和加解扰、速率匹配处理;
- 端口层:描述的是链路层和传输层的接口,包括如何请求、中断、如何选择建立连接;
- 传输层:定义了如何将所传输的命令、状态、数据封装在SAS帧中,以及如何分解SAS帧;
- 应用层:描述了如何在不同类型的应用下使用SAS的细节。
SAS特点
SAS采用全双工(双向)通信模式,而不是单向通信。传统的并行SCSI只可以在一个方向上进行通信,当设备接收到并行SCSI的一个数据包后,如果该设备要响应该数据包,就需要在上一个链路断开后,再重新建立一个新的SCSI通信链路。而SAS,则可以进行双向通信。每个SAS电缆有4根电缆,2根输入2根输出。SAS可以同时进行数据的读写,全双工的数据操作提高数据的吞吐效率。
SAS相对SCSI而言,最重要的提升在于:
- SAS的串行通信方式允许多个数据通路全速与各个设备通信。
- SAS支持多个窄端口捆绑形成宽端口。
- SAS结构采用扩展器(expander)进行接口扩展,具有非常好的扩展能力。
- SAS采用全双工模式。

SAS的可扩展性
SAS结构采用扩展器(expander)进行接口扩展,具有非常好的扩展能力,最多可以连接16384个磁盘设备。
SAS Expander:SAS域中的互联设备,类似于以太网交换机,通过 Expander的级联可以大大增加终端设备的连接数,从而节约HBA花费。每个Expander最多可以连接128个终端设备或者128个Expander。1个SAS域由以下几个部分组成:SAS Expander、终端设备、连接设备(即SAS连接线缆)。
- SAS Expander配备了一个地址的路由表跟踪,记录了所有SAS驱动器的地址。
- 终端设备包括启动器(通常为SAS HBA卡)和目标器(SAS/SATA硬盘,也可以是处于目标模式的HBA卡)。
SAS 域中不能形成环路,以保证其发现终端设备流程的正常进行。
实际使用中,因为带宽的原因,扩展器连接的终端设备比128个少很多。

SAS连线的原则
大多数存储设备供应商现使用SAS线缆连接硬盘框到控制框,或者硬盘框之间的互连。 SAS线缆通常将4个独立的通道(窄端口)捆绑成一个宽端口来提供更多的带宽。4个独立的通道都可以在12 Gb/s上进行,因此整个宽端口可以提供48 Gb/s 的带宽。为了确保SAS线缆上的数据量不超过整个SAS线缆的最大带宽,因此我们需要限制被连接在一个SAS环路上的硬盘的总个数。
对于华为的设备来说,这个最大硬盘数是168块盘,也就是说最多7个24个硬盘槽位的硬盘框组成一个环路。但是,这个前提条件是在该环路中的所有硬盘都是传统的SAS硬盘。现在SSD盘用得越来越多了,我们必须意识到SSD盘传输速度远远高于SAS盘。因此对于SSD盘,最大环路硬盘数的最佳实践则为96块盘,也就是4个24个硬盘槽位的硬盘框组成的环路。
SAS线缆接口在SAS线缆单通道为6 Gb/s时称为 Mini SAS 线缆,现在单通道速度提升到12 Gb/s了,其相应的SAS线缆称为高密度Mini SAS线缆。

SATA
Serial ATA,称串行总ATA,是一种电脑总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输。
- 不是简单的PATA改进,而是全新的总线结构;
- SATA总线使用嵌入式时钟信号,具备更强的纠错能力;
- SATA抗干扰能力比PATA更强;
- 为低端应用而设计的机械底盘,面对大数据吞吐量或者多线程传输,比SCSI显得力不从心。

PATA:Parallel ATA,并行ATA。在物理层,SAS接口和SATA接口完全兼容,SATA硬盘可以直接使用在SAS的环境中,从接口标准上而言,SATA是SAS的一个子标准,因此SAS控制器可以直接操控SATA硬盘,但是SAS却不能直接使用在SATA的环境中,因为SATA控制器并不能对SAS硬盘进行控制。
在协议层,SAS由3种类型协议组成,根据连接的不同设备使用相应的协议进行数据传输。
- 串行SCSI协议(SSP)用于传输SCSI命令;
- SCSI管理协议(SMP)用于对连接设备的维护和管理;
- SATA通道协议(STP)用于SAS和SATA之间数据的传输。
因此在这3种协议的配合下,SAS可以和SATA以及部分SCSI设备无缝结合。
PCIe、NVMe
PCIe
PCI Express(又称PCIe)是一种高性能、高带宽串行通讯互连标准,最早由英特尔提出,后由外设组件互连特别兴趣组(PCI-SIG)制定,以取代基于总线的通信架构,如:PCI、PCI Extended (PCI-X) 以及加速图形端口(AGP)。

PCI特点:
- 总线结构简单、成本低、设计简单;
- 并行总线无法连接太多设备,总线扩展性比较差;
- 当连接多个设备时,总线有效带宽将大幅降低,传输速率变慢。
1991 年,Intel 公司首先提出了PCI 的概念,随着现代化处理器技术的发展,在互连领域,使用高速差分总线替代并行总线是大势所趋。与单端并行信号相比,高速差分信号用于更高的时钟频率,PCIe总线应运而生。
相对于传统的PCI总线,PCI Express有如下优点:
- 双通道,高带宽,传输速率快:实现类似全双工传输模式(RX和TX分开);传输速率高,第一代PCIe X1的带宽是2.5千兆位/秒(Gbps),第二代则达到5.0Gbps,而PCIe 3.0标准则能支持8.0Gbps的速率,PCIe 4.0支持16.0Gbps, PCIe 5.0高达32.0Gbps;对更大的带宽,则可以通过扩展链路数目来实现,而带宽则是其N条通路的N陪。
- 兼容性:在软件层保持与PCI兼容,版本升级,向下兼容PCI软件。
- 易用性:支持热插拔,PCIe总线接口插槽中包括“热插拔检测信号”,可以像USB进行热拔插和热交换。
- 具有错误处理和先进的错误报告功能:得益于PCI Express总线是分层结构,其软件层具有错误处理和提供错误报告能力,详细后续介绍。
- 每个物理连接还有多个虚拟通道:在每个物理通道中支持多个虚拟通道(理论上允许8个虚拟通道进行独立的通讯控制),从而支持每个虚拟通道的Qos,达到非常高的流量质量控制。
- 节省IO,减少板级空间,降低串扰:例如,典型的PCI总线数据线至少达到50根IO,而PCIe Xl仅需要4根IO。而IO减少,节省了板级空间,各个IO直接的距离可以更宽,从而减少串扰。
为什么用PCIe
PCI Express标准的制定是着眼未来的,它还在继续发展为系统提供更高的吞吐量。在PCIe标准继续利用最新的技术以提供不断增加的吞吐量的同时,利用分层协议、通过使驱动程序保持与现有PCI应用的软件兼容性将简化从PCI到PCIe的过渡。
PCIe协议的特性包括:
- 点对点连接
- 高可靠
- 树形组网
- 全双工
- 基于帧结构的传输
PCIe协议结构
PCIe设备的层次:主要分为物理层、数据链路层、事务层、应用层:
- 物理层(Physical Layer)
- 数据链路层(Data Link Layer)
- 事务层(Transaction Layer)
- 应用层(Application Layer)


PCI Express总线架构中的物理层主要决定总线的物理特征。在未来的发展中,可以通过速度提升或更改编解码方式来进一步提升PCI Express总线性能,而这些变更都只会作用于物理层,不会影响其它结构,为升级带来了便利。
数据链路层(Data Link Layer)
- 数据链路层的重要作用就是要保证PCI Express总线传输的数据包的正确性和可靠性。它会检查数据包封装是否完整正确,并将序列号和冗余校验代码(CRC)添加到数据中进行检测和纠错,并采用ack/nack握手协议进行检测纠错。
事务层(Transaction Layer)
- 处理层的主要作用有两个,一是接受来自软件层送来的读、写请求,或者本身创建一个请求封装包传到数据链路层,这种数据包称为“处理层数据包”(TransactionLayer Packet,TLP另一个作用是接受从链路层传来的响应数据包(DataLink Layer Packet,DLL P),并将其与相关的软件请求相关联,传送至软件层处理。
NVMe
NVMe,全称Non-Volatile Memory Express,非易失性存储器标准。NVMe标准是面向PCI-E SSD的,使用原生PCI-E通道与CPU直连可以免去SATA与SAS接口的外置控制器(PCH,Platform Controller Hub)与CPU通信所带来的延时。PCI-E是接口形态和总线标准,NVMe是为PCI-E SSD定制的标准接口协议。

就存储整个流程来说,NVMe不仅仅是逻辑上的协议接口,还是一种指令标准、一种指定协议。
此规范目的在于充分利用PCI-E通道的低延时以及并行性,还有当代处理器、平台与应用的并行性,在可控制的存储成本下,极大的提升固态硬盘的读写性能,降低由于AHCI接口(Advanced Host Controller Interface)带来的高延时,彻底解放SATA时代固态硬盘的极致性能。

Comments NOTHING