从1.0到6.0的飞跃之路,PCIe总线技术发展解析

PCIe作为目前PC系统中最主要的总线,从最初的1.0时代,发展到现在的6.0版本草案,经历了多次PC架构的演化,也带来了用户体验的一次次升级。现在,PCIe技术发展到了一个比较关键的路口,随着人们对带宽无止境的需求,现有的PCIe技术已经渐渐跟不上形势的发展,新的技术究竟该怎么走,带宽是否还能继续翻倍发展呢?这一切,值得观察和思考。
带宽严重不足需要新技术的PCI、AGP时代
1992年6月22日,英特尔发明了名为外部链接标准也就是Peripheral Component Interconnect的接口规范,缩写为PCI。PCI接口的特性在于采用的是并行传输方式,根据连接的数据宽度和频率不同,能够达到不同的数据传输速度。PC中使用的PCI主流标准有两种,都采用32bit带宽,频率分别为33MHz和66MHz,带宽分别是133MB/s和266MB/s。
▲英特尔440BX主板,白色的接口是PCI接口。
PCI的带宽有限,对日益强悍的GPU等高性能单元来说逐渐成为了瓶颈。因此,基于PCI的技术又发展出了AGP等专用于图形卡的总线接口标准。AGP依旧是并行传输数据,考虑到插槽长度的问题,依旧采用了32bit的接口,但是采用多倍数传输数据的方式,频率从66MHz起跳,最终达到533MHz(实际物理传输频率依旧是66MHz),数据带宽最大可达2133MB/s。
▲Radeon 9550 AGP版本,AGP 8x的带宽最高为2133MB/s。
PCI和AGP等接口带来了2000年左右PC市场的繁荣。随着系统性能进一步提升,对带宽要求越来越大。此时PCI和AGP的劣势逐渐显现了出来。实际上,PCI或AGP这样的并行传输技术,无法在当时的技术条件下带来性能的进一步提升。原因也很简单,PCI或者AGP这样的并行传输技术带宽来自于两个关键参数:位宽和频率。
▲英特尔915P主板,首款支持PCIe的产品。
32bit位宽在当时工艺下和插接口尺寸相关,很难在寸土寸金的主板上采用更大的比如64bit位宽(这一点仅在服务器主板采用的PCI-X插接口上实现了)。同时频率受制于并行发送多个数据难以同步,高频率数据容易遭受干扰以及主板制造成本等问题也几乎卡在了66MHz左右。因此,并行的PCI接口需要彻底改变才能适应未来的带宽发展计划。
▲PCI-X接口的网卡,可见PCI-X接口的长度差不多是PCI接口的2倍。
终于在2001年8月3日,非营利组织PCI-SIG召集了九大厂商,包括英特尔、AMD、惠普、康柏、博通、IBM、微软、德州仪器和凤凰科技等,进行投票表决,并全票通过了新总线标准的相关协议,随后这个标准就被正式命名为PCI Express,也就是我们今天看到的PCIe总线标准。
▲不同尺寸的PCIe接口
强悍“身板”PCIe的技术基础
在演进到PCIe之后,整个计算机架构的发展可谓走上了快车道。在这一部分,本文将解读PCIe的技术基础以及它为什么能够在10多年之后依旧拥有强大的生命力。
从概念上来说,PCIe总线架构实际上是旧的PCI总线的高速串行替代产品,其最大的差别在于总线的拓扑结构:PCI总线使用的是共享并行总线架构,所有的PCI主机和所有的设备共享一组通用的地址、数据和控制线。PCIe基于点对点的拓扑结构,单独的串行链路将每个设备连接到host(root complex),由于其共享式总线拓扑结构,因此采用的是仲裁方式访问,单个方向上一次只允许一个主设备存在。
在数据传输方面,旧的PCI时钟方案采用的是总线上最慢的设备频率作为基准数据传输频率(不管有多少设备,也不管其他设备的情况如何),因此整体传输效率会被较慢的设备拉低。鉴于此,在传统的PCI-AGP系统中,AGP总线需要单独的控制器才能访问和控制,并和通用的PCI链路彻底隔离。这样显然增加了系统的复杂程度。
相比之下,PCIe改用了全新的任意两个端点的全双工通信,同时对多个端点的并发访问没有限制,系统只需要保留一个或者数个多通路的PCIe控制器,就可以实现对不同带宽需求的设备进行控制。比如显卡需要PCIe x16,SSD需要PCIe x4,声卡需要PCIe x1,这些设备都可以挂接在一个PCIe控制器上,互相之间也不会受到影响。
在总线协议方面,PCIe的通信数据使用了特殊的数据包封装,打包和解包数据以及状态消息流的工作由PCIe的端口事物层处理,不需要CPU的干涉。此外,PCIe总线在链接配对方面存在极高的灵活性。两个设备之间的PCIe链路可以在x1和x32之间自由变动,此时吞吐量将随着链路变动而变动。
在实际工作中,链路之间的通道数量可以在设备初始化期间自动协商连接,可以采用最低链路的设备规格,也可以采用其他规格。举例来说,可以将只支持PCIe x1的设备插入PCIe x4或者x16的插槽中,初始化时将自动设置为最高可相互支持的物理链接通道数。反之,也可以自行配置较少的通道数,这样能够在设备出现坏道或者不可靠通道时提供容错性。
信号方面,PCIe规定了每一个通道中包含两组差分信号对,其中一对差分信号用于接收数据,另外一对差分信号用于发送数据。因此每个PCIe通道都需要4条线缆或者信号迹线。一般来说,人们对这种同时可以收发的信息通道称作“全双工”信息传输通道。每次传输、链路端点之间的两个方向上都会传递8位字节格式的数据包。采用串行信息的优势在于,每个通道的每个方向只有一个差分信号,并且嵌入了时钟信息,这使得整个系统的抗干扰能力大大增强,并且频率极限被提升至千兆赫兹。
PCIe的初始标准定义了七种链路宽度,对应七种不同的物理插槽规格。这七种链路规格的通道数量分别为1组、2组、4组、8组、12组、16组和32组,对应的标识分别采用x1、x2、x4、x8、x12、x16和x32,不同规格的链路也和相应长度的物理插槽规格相匹配。一般来说,x16插槽是最常见的插槽规格,它用于接驳显卡或者万兆网络、超高速SSD等高性能高带宽设备。x32的插槽不太多见,往往用于服务器或者特殊场合。
值得一提的是,由于PCIe规范的灵活性,人们往往设计智能切换方案来进行插槽链路配置,而不再需要和物理链路规格绑定。举例来说,一个x16的PCIe链路,可以同时面向一个x16规格的物理插槽和一个x4规格的物理插槽。
当x4物理接口没有插入任何设备时,在优先级配置规范的指引下,PCIe链路将全部分配给x16的物理插槽;当x4规格接口插入设备后,PCIe链路可以根据配置需要,分配x12或者x8的链路给原本为x16的物理插槽,新的x4接口可以在不启用和获得x4带宽之间自由选择。
除了上述传输方面的设计外,PCIe在电源方面也作出了加强。根据PCIe规范,PCIe设计了数个专用的+12V和+3.3V引脚,最大可供电能力为75W,这个供电能力已经完全可以满足大部分普通设备的需求了。不过在实际使用中,受制于主板设计、PCB设计以及系统供电等原因,PCIe插槽的供电能力有可能达不到75W,各家厂商也会在相应的产品中予以说明。
▲显卡所使用的6pin、8pin供电标准也是PCIe规范所定义的。
1.0~3.0时代PCIe锋芒尽显
初始时代:PCIe 1.0标准小试牛刀PCIe 1.0a在2003年由PCI-SIG正式推出相关规范。PCIe 1.0a的每通道运行频率为250MHz,相应的数据传输速率为250MB/s,不过更正规的写法被写成2.5GT/s,也就是每秒2.5千兆次传输。这里需要注意的是,PCIe的每通道数据是打包传输的,其中不但包括需要传递的目标数据,还包括校验信息。
PCIe 1.0a实际传输10bit的信息,其中2bit为校验信息,只有8bit为真正有用的信息,其传输带宽开销为20%,因此实际的有效信息传递能力为每通道200MB/s。不过,初始的PCIe 1.0a版本在发布后很快就被更新的PCIe 1.1规范替代。相比之前的1.0a版本,PCIe 1.1版本增加了一些功能和稳定性设计,带宽和关键性指标完全相同,因此一般将其统一归为PCIe 1.x时代。
支持PCIe 1.x规范的首款芯片组为英特尔在2004年6月发布的915P芯片组,支持的处理器为Pentium 4、双核心的Pentium D以及面向顶级玩家的Pentium XE,首款支持PCIe技术的显卡为AMD Radeon 9550的PCIe版本。此时的主板芯片组还尚未停止对PCI接口的支持,PCIe在此时主要用于缓解显卡和CPU之间的通讯带宽不足,而芯片组的其余部分扩展接口或多或少都拥有数个PCI插槽。
▲首款支持PCIe规范的Radeon 9550显卡,注意其和AGP接口的差别。
从数据上来看,相比AGP x8的2133MB/s的接口带宽,为显卡准备的PCIe 1.x x16的接口单向带宽达到了4GB/s,双向带宽更是高达8GB/s,单向带宽就相比AGP x8基本翻倍。不过,由于当时的显卡本身性能较弱,再加上并非为PCIe高带宽设计等因素,在几乎相同规格的AGP x8接口和PCIe 1.0 x16的性能对比中,PCIe 1.0 X16并没有带来类似于带宽翻倍那样显著的3D性能提升,两者性能差距并不大。
作为初代产品,PCIe在此时展示的是强悍的扩展能力和几乎无尽的潜能。此外,市场上还存在大量AGP接口的GPU芯片,为了满足PCIe设备的需要,ATI和英伟达还设计了不同的桥接芯片来对GPU的数据接口规格进行转换,并引发了一系列市场竞争的故事,比如著名的“有路何必修桥”就是由ATI提出,所谓原生PCIe接口显卡更有优势的市场宣传口号。
▲英伟达的GeForce 6600GT新版本原生支持PCIe接口,但是为了支持AGP市场,不得不采用双向桥接芯片转换成AGP接口,散热器下方的为桥接芯片。
PCIe 1.x时代持续的时间从本代实际产品上市(英特尔915P,2004年6月)到新一代实际产品上市(PCIe 2.0,英特尔X38,2007年8月)大约持续了3年多,接下来登场的就是长寿命的PCIe 2.0。
PCIe 2.0一统天下PCIe 2.0规范发布于2007年1月,其规范主要变化在于相比PCIe 1.x,PCIe 2.0的每通道频率翻倍来到了500MHz,相应的传输能力翻倍,达到了500MB/s,也就是5GT/s,不过数据编码依旧使用了8bit/10bit的方式,也就是依旧需要使用20%的校验带宽。即使如此,PCIe 2.0在典型应用比如PCIe x16接口的单向带宽也达到了8GB/s,双向带宽更是达到了16GB/s。
除了带宽暴增外,PCIe 2.0还带来了不少新的技术,包括新增的输入输出虚拟化技术,可以让多台虚拟机共享PCIe设备;PCIe线缆子规范还加入了铜缆连接方案,每条线缆速度都可以达到2.5Gbps,满足高速网络连接的需求;另外还加入了动态链路管理和链路宽度管理以及电源控制等多项功能,继续完善着PCIe的技术和生态体系。
首款使用PCIe 2.0技术的芯片组是英特尔2007年8月发布、面向顶级玩家的X38芯片组,AMD也推出了AMD 790FX与之呼应。首款支持PCIe 2.0技术的显卡是英伟达的GeForce 8800GT,在此之后,AMD的Radeon HD 3800等一大批显卡都加入了PCIe 2.0规范。
▲英特尔X38芯片组是第一个支持PCIe 2.0的产品
▲GeForce 8800GT是首款支持PCIe 2.0的显卡
相比PCIe 1.x标准而言,PCIe 2.x的寿命是非常长的,从2007年8月实际产品发布开始,一直到接近4年半后的2012年4月,随着新的处理器上市,PCIe 3.x的实际产品才开始登台亮相,并逐渐替换PCIe 2.x。即使到现在,也有不少市售主板依旧采用PCIe 2.x的设备和接口。
▲PCIe 2.0技术寿命非常长,目前市场主流的AMD B450芯片组依旧在提供对PCIe 2.0技术的支持。
锋芒尽显:PCIe 3.x时代来临PCI-SIG在发布PCIe 1.x和PCIe 2.0相关技术标准时都比较顺利,没有遇到太多的技术难题。但是在PCIe 3.0上,PCI-SIG遇到了很多技术难题。PCIe 3.0的预览规格早在2007年就宣布了(恰好是PCIe 2.0发布后没多久),但是实际的首个版本PCIe 3.0规范在三年后的2010年11月18日才推出。
PCIe 3.0遇到的难题主要来自工程实现。PCIe信号在传输中采用的是铜介质,铜介质实际上是有其物理传输频率上限的,目前的技术估计其物理上限大约在12GT/s。在PCIe 3.x规范研发之初,业内有消息称新的PCIe的传输频率会在PCIe 2.x的基础上继续翻倍,来到大约1GHz的水平,传输速率为10GT/s的水平。
不过在当时的技术条件下,人们发现单纯的频率翻倍难以实现,包括相应连接器件的设计和线路布局都面临困难,成本也可能大幅度上升。作为一个普适性的标准而言,这样的情况让人难以接受。不过,最终技术人员采用了巧妙的手段避开了频率翻倍的问题。
PCIe 3.0的最终标准采用的是800MHz的运行频率,其数据传输速率为8GT/s,相比之前的PCIe 2.0提升了60%,并未翻倍。但是在数据校验方面,PCIe 3.0的校验不再采用8bit/10bit的小包校验方式,转而采用了全新算法的128bit/130bit大包校验方式,以及全新的硬件加扰和解码模块等,其校验带宽开销从之前的20%大跌至1.54%,甚至几乎可以忽略,极大地提升了有效数据的传输带宽。这样一来,PCIe 3.0不需要翻倍传输速率就能够达到实际带宽基本翻倍的目的。
不过问题还没有结束,即使是采用8GT/s的数据传输速率,PCI-SIG组织也怀疑当时的技术难以完成。为此,PCIe 3.0规范加入了一些增强信号指令,以及对数据完整性的优化,包括发送器和接收器以及拓扑结构等,再加上重新优化的PLL、数据通道等。但这还不够,PCI-SIG还进行了为期六个月的技术分析,包括现有低成本材料是否能够满足PCIe 3.0高带宽的需求等,好在最终一切顺利。
最终完成的PCIe 3.0标准每通道带宽为985MB/s,在PCIe x16带宽下能够达到15.7GB/s的水平,相比之前的PCIe 2.x基本做到了翻倍。此外,PCIe 3.0标准的更新版本PCIe 3.1在2014年11月发布,加入了包括电源管理、性能优化和功能拓展等多项改变,当然本质的数据传输能力没有变化。
▲AMD HD 7970是首款支持PCIe 3.0技术的显卡
由于PCIe 3.0的研发遇到了一些困难,因此PCIe 3.0的相关产品推出也比较晚。在处理器端支持PCIe 3.0的首款产品是英特尔第三代酷睿处理器,典型产品包括Core i7-3770,发布于2012年第二季度,搭配芯片组为英特尔6系列,包括Z68、P67等,不过CPU提供的PCIe 3.0 x16链路主要用于显卡,其他设备基本无缘。主板方面,支持PCIe 3.0的产品就要晚很多了,直到2015年9月英特尔发布100系列芯片组,其他设备才有幸使用到PCIe 3.0的带宽。
▲Core i7-3770处理器带来了PCIe 3.0技术,不过主板上其他接口使用PCIe 3.0技术还要等到2年后。
从目前的产品和应用角度来看,PCIe 3.0依旧是当下的主力数据传输接口,尤其是对显卡、SSD、高端万兆网卡等设备来说,PCIe 3.0的出现和应用,解放了长期以来对这些产品在带宽方面的约束,大幅度推动了产品的发展速度。尤其是SSD,在使用了相关PCIe规范的NVMe接口后,有效改善了电脑启动、存储数据时间长的不足。
在PCIe 3.0之后,人们又将眼光瞄向了4.0时代。那么, PCIe 4.0到PCIe 6.0是怎样发展的呢?更多后续内容详见《微型计算机》2019年8月上刊。
对PCIe 4.0~6.0发展情况感兴趣的读者请给我们留言,大家有兴趣我们会继续放出后续内容。

版权声明