从1.0到6.0的飞跃之路PCIe总线技术发展解析
2019-01-14李实
李实
PCIe作为目前PC系统中最主要的总线,从最初的1.0时代,发展到现在的6.0版本草案,经历了多次PC架构的演化,也带来了用户体验的一次次升级。现在,PCIe技术发展到了一个比较关键的路口,随着人们对带宽无止境的需求,现有的PCIe技术已经渐渐跟不上形势的发展,新的技术究竟该怎么走,带宽是否还能继续翻倍发展呢?这一切,值得观察和思考。
带宽严重不足——需要新技術的PCI、AGP时代
1992年6月22日,英特尔发明了名为外部链接标准也就是PeripheralComponent Interconnect的接口规范,缩写为PCI。PCI接口的特性在于采用的是并行传输方式,根据连接的数据宽度和频率不同,能够达到不同的数据传输速度。PC中使用的PCI主流标准有两种,都采用32bit带宽,频率分别为33MHz和66MHz,带宽分別是133MB/s和266HB/$。
PCI的带宽有限.对日益强悍的GPU等高性能单元来说逐渐成为了瓶颈。因此,基于PCI的技术又发展出了AGP等专用于图形卡的总线接口标准。AGP依旧是并行传输数据,考虑到插槽长度的问题,依旧采用了32bit的接口,但是采用多倍数传输数据的方式,频率从66MHz起跳,最终达到533MHz(实际物理传输频率依旧是66MHz),数据带宽最大可达2133MB/s。
PCI和AGP等接口带来了2000年左右PC市场的繁荣。随着系缔性能进一步提升,对带宽要求越来越大。此时PCI和AGP的劣势逐渐显现了出来。实际上,PCI或AGP这样的并行传输技术,无法在当时的技术条件下带来性能的进一步提升。原因也很简单,PCI或者AGP这样的并行传输技术带宽来自于两个关键参数:位宽和频率。32bit位宽在当时工艺下和插接口尺寸相关,很难在寸土寸金的主板上采用更大的比如64bit位宽(这一点仅在服务器主板采用的PCI-X插接口上实现了)。同时频率受制于并行发送多个数据难以同步,高频率数据容易遭受干扰以及主板制造成本等问题也门乎卡在了66MHz左右。因此,并行的PCI接口需要彻底改变才能适应未来的带宽发展计划。
终于在2001年8月3日,非营利组织PCI-SIG召集了九大厂商,包括英特尔、AMD、惠普、康柏、博通、IBM、微软、德州仪器和凤凰科技等,进行投票表决,并全票通过了新总线标准的相关协议,随后这个标准就被正式命名为PCI Express,也就是我们今天看到的PCIe总线标准。
强悍“身板”——PCIe的技术基础
在演进到PCIe之后,整个计算机架构的发展可谓走上了快车道。在这一部分,本文将解读PCIe的技术基础以及它为什么能够在10多年之后依旧拥有强大的生命力。
从概念上来说,PCIe总线架构实际上是旧的PCI总线的高速串行替代产品,其最大的差别在于总线的拓扑结构:PCI总线使用的是共享并行总线架构,所有的PCI主机和所有的设备共享一组通用的地址、数据和控制线。PCIe基于点对点的拓扑结构,单独的串行链路将每个设备连接到host(root compoex),由于其共享式总线拓扑结构,因此采用的是仲裁方式访问,单个方向上一次只允许一个主设备存在。
在数据传输方面,旧的PCI时钟方案采用的是总线上最医的设备频率作为基准数据传输频率(不管有多少设备,也不管其他设备的情况如何),因此整体传输效率会被较慢的设备拉低。鉴于此,在传统的PCI-AGP系统中,AGP总线需要单独的控制器才能访问和控制,并和通用的PCI链路彻底隔离。这样显然增加了系统的复杂程度。相比之下,PCIe改用了全新的任意两个端点的全双工通信,同时对多个端点的并发访问没有限制,系统只需要保留一个或者数个多通路的PCIe控制器,就可以实现对不同带宽需求的设备进行控制。比如显卡需要PCIEX16,SSD需要PCIEX4,声卡需要PCIEX1,这些设备都可以挂接在一个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.3引脚,最大可供电能力为75W,这个供电能力已经完全可以满足大部分普通设备的需求了。不过在实际使用中,受制于主板设计、PCB设计以及系统供电等原因,PCIe插槽的供电能力有可能达不到75W,各家厂商也会在相应的产品中予以说明。
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.xs寸代。
支持PCIe 1.x规范的首款芯片组为英特尔在2004年6月发布的915P芯片组.支持的处理器为Pentium 4、双核心的Pentium D以及面向顶级玩家的Pentium xE,首款支持PCIe技术的显卡为AMD Radeon 9550的PCIe版本。此时的主板芯片组还尚未停止对PCI接口的支持,PCIe在此时主要用于缓解显卡和CPU之间的通讯带宽不足,而芯片组的其余部分扩展接口或多或少都拥有数个PCI插槽。
从数据上来看,相比AGP x8的2133MB/s的接口带宽,为显卡准备的PCIe 1.x x16的接口单向带宽达到了4GB/s,双向带宽更是高达8GB/s,单向带宽就相比AGP x8基本翻倍。不过,由于当时的显卡本身性能较弱,再加上并非为PCIe高带宽设计等因素,在几乎相同规格的AGP x8接口和PCIe 1.0x16的性能对比中,PCIe 1.0 X16并没有带来类似于带宽翻倍那样显著的3D性能提升,两者性能差距并不大。作为初代产品,PCIe在此时展示的是强悍的扩展能力和几乎无尽的潜能。此外,市场上还存在大量AGP接口的GPU芯片。为了满足PCIe设备的需要,ATI和英伟达还设计了不同的桥接芯片来对GPU的数据接口规格进行转換,并引发了一系列市场竞争的故事,比如著名的“有路何必修侨”就是由ATI提出,所谓原生PCIe接口显卡更有优势的市场宣传口号。
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在典型应用比如PCIex16接口的单向带宽也达到了8GB/5,双向带宽更是达到了16GB/s。
除了带宽暴增外,PCIe 2.0还带来了不少新的技术,包括新增的输入输出虚拟化技术,可以让多台虚拟机共享PCIe设备;PCIe线缆子规范还加入了铜缆连接方案,每条线缆速度都可以达到2.5Gbps,满足高速网络连接的需求;另外还加入了动态链路管理和链路宽度管理以及电源控制等多项功能,继续完善着PCIe的技术和生态体系。
首款使用PCIe 2.0技术的芯片组是英特尔2007年8月发布、面向顶级玩家的X38芯片组,AMD也推出了AND790FX与之呼应。首款支持PCIe 2.0技術的显卡是英伟达的GeForce 8800GT,在止L2_后,AMD的Radeon HD 3800等一大批显卡都加入了PCIe 2.0规范。
相比PCIe 1.x标准而言,PCIe 2.x的寿命是非常长的,从2007年8月实际产品发布开始,一直到接近4年半后的2012年4月,随着新的处理器亡市,PCIe 3.x的实际产品才开始登台亮相,并逐渐替換PCIe 2.x。即使到现在,也有不少市售主板依旧采用PCIe 2.x的设备和接口。
锋芒尽显:PCIe 3.x时代来临
PCI-SIG在发布PCIe 1.x和PCIe 2.0相关技术标准时都比较顺利,没有遇到太多的技术难题。但是在PCIe 3.0上,PCI-SIG遇到引艮多技术难题。PCIe3.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的运行频率,其数据传输速率为8Gx/s,相比之前的PCIe 2.0提升了60%,并未翻倍。但是在数据校验方面,PCIe 3.0s勺校验不再采用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基本做到了翻倍。此外,PCIe3.0标准的更新版本PCIe 3.P在2014年11月发布。加入了包括电源管理、性能优化和功能拓展等多项改变,当然本质的数据传输能力没有变化。
由于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的带宽。
从目前的产品和应用角度来看,PCIe 3.0依旧是当下的主力数据传输接口,尤其是对显卡、SSD、高端万兆网卡等设备来说,PCIe 3.0的出现和应用,解放了长期以来对这些产品在带宽方面的约束,大幅度推动了产品的发展速度。尤其是SSD,在使用了相关PCIe规范的NVMe接口后,有效改善了电脑启动、存储数据时间长的不足。
从4.0到6.0——继续翻倍、继续前行
在PCIe 3.0之后,人们又将眼光瞄向了4.0时代。实际上也可以看出,随着PCIe带宽越来越大,PCIe技术每一代之间的时间间隔也越来越长。PCIe 1.x到PCIe 2.x之间只有3年,PCIe2.x到PCIe 3.x之间差不多4年半(PCIe 2.0直到现在也没“下岗”),而PCIe 3.0到PCIe 4.0之间更是长达7年之久。
出现这样的问题,依旧是铜传输的极限即将来临。不过在PEIe 3.0之后,PCIe总线做出了很多改进,包括信号可靠性和完善性的改进,新的重定时器、发射器、接收器等,又将整个传输的性能和带宽大大向前推进了一步,在这种情況下,PCIe 4.0诞生。
PCIe 4.0:带宽暴增却生不逢时?
PCIe 4.0的相关规范于2011年11月29日由PCI-SIG宣布。从表面规格来看,PCIe 4.0相比之前的3.x,传输速率直接翻倍来到了16GT/s,因此相比之下带宽再度比PCIe 3.0翻倍。在6年后的2017年6月8日,PCI-SIG宣布PCIe4.0规范完成。
在传输方面,PCIe 4.0中加入了通道宽裕度设计通道宽裕度的功能在于随时随地监测PCIe的通讯情况,包括评估接收器波形图相关数据的宽度在时间和空间上的差值,同时可以自动确认PCIe通道的余量,所有过程都是自动的,不需要任何人工干涉。另外,PCIe 4.0还加入了扩展的标签和功能,这些功能可以协同工作,共同加强数据传输的可靠性、降低延迟并提高全带宽的饱和度。其他的一些技术还包括整体减少的系统延迟、I/O虚拟化、平台集成,可扩展性提升、增强的可靠性、可用性和可维护性(RAS)等內容。考虑到PCIe 4.0在技术上存在比较大的变化,因此可能需要新的硬件设备才能实现比较好的支持,确保使用的稳定性。
除了带宽暴增之外,PCIe 4.0规范增加了不少新的内容,包括全新的通知机制Readiness Notification、精确时间管理Precision Time Measurement、独立参考时钟设计Separate Refclk IndependentSSC、全新的拓展方式Downstream PortContainment(DPC)和enhanced DPC以及轻量通知协议Lightweight Notification(LN)protocol等等。此外,在电源和功耗方面,新的PCIe 4.0也增加了诸如超低功耗状态1 PM等,能够带来更低的休眠功耗,有利于移动设备使用。
目前支持PCIe 4.0的设备只有AMD锐龙3000系列处理器和X570主板,以及AMD新的Radeon RX 5700系列显卡。此外业内一些存储厂商还在第一时间推出了支持PCIe 4.0技术的SSD产品。从性能来说,PCIe 4.0的每通道带宽高达约2GB/s,PCIe 4.0 x16的单向带宽高达约31.5GB/s,双向带宽高达约63GB/s,性能非常出色。但是,目前英特尔反而宣布暂时没有对PCIe 4.0的支持计划,旗下所有产品都未提供对PCIe 4.0的支持。那么,英特尔是不打算支持更新的PCIe标准?显然不是这样.在PCIe 4.0发布之后,PCIe 5.0和PCIe 6.0的消息接踵而来。并且发布时间也非常近。这意味着PCIe 4.0可能昙花一现,也可能是生不逢时?
PCIe 5.0和PCIe6.0——近在眼前?
根据目前的消息,PCI-SIG组织已经在2019年5月发布了PCIe 5.0标准。相关的详细信息目前还没有太多资料,但是旧比PCIe 4.0,PCIe 5.0的带宽再度翻倍,典型的PCIe 5.0 x16场景下,单向带宽达到了约64GB/s,双向带宽高达128GB/s。为了达到如此的带宽高度,PCIe 5.0采用了全新的信号完整性设计可以向后兼容的CEM连接器等设备,整体技术架构还是发生了比较大的变化。
根据业内估计PCIe 5.0的相关设备将在2019年亮相,并在2020年左右上市。不过PCI-SIG认为PCIe 5.0早期成本比较高,和PCIe 4.0暂时不会构成竞争关系。其中PCIe 5.0用于满足数据中心、AI计算等高吞吐、高性能需求,而PC等设备将继续使用PCIe 4.0。
由于PCIe 5.0的规范已经发布,那么接下来的PCIe 6.0也开始进行草案和相关技术准备了根据PCI-SIG的消息,PCIe 6.0相比PCIe 5.0带宽再度翻倍,在典型的比如PCIe 6.0 x16场合下,单向带宽可达到128GB/s,双向带宽则高达256GB/s。PCIe 6.0的主要技术要点包括:数据验证改用了全新的Pulse Amplitude Modulation(PAM,脉冲幅度调制)方式,之前在PCIe 5.0上使用的NRZ不再使用。新的PAM是一种广泛用于网络传输的编码技术,因此部署起来应该不算太难,这个技术允许PCIe 6.0在相同的时间内封装更多数据。另外,PCIe 6.0还加入了低延迟向前纠错方式(Forward ErrorCorrection),以有效地利用带宽节约资源。PCI-SIG还有一些未公布的技术,用于更好地提高传输效率。在信道范围方面,PCIe 6.0和之前的规范保持一致,大约为36dB。在兼容性方面,PCIe 6.0兼容之前的规格。在上市时间方面,PCI-SIG组织希望在2021年前完成相關规范的制定,最理想的情況下,相关产品在2022年上市。
总的来看,PCIe总线虽然不直接承担各种计算、渲染任务,但对于电脑系统来说却非常重要。就像一条道路,如果使用只有一条车道的村级道路将原材料运送给工厂:那么生产效率肯定不能同使用双向4车道、双向8车道乃至双向10车道高速公路运送原材料的工厂相比。让人欣慰的是,PCIe总线技术在近年来仍保持高速发展,PCIe 4.0-6.0的快速问世标志着未来可能出现的各类高性能GPU、SSD传输带宽都能得到满足,这些产品的性能可以得到充分的发挥。对于这些产品的厂商来说,他们只需要专注提升GPU、sSD的性能即可。因此在很长的一段时间内,PCIe总线仍将是电脑系统内各成员的主要“道路”,并成为不断改善用户体验的重要保障。