浅谈PCIe技术(一):发展历史

话说大约八十年前祖师爷冯-诺依曼提出电子计算机系统结构五大件之后,计算机开始渗透到社会生活的各个方面。在存储程序电子计算机的世界,这五大件小到芯片上的组件大到全球不同地域见的计算节点,总是需要有各种各样的连接:

1.(Chip Scale):规模大约在厘米尺度,芯片上的互联。典型的连接有目前地球上最强大处理器Xeon芯片内部环形连接;应用最广泛移动处理器ARM芯片内部AXI总线。

2.(Box Scale):规模大约在分米到米尺度,硬件单板上的互联。典型连接有PCIe,UPI,HyperTransfer, SAS等等。

3.(DataCenter Scale):规模大约在百米到千米尺度,机房组件的互联。典型的连接有局域网LAN,存储区域网络SAN等。

4.(Global Scale):连接距离以公里计。典型连接有广域网(WAN),因特网。

姑且,我们把一个计算机系统划分成两个部分--用于计算处理的数据加工世界和用于数据输入输出的IO世界,一直以来工业界以各种各样的互联技术连接起这两个世界。上个世纪七八十年代主流是ISA(Industry Standard Architecture),90年代主流是PCI(Peripheral Component Interconnect ),2000年以后至今主流是PCIe(Peripheral Component Interconnect Express);同时其他板级互联如NVLink,Gen-Z,CCIX等也在不断发展,未来哪种互联技术占主导,拉着板凳坐看市场选择,起码目前海量基础设施的绝大多数物理机和虚拟机用的都是PCIe,所以今天主要还是讲讲PCIe,有空的时候再写写其他互联技术。

一,传统PCI时代

    话说上世纪80年代处理器的速度是越来越快,早期的ISA并行总线有8位和16位两种模式,时钟频率为8MHz,总线带宽可以达到8MB/s和16MB/s;到88年推出了EISA在兼容ISA的基础上将位宽增加到32位,带宽因此也能达到32MB/s,当时这速率连接386/486之类的处理器已足够;但随着处理器速度越来越快,EISA总线的带宽已经满足不了CPU的需求,CPU外网总线带宽已经成为制约计算机处理能力继续提高的瓶颈。于是在1991年,Intel、IBM、HP、Compaq、DEC等100多家计算机公司成立了PCISIG,联合推出PCI(Peripheral Component Interconnect),92年PCI1.0便Release。


从速度上看:一开始PCI总线支持32位和64位两种位宽,时钟频率为33MHz,因此,32bit总线带宽32bit*33MHz=1056Mbps=132MB/s;64bit总线带宽64bit*33MHz=2112Mbps=264MB/s。后来PCI总线时钟频率升级到66MHz,因此PCI总线最大带宽可以达到532MB/s。

从结构上看:PCI使用了树形拓扑,树根和处理器桥接,各种IO外设成为叶子节点挂在树上,中间节点为PCI-PCI桥。PCI开始支持即插即用(当板卡插入系统时,系统会自动对板卡所需资源进行分配,如基地址、中断号等,并自动寻找驱动程序;而不像旧的ISA总线需要进行复杂的手动配置。再也不用担心跳线设错中断冲突了:))。



      细心的读者可能已经留意到了,没错,ISA在互联层次中被降级了(为了兼容当时大量ISA外设,PCI使用PCI-ISA桥连接ISA这些低速设备,然后ISA就消失在历史长河中。)

      随着PCI总线的发展,PCI总线又发展到PCI-X(Peripheral Component Interconnect eXtended)。与PCI总线相比,PCI-X总线的位宽未改变,而是将时钟频率进行了提高。PCI-X 1.0的时钟频率有66MHz/100MHz/133MHz,总线带宽分别为:264MB/s,400MB/s和532MB/s(32位),528MB/s,800MB/s和1064MB/s;PCI-X2.0的时钟频率有266MHZ/533MHz/1066MHz,总线带宽分别为1064MB/s、2132MB/s和4264MB/s(32位),3128MB/s,4264MB/s和8512MB/s(64位)。PCI-X与PCI在结构上完全兼容。不过PCI-X出现不就便出现了PCIe,因此在工业界,PCI-X应用远没有PCI和PCIe广泛。

二、PCIe1.0时代

同样,90年代处理器按照摩尔定律发展,PCI碰到了和ISA一样的问题--赶不上处理器发展速度。想要提高速度,还是并行总线的PCI,要么提升频率要么提升位宽;如果提升频率的话并行信号间的串扰让时序难以收敛,提高位宽的话,信号线数量又大大增加。于是高速的串行总线开始替代并行总线,差分线替代并行线,在2003年的时候PCIe诞生了。



从速度上看:PCIe几乎每一代翻一倍,以此来适应越来越快的处理器。

从连接上看:和在PCI总线上同时挂接多个IO设备不同,PCIe采用了点对点串行连接,物理上只能连接一个设备。PCIe用报文的形式取代了PCI的并行IO译码形态并使用了层次化的设计,分为物理层(接口形态,收发器,串化解串,编码),链路层(点对点可靠传输,流控,死锁避免),传输层(IO事务语义)。




从结构上看:PCI-PCI桥被PCIe Switch取代,但逻辑拓扑上PCIe同样为树形结构,在软件上完全兼容PCI时代的软件。


细心的读者可以也注意到了,没错,和ISA总线一样,PCI/PCI-X在互联层次中被降级了(为了兼容当时大量的PCI外设,PCIe总线使用了PCIe-PCI桥连接PCI低速设备,然后PCI设备和ISA设备一样慢慢消失在在历史长河中)。


三、硬件辅助IOV时代

二十一世纪的第一个十年,处理器多核和虚拟化技术蓬勃发展,处理器内部晶体管越来越多。软件上开始模拟指令集本身,显而易见,除了复用资源外还带来了快照、热迁移等概念。单处理器内模拟多个虚拟机已实现。为了减少额外的虚拟化开销的CPU周期,处理器内部开始增加了特殊的辅助虚拟化指令集如x86的VM-x,同样为了能让处理器上的vCPU复用IO资源并减少虚拟化开销的CPU周期,PCISIG在2007年的时候,制定了硬件辅助IO虚拟化的规范SRIOV,在2008年的时候出现MRIOV。

对于SR-IOV(Single Root IO Virtualization,单根虚拟化),引入了Virtual Function的概念(传统的称为Physical Function),并在配置空间设置了SR-IOV Cap进行IO虚拟化设置,开启SRIOV后,结合直通技术(如Intel的VT-d)可以让虚拟机绕过Hypervisor直接访问IO资源。


至于MR-IOV(Multi Root IO Virtualization,多根虚拟化)初始意图想让多个计算主机共享IO设备,但改动了拓扑和物理链路层,至今十年过去仍未见有支持该规范的设备出现。



四、下一个时代

近年来人工智能等技术的发展对计算力也提出了更高的要求,还有各种xPU的出现,对系统互联技术也提出了更高的要求。PCIe3.0也坚持了七八年,渐感吃力,虽然PCIe4.0已经Release,但铺开仍需要一段时间;同时像NVLink,CCIX,Gen-Z各种新兴互联技术也开始应用。很难说PCIe的历史还有多久,会不会过几年像ISA,PCI,PCI-X一样消失在历史长河中,但未来的调子一定是彩色的。。。


五、总结

行为仓促,如有错误,还请多多指出。最后,另外两个祖师爷John Hennessy和David Patterson同时获得2017年图灵奖。赞。。。

最后有个小问题:PCIe为什么没有像QPI,TCP/IP那样有route layer?

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值