2024年4月28日发(作者:笃景辉)
PCI-E - 简介
PCI-E(PCI-Express的所写)是最新的总线和接口标准,它原来的名称为“3GIO”,是
由英特尔提出的,很明显英特尔的意思是它代表着下一代I/O接口标准。交由PCI-SIG(PCI
特殊兴趣组织)认证发布后才改名为“PCI-Express”。这个新标准将全面取代现行的PCI
和AGP,最终实现总线标准的统一。它的主要优势就是数据传输速率高,目前最高可达到
10GB/s以上,而且还有相当大的发展潜力。PCI Express也有多种规格,从PCI Express 1X
到PCI Express 16X,能满足现在和将来一定时间内出现的低速设备和高速设备的需求。
能支持PCI Express的主要是英特尔的i915和i925系列芯片组。当然要实现全面取代PCI
和AGP也需要一个相当长的过程,就象当初PCI取代ISA一样,都会有个过渡的过程。
PCI-E采用了目前业内流行的点对点串行连接,比起PCI以及更早期的计算机总线的
共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把
数据传输率提高到一个很高的频率,达到PCI所不能提供的高带宽。相对于传统PCI总线
在单一时间周期内只能实现单向传输,PCI-E的双单工连接能提供更高的传输速率和质量,
它们之间的差异跟半双工和全双工类似。
PCI-E - 历史
每一个PCI Express插槽拥有专用的连至PC内存的带宽,而不同于PCI的共享带宽
习惯了做业界规范制定者的Intel,在2001年宣布了要用一种新的技术取代PCI总线
和多种芯片的内部连接。并称之为第三代I/O总线技术(很明显Intel的意思是它代表着下
一代I/O接口标准)。
该总线的规范由Intel支持的AWG(Arapahoe Working Group)负责制定。2002 年
4月17日,AWG正式宣布3GIO 1.0规范草稿制定完毕,并移交PCI-SIG进行审核(主
要以Intel、AMD、IBM、DELL、NVIDIA等20多家业界主导公司开始起草3GIO,2002
年草案完成,2002年7月23日经过审核后正式公布。
开始的时候大家都以为它会被命名为Serial PCI(受到串行ATA的影响),但最后却被
正式命名为PCI Express(以下简称PCI-E)。2006年正式推出Spec2.0(2.0规范)。这
个新标准将全面取代现行的PCI和AGP,最终实现总线标准的统一 。
[1]
2001年春季的IDF上Intel正式公布PCI Express,是取代PCI总线的第三代I/O技
术,也称为3GIO。该总线的规范由Intel支持的AWG(Arapahoe Working Group)负
责制定。2002 年4月17日,AWG正式宣布3GIO 1.0规范草稿制定完毕,并移交PCI-SIG
进行审核。开始的时候大家都以为它会被命名为Serial PCI(受到串行ATA的影响),但最
后却被正式命名为PCI Express。2006年正式推出Spec2.0(2.0规范)。
PCI Express总线技术的演进过程,实际上是计算系统I/O接口速率演进的过程。PCI
总线是一种33MHz@32bit或者66MHz@64bit的并行总线,总线带宽为133MB/s到最
大533MB/s,连接在PCI总线上的所有设备共享133MB/s~533MB/s带宽。这种总线用
来应付声卡、10/100M网卡以及USB 1.1等接口基本不成问题。随着计算机和通信技术
的进一步发展,新一代的I/O接口大量涌现,比如千兆(GE)、万兆(10GE)的以太网技
术、4G/8G的FC技术,使得PCI总线的带宽已经无力应付计算系统内部大量高带宽并行
读写的要求,PCI总线也成为系统性能提升的瓶颈,于是就出现了PCI Express总线。PCI
Express总线技术在当今新一代的存储系统已经普遍的应用。PCI Express总线能够提供极
高的带宽,来满足系统的需求。
目前,PCI-E 3.0规范也已经确定,其编码数据速率,比同等情况下的PCI-E 2.0规范
提高了一倍,X32端口的双向速率高达320Gbps。
PCI-E - 接口
PCI Express提供专用的、可扩展的带宽(高达传统PCI带宽的30倍)
PCI-E的接口根据总线位宽不同而有所差异,包括X1、X4、X8以及X16,而X2模
式将用于内部接口而非插槽模式。PCI-E规格从1条通道连接到32条通道连接,有非常强
的伸缩性,以满足不同系统设备对数据传输带宽不同的需求。此外,较短的PCI-E卡可以
插入较长的PCI-E插槽中使用,PCI-E接口还能够支持热拔插,这也是个不小的飞跃。PCI-E
X1的250MB/秒传输速度已经可以满足主流声效芯片、网卡芯片和存储设备对数据传输带
宽的需求,但是远远无法满足图形芯片对数据传输带宽的需求。 因此,用于取代AGP接
口的PCI-E接口位宽为X16,能够提供5GB/s的带宽,即便有编码上的损耗但仍能够提供
约为4GB/s左右的实际带宽,远远超过AGP 8X的2.1GB/s的带宽。
PCI-E - 技术规格
PCI-E
尽管PCI-E技术规格允许实现X1(250MB/秒),X2,X4,X8,X12,X16和X32
通道规格,但是依目前形式来看,PCI-E X1和PCI-E X16已成为PCI-E主流规格,同时很
多芯片组厂商在南桥芯片当中添加对PCI-E X1的支持,在北桥芯片当中添加对PCI-E X16
的支持。除去提供极高数据传输带宽之外,PCI-E因为采用串行数据包方式传递数据,所
以PCI-E接口每个针脚可以获得比传统I/O标准更多的带宽,这样就可以降低PCI-E设备
生产成本和体积。另外,PCI-E也支持高阶电源管理,支持热插拔,支持数据同步传输,
为优先传输数据进行带宽优化。
PCI Express的引入是用来克服以前PCI总线的限制。PCI总线是Intel十年前开发和
发布的,工作在33MHz和32位环境下,理论带宽峰值是每秒132MB。它使用共享总线
拓扑结构——总线带宽在多个设备间共享——从而实现总线上不同设备间的通信。随着设
备的发展,新的占用大量带宽的设备开始吞噬同一共享总线上的其他设备的带宽。例如,
1G网卡可独占95%的PCI总线带宽。
为了提供这些新型设备所要求的带宽,PC行业协会和外设厂商一起开发了PCI
Express并且于2004年开始在标准的台式计算机上提供。大部分来自顶级供应商的台式机
器已经至少包含了一个PCI Express插槽。相对于PCI,PCI Express最引人注目的进步是
它点到点的拓扑结构。用于PCI的共享总线被一个共享开关所代替,这个开关使得每一个
设备拥有对总线的直接访问权。并且不同于PCI将带宽分给总线上的所有设备的是,PCI
Express提供给每一个设备它自己专用的数据流水线。数据通过被称为信道的发送和接受
信号对来以包的形式串行传输,每个信道具有单方向250M字节/秒的速度。多个信道可以
组合在一起形成x1 (“单一的”)、 x2、 x4、x8、x12、x16、和x32的信道带宽从而提
高插槽的带宽。
诸如数据采集和波形发生器之类的应用需要足够的带宽来保证数据能以足够快的速度
传输至内存而不丢失或重写。相对于传统的总线,PCI Express极大地提高了数据带宽,
减少了对板载内存的需求并且实现了更快的数据流传输。初始的信号频率,即技术标准规
定的2.5G位/秒,是32位、33MHz 的PCI可用带宽的30倍(一个x16的插槽),并且
这一信号频率预期将随着芯片技术的进步增加至10G位/秒——这是铜线信号的极限。并
且由于PCI Express的可扩展信道拓扑结构,数据采集厂商可以实现具有符合设备所需要
信道数的PCI Express插槽。
PCI-E - 系统构架
大部分主板包含了PCI插槽和PCI Express插槽
PCI-E是一种双向串行连接。其总线本身又分成数个通道,每个通道支持2.5Gbit/S
的双向数据传输速度。通过编码和误差校验处理后,数据被转换成适用于NIC、HCA和
HBA传输的250MB/秒的有效带宽,这足以满足2Gb Fiber Channel的HBA卡。
这里需要着重介绍的一个概念就是通道。举个例子,如果你要使用4Gb的Fiber
Channel,并在一个端口的HBA上全双工运行的话,你就需要400MB/S的双向带宽。如
果使用PCI-E技术,只需要两个全速开放的子通道就能够满足需求。你也能使用单通道,
不过你会被限制在250MB/S的速度上。这对于像数据索引搜索这类应用的IOPS是足够的
了。
如果使用400MB/S的无其他开销的传输速度来应付16KB请求的话,每秒可完成
25000个(400MB/S 16000KB)请求,而250MB/S的一个单通道每秒则能够处理16000
个请求。但因为有附加的头文件,所以实际应用中永远达不到这个速度。不过从另一方面
说,一个或两个通道已能够满足大部分的服务器、HBA卡和RAID系统的传输需求了。
如果只以IOPS的角度来看,一个单通道就能够和一块4GB HBA协同工作了。如果使
用双端口的话,一个或两个通道就满足大多数RAID架构的需求。
如果假设一块硬盘每秒的随机I/O读取次数最多在150次左右的话,那么非常多数量
的磁盘驱动器和缓存才能使其达到全速。由于大多数的RAID控制器没有8K的命令序列,
因此你也将大大超越RAID控制器的命令序列。
我记不得有哪个时期I/O总线的性能超过了最快的主机接口速度,因此我认为我们到
达了一个科技史上非常重要的时刻,总线已足以满足各种外接卡的速度需求。而这就意味
着有了一些新状况已产生:
要有足够的内存带宽才能使总线全速运行:使用新的16通道PCI-E,全速双向运行总
线可达10 GB/S(2.5 Gb/S*2 *16/8)的带宽。对于如今大部分x86和AMD系统的内存
带宽来说的这都是个不小的值。
系统中的瓶颈:许多来自各类厂商的PCI和PCI-X总线接口和内存系统之间总是存在
性能瓶颈。在大多数情况下,这些性能设计缺陷限制了总线性能,即限制了总线从内存中
读取和写入性能。偶尔总线本身也存在设计缺陷,但这种情况比总线和内存间出现问题的
几率要小。能明显地看出,我们需要这个接口的性能达到PCI-X的1GB/秒或更高。这就
需要厂商检查接口的设计、进行早期的测试。
新I/O卡:随着新一代总线的推出,相对应的I/O卡也必须得到发展。这其中包括Fibre
Chnanel、InfiniBand和新一代以太网(1G和10G)卡。测试这些卡的流量性能是非常
困难的。虽然找到测试设备并非难事,不过找到了解硬件知识的人才和确定卡所部属的软
件堆栈是比较困难的。如果这些卡有良好的速度和IOPS性能,那会非常最佳。但如果存
在瓶颈,就非常难更正。其中的问题可能存在于非常多方面:应用程式、操作系统、I/O
驱动、卡驱动、PCI-E总线、内存带宽或其他数据通道的问题。在1990年,我参和了早期
Fiber Channel的测试,当时就有厂商表示我们能通过解决数据通路上的一些问题来提高
其接口速率。
[2]
PCI-E - 兼容性
PCI Express保持与传统PCI的软件兼容性,但是将物理总线代替成为一个高速
(2.5Gb/s)的串行总线。因为这种体系结构发生了改变,所以插槽本身并不兼容。但是,
在PCI向PCI Express的过渡过程中,大部分计算机主板将既提供PCI插槽又提供PCI
Express插槽。具有较少信道插槽的设备可以“向上插入”至主板上具有较多信道的插槽,
从而提高硬件的兼容性和灵活性。但是,“向下插入”至较少信道的插槽是不支持的。
大部分来自顶级厂商的PC现在已经至少包含一个PCI Express插槽了。最常见的插
槽大小是x1和x16。x1插槽是一个通用的插槽用来作为NI PCIe M系列数据采集和NI
PCIe GPIB设备的主机设备。现在,服务器级的机器需要x4和x8的插槽,以用于那些包
含NI PCIe摄像机链路(Camera Link)图像采集设备的装置。然而“服务器”并不简单
地意味着高价格,因为优良的服务器也具有与台式机箱可比的价格。例如,2005年5
月, Dell SC240服务器除了3个PCI插槽之外,还有一个x1和一个x8的PCI Express
插槽。
在选择一个计算机时最重要的是确保PCI Express插槽被连接到的物理连接的大小。
例如,一些厂商使用的主板具有x8的插槽,却是x4的连接大小。这些插槽上的设备将只
会运行在x4的数据速率上。在您向上插入一个PCI Express设备的情况下,请保证您使用
的计算机运行在您设备所支持的最大数据速率时支持向上插入。PCI Express技术标准仅
仅要求“向上插入”来工作在x1数据速率下。这就会导致一个插入x8插槽的x4的设备
工作在x1的数据速率下(250MB/s)。
PCI-E - 技术优势
PCI总线的最大优点是总线结构简单、成本低、设计简单,但是缺点也比较明显:
1) 并行总线无法连接太多设备,总线扩展性比较差,线间干扰将导致系统无法正常工
作;
2) 当连接多个设备时,总线有效带宽将大幅降低,传输速率变慢;
3) 为了降低成本和尽可能减少相互间的干扰,需要减少总线带宽,或者地址总线和数
据总线采用复用方式设计,这样降低了带宽利用率。 PCI Express总线是为将来的计算机
和通讯平台定义的一种高性能,通用I/O互连总线。
与PCI总线相比,PCI Express总线主要有下面的技术优势:
1) 是串行总线,进行点对点传输,每个传输通道独享带宽。
2) PCI Express总线支持双向传输模式和数据分通道传输模式。其中数据分通道传输
模式即PCI Express总线的x1、x2、x4、x8、x12、x16和x32多通道连接,x1单向传
输带宽即可达到250MB/s,双向传输带宽更能够达到500MB/s,这个已经不是普通PCI
总线所能够相比的了。
3) PCI Express总线充分利用先进的点到点互连、基于交换的技术、基于包的协议来
实现新的总线性能和特征。电源管理、服务质量(QoS)、热插拔支持、数据完整性、错误
处理机制等也是PCI Express总线所支持的高级特征。
4) 与PCI总线良好的继承性,可以保持软件的继承和可靠性。PCI Express总线关键
的PCI特征,比如应用模型、存储结构、软件接口等与传统PCI总线保持一致,但是并行
的PCI总线被一种具有高度扩展性的、完全串行的总线所替代。
5) PCI Express总线充分利用先进的点到点互连,降低了系统硬件平台设计的复杂性
和难度,从而大大降低了系统的开发制造设计成本,极大地提高系统的性价比和健壮性。
从下面表格可以看出,系统总线带宽提高同时,减少了硬件PIN的数量,硬件的成本直接
下降。
[1]
PCI-E - 硬件协议
PCIe的连接是建立在一个双向的序列的(1-bit)点对点连接基础之上,这称之为“传输
通道”。与PCI 连接形成鲜明对比的是PCI是基于总线控制,所有设备共同分享的单向32
位并行总线。PCIe是一个多层协议,由一个对话层,一个数据交换层和一个物理层构成。
物理层又可进一步分为逻辑子层和电气子层。逻辑子层又可分为物理代码子层(PCS)和
介质访问控制子层(MAC)。
PCI-E - 物理传输层
PCI Express
于使用电力方面,每组流水线使用两个单向的低电压微分信号(LVDS)合计达到2.5
兆波特。传送及接收不同数据会使用不同的传输通道,每一通道可运作四项资料。两个PCIe
设备之间的连接成为“链接”,这形成了1组或更多的传输通道。各个设备最少支持1传
输通道(x1)的链接。也可以有2,4,8,16,32个通道的链接。这可以更好的提供双向兼
容性。(x2模式将用于内部接口而非插槽模式)PCIe卡能使用在至少与之传输通道相当的
插槽上(例如x1接口的卡也能工作在x4或x16的插槽上)。一个支持较多传输通道的插
槽可以建立较少的传输通道(例如8个通道的插槽能支持1个通道)。PCIe设备之间的链
接将使用两设备中较少通道数的作为标准。一个支持较多通道的设备不能在支持较少通道
的插槽上正常工作,例如x4接口的卡不能在x1的插槽上正常工作,但它能在x4的插槽
上只建立1个传输通道(x1)。PCI-Express卡能在同一数据传输通道内传输包括中断在内的
全部控制信息。这也方便了与PCI的兼容。多传输通道上的数据传输采取交叉存取,这意
味着连续字节交叉存取在不同的通道上。这一特性被称之为“数据条纹”,需要非常复杂的
硬件支持连续数据的同步存取,也对链接的数据吞吐量要求极高。由于数据填充的需求,
数据交叉存取不需要缩小数据包。与其它高速数传输协议一样,时钟信息必须嵌入信号中。
在物理层上,PCIe采用常见的8B/10B代码方式来确保连续的1和0字符串长度符合标准,
这样保证接收端不会误读。编码方案用10位编码比特代替8个未编码比特来传输数据,
占用20%的总带宽。有些协议(如SONET)使用另外的编码结构如“不规则”在数据流
中嵌入时钟信息。PCIe的特性也定义了一种“不规则化”的运算方法,但这种方法与SONET
完全不同,它的方法主要用来避免数据传输过程中的数据重复而出现数据散射。第一代
PCIe采用2.5兆位单信号传输率,PCI-SIG计划在未来版本中增强到5~10兆位。
PCI-E - 数据链接层
数据链接层采用按序的交换层信息包(Transaction Layer Packets,TLPs),是由交换层
生成,按32位循环冗余校验码(CRC,本文中用LCRC)进行数据保护,采用著名的协议(Ack
and Nak signaling)的信息包。TLPs能通过LCRC校验和连续性校验的称为Ack(命令正
确应答);没有通过校验的称为Nak(没有应答)。没有应答的TLPs或者等待超时的TLPs会
被重新传输。这些内容存储在数据链接层的缓存内。这样可以确保TLPs的传输不受电子噪
音干扰。
Ack和Nak信号由低层的信息包传送,这些包被称为数据链接层信息包(Data Link
Layer Packet,DLLP)。DLLP也用来传送两个互连设备的交换层之间的流控制信息和实现
电源管理功能。
PCI-E - 交换层
PCI Express采用分离交换(数据提交和应答在时间上分离),可保证传输通道在目标
端设备等待发送回应信息传送其它数据信息。它采用了可信性流控制。这一模式下,一个
设备广播它可接收缓存的初始可信信号量。链接另一方的设备会在发送数据时统计每一发
送的TLP所占用的可信信号量,直至达到接收端初始可信信号最高值。接收端在处理完毕
缓存中的TLP后,它会回送发送端一个比初始值更大的可信信号量。可信信号统计是定制
的标准计数器,这一算法的优势,相对于其他算法,如握手传输协议等,在于可信信号的
回传反应时间不会影响系统性能,因为如果双方设备的缓存足够大的话,是不会出现达到
可信信号最高值的情况,这样发送数据不会停顿。第一代PCIe标称可支持每传输通道单向
每秒250兆字节的数据传输率。这一数字是根据物理信号率2500兆波特除以编码率(10
位/每字节)计算而得。这意味着一个16通道(x16)的PCIe卡理论上可以达到单向
250*16=4000兆字节/秒(3.7G兆字节/每秒)。实际的传输率要根据数据有效载荷率,即
依赖于数据的本身特性,这是由更高层(软件)应用程序和中间协议层决定。PCI Express与
其它高速序列连接系统相似,它依赖于传输的鲁棒性(CRC校验和Ack算法)。长时间连
续的单向数据传输(如高速存储设备)会造成>95%的PCIe通道数据占用率。这样的传输
受益于增加的传输通道,但大多数应用程序如USB或以太网络控制器会把传输内容拆成小
的数据包,同时还会强制加上确认信号。这类数据传输由于增加了数据包的解析和强制中
断,降低了传输通道的效率。这种效率的降低并非只出现在PCIe上。
PCI-E - 制式标准
半高卡微型卡:代替Mini PCI卡 (支持x1 PCIe, USB 2.0和SMBus总线接口)
快速卡:类似PCMCIA接口标准(支持x1 PCIe,USB 2.0;支持热插拔)
先进TCA卡:代替CompactPCI卡
PCI-E - 竞争协议
基于高速序列构架产生了很多传输标准。包括HyperTransport,InfiniBand,RapidIO
和StarFabric等等。这些均有业界的不同企业支持,背后也都有大量的资金投入标准的研
究开发,所以每一标准都声称自己与众不同,独占优势。主要的差异在于可扩展性、灵活
性与反应时间、单位成本的取舍平衡各不相同。其中的一个例子是在传输包上增加一个复
杂的头信息以支持复杂路由传输(PCI Express不支持这种方式)。这样的信息增加降低了
接口的有效带宽也使传输更复杂,但是相应创造了新的软件支持此功能。这种架构下需要
软件追踪网络拓扑结构的变化以实现系统支持热插拔。InfiniBand 和 StarFabric 标准即
能实现这以功能。另一个例子是缩小信息包以减少反应时间。较小的信息包意味着包头占
用了包的更大百分比,这样又降低了有效带宽。能实现此功能的标准是RapidIO 和
HyperTransport。PCI Express取中庸之道,定位于设计成一种系统互连接口(总线)而非
一种设备接口或路由网络协议。另外为了针对软件透明,它的设计目标限制了它作为协议,
也在某种程度上增加了它的反应时间。
想像归想像,真正做起来又是另外一回事,在测试的准备阶段我们就碰到了一个难题
——根本没有一块主板上同时拥有PCIe X1、X4、X8、X16四个规格的插槽,如果在不同
主板上测试又会使得测试的数据失实,为了能解决这个难题,需要分析PCIe的结构特点。
PCIe针脚定义图
不同于之前的显卡接口,PCIe的每个信号通道都是相对独立的结构,正反每两个信道
组成1X的带宽,知道了它的工作原理,我们就可以通过屏蔽信道的方式来达到修改PCIe
工作模式的目的了。
PCIe金手指实物图
理论说完了,让我们来看看实物,这次当实验品的是一块铭瑄的7600GT显卡,仔细
观察它的PCIe接口,就可以发现每隔一段距离就有一个空接的金手指,这正是各种PCIe
模式之间的分隔线。
2024年4月28日发(作者:笃景辉)
PCI-E - 简介
PCI-E(PCI-Express的所写)是最新的总线和接口标准,它原来的名称为“3GIO”,是
由英特尔提出的,很明显英特尔的意思是它代表着下一代I/O接口标准。交由PCI-SIG(PCI
特殊兴趣组织)认证发布后才改名为“PCI-Express”。这个新标准将全面取代现行的PCI
和AGP,最终实现总线标准的统一。它的主要优势就是数据传输速率高,目前最高可达到
10GB/s以上,而且还有相当大的发展潜力。PCI Express也有多种规格,从PCI Express 1X
到PCI Express 16X,能满足现在和将来一定时间内出现的低速设备和高速设备的需求。
能支持PCI Express的主要是英特尔的i915和i925系列芯片组。当然要实现全面取代PCI
和AGP也需要一个相当长的过程,就象当初PCI取代ISA一样,都会有个过渡的过程。
PCI-E采用了目前业内流行的点对点串行连接,比起PCI以及更早期的计算机总线的
共享并行架构,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以把
数据传输率提高到一个很高的频率,达到PCI所不能提供的高带宽。相对于传统PCI总线
在单一时间周期内只能实现单向传输,PCI-E的双单工连接能提供更高的传输速率和质量,
它们之间的差异跟半双工和全双工类似。
PCI-E - 历史
每一个PCI Express插槽拥有专用的连至PC内存的带宽,而不同于PCI的共享带宽
习惯了做业界规范制定者的Intel,在2001年宣布了要用一种新的技术取代PCI总线
和多种芯片的内部连接。并称之为第三代I/O总线技术(很明显Intel的意思是它代表着下
一代I/O接口标准)。
该总线的规范由Intel支持的AWG(Arapahoe Working Group)负责制定。2002 年
4月17日,AWG正式宣布3GIO 1.0规范草稿制定完毕,并移交PCI-SIG进行审核(主
要以Intel、AMD、IBM、DELL、NVIDIA等20多家业界主导公司开始起草3GIO,2002
年草案完成,2002年7月23日经过审核后正式公布。
开始的时候大家都以为它会被命名为Serial PCI(受到串行ATA的影响),但最后却被
正式命名为PCI Express(以下简称PCI-E)。2006年正式推出Spec2.0(2.0规范)。这
个新标准将全面取代现行的PCI和AGP,最终实现总线标准的统一 。
[1]
2001年春季的IDF上Intel正式公布PCI Express,是取代PCI总线的第三代I/O技
术,也称为3GIO。该总线的规范由Intel支持的AWG(Arapahoe Working Group)负
责制定。2002 年4月17日,AWG正式宣布3GIO 1.0规范草稿制定完毕,并移交PCI-SIG
进行审核。开始的时候大家都以为它会被命名为Serial PCI(受到串行ATA的影响),但最
后却被正式命名为PCI Express。2006年正式推出Spec2.0(2.0规范)。
PCI Express总线技术的演进过程,实际上是计算系统I/O接口速率演进的过程。PCI
总线是一种33MHz@32bit或者66MHz@64bit的并行总线,总线带宽为133MB/s到最
大533MB/s,连接在PCI总线上的所有设备共享133MB/s~533MB/s带宽。这种总线用
来应付声卡、10/100M网卡以及USB 1.1等接口基本不成问题。随着计算机和通信技术
的进一步发展,新一代的I/O接口大量涌现,比如千兆(GE)、万兆(10GE)的以太网技
术、4G/8G的FC技术,使得PCI总线的带宽已经无力应付计算系统内部大量高带宽并行
读写的要求,PCI总线也成为系统性能提升的瓶颈,于是就出现了PCI Express总线。PCI
Express总线技术在当今新一代的存储系统已经普遍的应用。PCI Express总线能够提供极
高的带宽,来满足系统的需求。
目前,PCI-E 3.0规范也已经确定,其编码数据速率,比同等情况下的PCI-E 2.0规范
提高了一倍,X32端口的双向速率高达320Gbps。
PCI-E - 接口
PCI Express提供专用的、可扩展的带宽(高达传统PCI带宽的30倍)
PCI-E的接口根据总线位宽不同而有所差异,包括X1、X4、X8以及X16,而X2模
式将用于内部接口而非插槽模式。PCI-E规格从1条通道连接到32条通道连接,有非常强
的伸缩性,以满足不同系统设备对数据传输带宽不同的需求。此外,较短的PCI-E卡可以
插入较长的PCI-E插槽中使用,PCI-E接口还能够支持热拔插,这也是个不小的飞跃。PCI-E
X1的250MB/秒传输速度已经可以满足主流声效芯片、网卡芯片和存储设备对数据传输带
宽的需求,但是远远无法满足图形芯片对数据传输带宽的需求。 因此,用于取代AGP接
口的PCI-E接口位宽为X16,能够提供5GB/s的带宽,即便有编码上的损耗但仍能够提供
约为4GB/s左右的实际带宽,远远超过AGP 8X的2.1GB/s的带宽。
PCI-E - 技术规格
PCI-E
尽管PCI-E技术规格允许实现X1(250MB/秒),X2,X4,X8,X12,X16和X32
通道规格,但是依目前形式来看,PCI-E X1和PCI-E X16已成为PCI-E主流规格,同时很
多芯片组厂商在南桥芯片当中添加对PCI-E X1的支持,在北桥芯片当中添加对PCI-E X16
的支持。除去提供极高数据传输带宽之外,PCI-E因为采用串行数据包方式传递数据,所
以PCI-E接口每个针脚可以获得比传统I/O标准更多的带宽,这样就可以降低PCI-E设备
生产成本和体积。另外,PCI-E也支持高阶电源管理,支持热插拔,支持数据同步传输,
为优先传输数据进行带宽优化。
PCI Express的引入是用来克服以前PCI总线的限制。PCI总线是Intel十年前开发和
发布的,工作在33MHz和32位环境下,理论带宽峰值是每秒132MB。它使用共享总线
拓扑结构——总线带宽在多个设备间共享——从而实现总线上不同设备间的通信。随着设
备的发展,新的占用大量带宽的设备开始吞噬同一共享总线上的其他设备的带宽。例如,
1G网卡可独占95%的PCI总线带宽。
为了提供这些新型设备所要求的带宽,PC行业协会和外设厂商一起开发了PCI
Express并且于2004年开始在标准的台式计算机上提供。大部分来自顶级供应商的台式机
器已经至少包含了一个PCI Express插槽。相对于PCI,PCI Express最引人注目的进步是
它点到点的拓扑结构。用于PCI的共享总线被一个共享开关所代替,这个开关使得每一个
设备拥有对总线的直接访问权。并且不同于PCI将带宽分给总线上的所有设备的是,PCI
Express提供给每一个设备它自己专用的数据流水线。数据通过被称为信道的发送和接受
信号对来以包的形式串行传输,每个信道具有单方向250M字节/秒的速度。多个信道可以
组合在一起形成x1 (“单一的”)、 x2、 x4、x8、x12、x16、和x32的信道带宽从而提
高插槽的带宽。
诸如数据采集和波形发生器之类的应用需要足够的带宽来保证数据能以足够快的速度
传输至内存而不丢失或重写。相对于传统的总线,PCI Express极大地提高了数据带宽,
减少了对板载内存的需求并且实现了更快的数据流传输。初始的信号频率,即技术标准规
定的2.5G位/秒,是32位、33MHz 的PCI可用带宽的30倍(一个x16的插槽),并且
这一信号频率预期将随着芯片技术的进步增加至10G位/秒——这是铜线信号的极限。并
且由于PCI Express的可扩展信道拓扑结构,数据采集厂商可以实现具有符合设备所需要
信道数的PCI Express插槽。
PCI-E - 系统构架
大部分主板包含了PCI插槽和PCI Express插槽
PCI-E是一种双向串行连接。其总线本身又分成数个通道,每个通道支持2.5Gbit/S
的双向数据传输速度。通过编码和误差校验处理后,数据被转换成适用于NIC、HCA和
HBA传输的250MB/秒的有效带宽,这足以满足2Gb Fiber Channel的HBA卡。
这里需要着重介绍的一个概念就是通道。举个例子,如果你要使用4Gb的Fiber
Channel,并在一个端口的HBA上全双工运行的话,你就需要400MB/S的双向带宽。如
果使用PCI-E技术,只需要两个全速开放的子通道就能够满足需求。你也能使用单通道,
不过你会被限制在250MB/S的速度上。这对于像数据索引搜索这类应用的IOPS是足够的
了。
如果使用400MB/S的无其他开销的传输速度来应付16KB请求的话,每秒可完成
25000个(400MB/S 16000KB)请求,而250MB/S的一个单通道每秒则能够处理16000
个请求。但因为有附加的头文件,所以实际应用中永远达不到这个速度。不过从另一方面
说,一个或两个通道已能够满足大部分的服务器、HBA卡和RAID系统的传输需求了。
如果只以IOPS的角度来看,一个单通道就能够和一块4GB HBA协同工作了。如果使
用双端口的话,一个或两个通道就满足大多数RAID架构的需求。
如果假设一块硬盘每秒的随机I/O读取次数最多在150次左右的话,那么非常多数量
的磁盘驱动器和缓存才能使其达到全速。由于大多数的RAID控制器没有8K的命令序列,
因此你也将大大超越RAID控制器的命令序列。
我记不得有哪个时期I/O总线的性能超过了最快的主机接口速度,因此我认为我们到
达了一个科技史上非常重要的时刻,总线已足以满足各种外接卡的速度需求。而这就意味
着有了一些新状况已产生:
要有足够的内存带宽才能使总线全速运行:使用新的16通道PCI-E,全速双向运行总
线可达10 GB/S(2.5 Gb/S*2 *16/8)的带宽。对于如今大部分x86和AMD系统的内存
带宽来说的这都是个不小的值。
系统中的瓶颈:许多来自各类厂商的PCI和PCI-X总线接口和内存系统之间总是存在
性能瓶颈。在大多数情况下,这些性能设计缺陷限制了总线性能,即限制了总线从内存中
读取和写入性能。偶尔总线本身也存在设计缺陷,但这种情况比总线和内存间出现问题的
几率要小。能明显地看出,我们需要这个接口的性能达到PCI-X的1GB/秒或更高。这就
需要厂商检查接口的设计、进行早期的测试。
新I/O卡:随着新一代总线的推出,相对应的I/O卡也必须得到发展。这其中包括Fibre
Chnanel、InfiniBand和新一代以太网(1G和10G)卡。测试这些卡的流量性能是非常
困难的。虽然找到测试设备并非难事,不过找到了解硬件知识的人才和确定卡所部属的软
件堆栈是比较困难的。如果这些卡有良好的速度和IOPS性能,那会非常最佳。但如果存
在瓶颈,就非常难更正。其中的问题可能存在于非常多方面:应用程式、操作系统、I/O
驱动、卡驱动、PCI-E总线、内存带宽或其他数据通道的问题。在1990年,我参和了早期
Fiber Channel的测试,当时就有厂商表示我们能通过解决数据通路上的一些问题来提高
其接口速率。
[2]
PCI-E - 兼容性
PCI Express保持与传统PCI的软件兼容性,但是将物理总线代替成为一个高速
(2.5Gb/s)的串行总线。因为这种体系结构发生了改变,所以插槽本身并不兼容。但是,
在PCI向PCI Express的过渡过程中,大部分计算机主板将既提供PCI插槽又提供PCI
Express插槽。具有较少信道插槽的设备可以“向上插入”至主板上具有较多信道的插槽,
从而提高硬件的兼容性和灵活性。但是,“向下插入”至较少信道的插槽是不支持的。
大部分来自顶级厂商的PC现在已经至少包含一个PCI Express插槽了。最常见的插
槽大小是x1和x16。x1插槽是一个通用的插槽用来作为NI PCIe M系列数据采集和NI
PCIe GPIB设备的主机设备。现在,服务器级的机器需要x4和x8的插槽,以用于那些包
含NI PCIe摄像机链路(Camera Link)图像采集设备的装置。然而“服务器”并不简单
地意味着高价格,因为优良的服务器也具有与台式机箱可比的价格。例如,2005年5
月, Dell SC240服务器除了3个PCI插槽之外,还有一个x1和一个x8的PCI Express
插槽。
在选择一个计算机时最重要的是确保PCI Express插槽被连接到的物理连接的大小。
例如,一些厂商使用的主板具有x8的插槽,却是x4的连接大小。这些插槽上的设备将只
会运行在x4的数据速率上。在您向上插入一个PCI Express设备的情况下,请保证您使用
的计算机运行在您设备所支持的最大数据速率时支持向上插入。PCI Express技术标准仅
仅要求“向上插入”来工作在x1数据速率下。这就会导致一个插入x8插槽的x4的设备
工作在x1的数据速率下(250MB/s)。
PCI-E - 技术优势
PCI总线的最大优点是总线结构简单、成本低、设计简单,但是缺点也比较明显:
1) 并行总线无法连接太多设备,总线扩展性比较差,线间干扰将导致系统无法正常工
作;
2) 当连接多个设备时,总线有效带宽将大幅降低,传输速率变慢;
3) 为了降低成本和尽可能减少相互间的干扰,需要减少总线带宽,或者地址总线和数
据总线采用复用方式设计,这样降低了带宽利用率。 PCI Express总线是为将来的计算机
和通讯平台定义的一种高性能,通用I/O互连总线。
与PCI总线相比,PCI Express总线主要有下面的技术优势:
1) 是串行总线,进行点对点传输,每个传输通道独享带宽。
2) PCI Express总线支持双向传输模式和数据分通道传输模式。其中数据分通道传输
模式即PCI Express总线的x1、x2、x4、x8、x12、x16和x32多通道连接,x1单向传
输带宽即可达到250MB/s,双向传输带宽更能够达到500MB/s,这个已经不是普通PCI
总线所能够相比的了。
3) PCI Express总线充分利用先进的点到点互连、基于交换的技术、基于包的协议来
实现新的总线性能和特征。电源管理、服务质量(QoS)、热插拔支持、数据完整性、错误
处理机制等也是PCI Express总线所支持的高级特征。
4) 与PCI总线良好的继承性,可以保持软件的继承和可靠性。PCI Express总线关键
的PCI特征,比如应用模型、存储结构、软件接口等与传统PCI总线保持一致,但是并行
的PCI总线被一种具有高度扩展性的、完全串行的总线所替代。
5) PCI Express总线充分利用先进的点到点互连,降低了系统硬件平台设计的复杂性
和难度,从而大大降低了系统的开发制造设计成本,极大地提高系统的性价比和健壮性。
从下面表格可以看出,系统总线带宽提高同时,减少了硬件PIN的数量,硬件的成本直接
下降。
[1]
PCI-E - 硬件协议
PCIe的连接是建立在一个双向的序列的(1-bit)点对点连接基础之上,这称之为“传输
通道”。与PCI 连接形成鲜明对比的是PCI是基于总线控制,所有设备共同分享的单向32
位并行总线。PCIe是一个多层协议,由一个对话层,一个数据交换层和一个物理层构成。
物理层又可进一步分为逻辑子层和电气子层。逻辑子层又可分为物理代码子层(PCS)和
介质访问控制子层(MAC)。
PCI-E - 物理传输层
PCI Express
于使用电力方面,每组流水线使用两个单向的低电压微分信号(LVDS)合计达到2.5
兆波特。传送及接收不同数据会使用不同的传输通道,每一通道可运作四项资料。两个PCIe
设备之间的连接成为“链接”,这形成了1组或更多的传输通道。各个设备最少支持1传
输通道(x1)的链接。也可以有2,4,8,16,32个通道的链接。这可以更好的提供双向兼
容性。(x2模式将用于内部接口而非插槽模式)PCIe卡能使用在至少与之传输通道相当的
插槽上(例如x1接口的卡也能工作在x4或x16的插槽上)。一个支持较多传输通道的插
槽可以建立较少的传输通道(例如8个通道的插槽能支持1个通道)。PCIe设备之间的链
接将使用两设备中较少通道数的作为标准。一个支持较多通道的设备不能在支持较少通道
的插槽上正常工作,例如x4接口的卡不能在x1的插槽上正常工作,但它能在x4的插槽
上只建立1个传输通道(x1)。PCI-Express卡能在同一数据传输通道内传输包括中断在内的
全部控制信息。这也方便了与PCI的兼容。多传输通道上的数据传输采取交叉存取,这意
味着连续字节交叉存取在不同的通道上。这一特性被称之为“数据条纹”,需要非常复杂的
硬件支持连续数据的同步存取,也对链接的数据吞吐量要求极高。由于数据填充的需求,
数据交叉存取不需要缩小数据包。与其它高速数传输协议一样,时钟信息必须嵌入信号中。
在物理层上,PCIe采用常见的8B/10B代码方式来确保连续的1和0字符串长度符合标准,
这样保证接收端不会误读。编码方案用10位编码比特代替8个未编码比特来传输数据,
占用20%的总带宽。有些协议(如SONET)使用另外的编码结构如“不规则”在数据流
中嵌入时钟信息。PCIe的特性也定义了一种“不规则化”的运算方法,但这种方法与SONET
完全不同,它的方法主要用来避免数据传输过程中的数据重复而出现数据散射。第一代
PCIe采用2.5兆位单信号传输率,PCI-SIG计划在未来版本中增强到5~10兆位。
PCI-E - 数据链接层
数据链接层采用按序的交换层信息包(Transaction Layer Packets,TLPs),是由交换层
生成,按32位循环冗余校验码(CRC,本文中用LCRC)进行数据保护,采用著名的协议(Ack
and Nak signaling)的信息包。TLPs能通过LCRC校验和连续性校验的称为Ack(命令正
确应答);没有通过校验的称为Nak(没有应答)。没有应答的TLPs或者等待超时的TLPs会
被重新传输。这些内容存储在数据链接层的缓存内。这样可以确保TLPs的传输不受电子噪
音干扰。
Ack和Nak信号由低层的信息包传送,这些包被称为数据链接层信息包(Data Link
Layer Packet,DLLP)。DLLP也用来传送两个互连设备的交换层之间的流控制信息和实现
电源管理功能。
PCI-E - 交换层
PCI Express采用分离交换(数据提交和应答在时间上分离),可保证传输通道在目标
端设备等待发送回应信息传送其它数据信息。它采用了可信性流控制。这一模式下,一个
设备广播它可接收缓存的初始可信信号量。链接另一方的设备会在发送数据时统计每一发
送的TLP所占用的可信信号量,直至达到接收端初始可信信号最高值。接收端在处理完毕
缓存中的TLP后,它会回送发送端一个比初始值更大的可信信号量。可信信号统计是定制
的标准计数器,这一算法的优势,相对于其他算法,如握手传输协议等,在于可信信号的
回传反应时间不会影响系统性能,因为如果双方设备的缓存足够大的话,是不会出现达到
可信信号最高值的情况,这样发送数据不会停顿。第一代PCIe标称可支持每传输通道单向
每秒250兆字节的数据传输率。这一数字是根据物理信号率2500兆波特除以编码率(10
位/每字节)计算而得。这意味着一个16通道(x16)的PCIe卡理论上可以达到单向
250*16=4000兆字节/秒(3.7G兆字节/每秒)。实际的传输率要根据数据有效载荷率,即
依赖于数据的本身特性,这是由更高层(软件)应用程序和中间协议层决定。PCI Express与
其它高速序列连接系统相似,它依赖于传输的鲁棒性(CRC校验和Ack算法)。长时间连
续的单向数据传输(如高速存储设备)会造成>95%的PCIe通道数据占用率。这样的传输
受益于增加的传输通道,但大多数应用程序如USB或以太网络控制器会把传输内容拆成小
的数据包,同时还会强制加上确认信号。这类数据传输由于增加了数据包的解析和强制中
断,降低了传输通道的效率。这种效率的降低并非只出现在PCIe上。
PCI-E - 制式标准
半高卡微型卡:代替Mini PCI卡 (支持x1 PCIe, USB 2.0和SMBus总线接口)
快速卡:类似PCMCIA接口标准(支持x1 PCIe,USB 2.0;支持热插拔)
先进TCA卡:代替CompactPCI卡
PCI-E - 竞争协议
基于高速序列构架产生了很多传输标准。包括HyperTransport,InfiniBand,RapidIO
和StarFabric等等。这些均有业界的不同企业支持,背后也都有大量的资金投入标准的研
究开发,所以每一标准都声称自己与众不同,独占优势。主要的差异在于可扩展性、灵活
性与反应时间、单位成本的取舍平衡各不相同。其中的一个例子是在传输包上增加一个复
杂的头信息以支持复杂路由传输(PCI Express不支持这种方式)。这样的信息增加降低了
接口的有效带宽也使传输更复杂,但是相应创造了新的软件支持此功能。这种架构下需要
软件追踪网络拓扑结构的变化以实现系统支持热插拔。InfiniBand 和 StarFabric 标准即
能实现这以功能。另一个例子是缩小信息包以减少反应时间。较小的信息包意味着包头占
用了包的更大百分比,这样又降低了有效带宽。能实现此功能的标准是RapidIO 和
HyperTransport。PCI Express取中庸之道,定位于设计成一种系统互连接口(总线)而非
一种设备接口或路由网络协议。另外为了针对软件透明,它的设计目标限制了它作为协议,
也在某种程度上增加了它的反应时间。
想像归想像,真正做起来又是另外一回事,在测试的准备阶段我们就碰到了一个难题
——根本没有一块主板上同时拥有PCIe X1、X4、X8、X16四个规格的插槽,如果在不同
主板上测试又会使得测试的数据失实,为了能解决这个难题,需要分析PCIe的结构特点。
PCIe针脚定义图
不同于之前的显卡接口,PCIe的每个信号通道都是相对独立的结构,正反每两个信道
组成1X的带宽,知道了它的工作原理,我们就可以通过屏蔽信道的方式来达到修改PCIe
工作模式的目的了。
PCIe金手指实物图
理论说完了,让我们来看看实物,这次当实验品的是一块铭瑄的7600GT显卡,仔细
观察它的PCIe接口,就可以发现每隔一段距离就有一个空接的金手指,这正是各种PCIe
模式之间的分隔线。