PCI-E
1 简介
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的双单工连接能提供更高的传输速率和质量,它们之间的差异跟半双工和全双工类似。
2 历史
习惯了做业界规范制定者的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,最终实现总线标准的统一。
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。
3 接口
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的带宽。
4 技术规格
尽管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插槽。
5 系统构架
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的测试,当时就有厂商表示我们能通过解决数据通路上的一些问题来提高其接口速率。
6 兼容性
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)。
7 技术优势
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的数量,硬件的成本直接下降。
8 硬件协议
PCIe的连接是建立在一个双向的序列的(1-bit)点对点连接基础之上,这称之为“传输通道”。与PCI连接形成鲜明对比的是PCI是基于总线控制,所有设备共同分享的单向32位并行总线。PCIe是一个多层协议,由一个对话层,一个数据交换层和一个物理层构成。物理层又可进一步分为逻辑子层和电气子层。逻辑子层又可分为物理代码子层(PCS)和介质访问控制子层(MAC)。
9 物理传输层
于使用电力方面,每组流水线使用两个单向的低电压微分信号(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兆位。
10 数据链接层
数据链接层采用按序的交换层信息包(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也用来传送两个互连设备的交换层之间的流控制信息和实现电源管理功能。
11 交换层
PCI Express采用分离交换(数据提交和应答在时间上分离),可保证传输通道在目标端设备等待发送回应信息传送其它数据信息。它采用了可信性流控制。这一模式下,一个设备广播它可接收缓存的初始可信信号量。链接另一方的设备会在发送数据时统计每一发送的TLP所占用的可信信号量,直至达到接收端初始可信信号最高值。接收端在处理完毕缓存中的TLP后,它会回送发送端一个比初始值更大的可信信号量。可信信号统计是定制的标准计数器,这一算法的优势,相对于其他算法,如握手传输协议等,在于可信信号的回传反应时间不会影响系统性能,因为如果双方设备的缓存足够大的话,是不会出现达到可信信号最高值的情况,这样发送数据不会停顿。第一代PCIe标称可支持每传输通道单向每秒250兆字节的数据传输率。这一数字是根据物理信号率2500兆波特除以编码率(10位/每字节)计算而得。这意味着一个16通道(x16)的PCIe卡理论上可以达到单向250*16=4000兆字节/秒(3.7G兆字节/每秒)。实际的传输率要根据数据有效载荷率,即依赖于数据的本身特性,这是由更高层(软件)应用程序和中间协议层决定。PCI Express与其它高速序列连接系统相似,它依赖于传输的鲁棒性(CRC校验和Ack算法)。长时间连续的单向数据传输(如高速存储设备)会造成>95%的PCIe通道数据占用率。这样的传输受益于增加的传输通道,但大多数应用程序如USB或以太网络控制器会把传输内容拆成小的数据包,同时还会强制加上确认信号。这类数据传输由于增加了数据包的解析和强制中断,降低了传输通道的效率。这种效率的降低并非只出现在PCIe上。
12 制式标准
半高卡微型卡:代替Mini PCI卡(支持x1 PCIe, USB2.0和SMBus总线接口)
快速卡:类似PCMCIA接口标准(支持x1 PCIe,USB 2.0;支持热插拔)
先进TCA卡:代替CompactPCI卡
13 竞争协议
基于高速序列构架产生了很多传输标准。包括HyperTransport,InfiniBand,RapidIO和StarFabric等等。这些均有业界的不同企业支持,背后也都有大量的资金投入标准的研究开发,所以每一标准都声称自己与众不同,独占优势。主要的差异在于可扩展性、灵活性与反应时间、单位成本的取舍平衡各不相同。其中的一个例子是在传输包上增加一个复杂的头信息以支持复杂路由传输(PCI Express不支持这种方式)。这样的信息增加降低了接口的有效带宽也使传输更复杂,但是相应创造了新的软件支持此功能。这种架构下需要软件追踪网络拓扑结构的变化以实现系统支持热插拔。InfiniBand 和 StarFabric 标准即能实现这以功能。另一个例子是缩小信息包以减少反应时间。较小的信息包意味着包头占用了包的更大百分比,这样又降低了有效带宽。能实现此功能的标准是RapidIO 和HyperTransport。PCI Express取中庸之道,定位于设计成一种系统互连接口(总线)而非一种设备接口或路由网络协议。另外为了针对软件透明,它的设计目标限制了它作为协议,也在某种程度上增加了它的反应时间。
PCI-E2.0和PCI-EX16
PCI-Express是当前主流的总线和接口标准,它原来的名称为“GIO”,是由Intel提出的,很明显Intel的意思是它代表着下一代I/O接口标准。交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。这个新标准将全面取代现行的PCI和AGP,最终实现总线标准的统一。PCI-E的接口根据总线位宽不同而有所差异,包括X1、X4、X8以及X16,而X2模式将用于内部接口而非插槽模式。PCI-E X1能够提供250MB/s的传输速度,显卡用的PCI-E X16则达到了4GB/s,由于PCI-E总线可以在上下行同时传输数据,因此通常说PCI-E X16的带宽为8GB/s!以目前的情况来看,PCI-E X16 8GB/s的速度对于显卡来说是绰绰有余的,接口带宽还没有达到瓶颈,并不会限制显卡性能的发挥。但是PCI-E的规范制定者PCI-SIG已经在马不停蹄的开发下一代总线标准了,这被称为PCI-E 2.0。(PCI-E 2.0插槽示意图)PCI-E 2.0相对于目前的1.0来说,的确是名副其实的双倍规格:●带宽翻倍:将单通道PCI-E X1的带宽提高到了500MB/s,也就是双向1GB/s;●通道翻倍:显卡接口标准升级到PCI-E X32,带宽可达32GB/s;●插槽翻倍:芯片组/主板默认应该拥有两条PCI-E X32插槽;●功率翻倍:目前PCI-E插槽所能提供的电力最高为75W,2.0版本可能会提高至200W以上,目前还不确定。(三条PCI-E X16还不够,以后将会是条PCI-E X32或者四条X16的配置)NVIDIA/ATI为了推广双卡互联技术,并且确保双卡性能不受损失,将双X8芯片组升级到了双X16,如今最新的芯片组为双X16+X8的三插槽配置。现在看来PCI-E 2.0标准完全是为下一代高端显卡准备的,双X32的PCI-E 2.0插槽可以轻松组建Quad SLI/CrossFire而不损失性能。更高的带宽目前来看并没有实质性的作用,不过高输出功率可以省去显卡的供电接头,更加方便一些。PCI-E 2.0总线是可以向下兼容的,也就是说1.0接口的显卡可插在2.0插槽的主板上,但2.0接口的显卡无法在现有主板上使用。据悉ATI R600已经能够支持PCI-E 2.0标准,通过高速的总线,GPU可以与CPU更好的协同处理一些特殊的运算。在明年第二季度,将会有PCI-E 2.0规范的实物展出,不过想要普及还为时尚早!
PCI与PCI-E有什么区别?PCI-E16X 又是什么意思?
PCI插槽是基于PCI局部总线(Pedpherd Component Interconnect,周边元件扩展接口)的扩展插槽,其颜色一般为乳白色,位于主板上AGP插槽的下方,ISA插槽的上方。其位宽为32位或64位,工作频率为33MHz,最大数据传输率为133MB/sec(32位)和266MB/sec(64位)。可插接显卡、声卡、网卡、内置Modem、内置ADSL Modem、USB2.0卡、IEEE1394卡、IDE接口卡、RAID卡、电视卡、视频采集卡以及其它种类繁多的扩展卡。PCI插槽是主板的主要扩展插槽,通过插接不同的扩展卡可以获得目前电脑能实现的几乎所有外接功能。
PCI-E 16X新的PCI Express总线的技术:PCI-E 16X是全双工接口,可同时在两个方向上传输数据,而AGP接口只是半双工的,数据上下行操作无法同时进行,AGP总线只能提供266MB/S的上行能力,相比之下PCI-E 16X就能充分显示其4GB/S上下行能力的优势。现在一些风头正劲的显卡就是PCI-E 16X的。但是目前主流还是AGP 8X显卡,从显示子系统带宽来看,AGP 8X能提供的带宽为2.1G/S。而PCI-E显卡基本上都是PCI-E 16X的接口,带宽为8G/S,与AGP 8X不同,PCI-E 16X包括两条专用的通道,一条可由显卡单独到北桥,而另一条则可由北桥单独到显卡,每条单独的通道均将拥有4Gb/s的数据带宽可充分避免因带宽所带来的性能瓶颈问题。