写在前面,本文转载自老狼知乎,感谢分享。
随着AMD新一代CPU的发布,PCIe 4.0 (Gen4)也进入了人们的视线。然而Intel随后宣传PCIe 4.0对消费市场用处不大,AMD则反讽Intel不能吃葡萄说葡萄酸。吃瓜的人搬板凳看热闹的时候,一件事正在发生。PCIe标准制定组织,PCI-SIG(Peripheral Component Interconnect Special Interest Group)发布了PCIe 6.0(Gen6)的标准!是的,你没看错,不是5.0而是6.0。实际上5.如果我们看看这个组织最近的活动轨迹:
备注:
带宽计算:
举例:
(1)PCIE2.0, GEN2=5Gbps
那么带宽=5Gbpsx16(maxlane)x2(双向)/10(8/10编码)=16GB/s
(2)PCIE4.0,GEN4=16Gbps.
那么带宽=16x16x2/8=64GB/s
也许是莫名其妙的王子用亲吻唤醒了她,蛰伏了7年,PCI-SIG2017年以翻一番的速度加速新标准的发布Gen4,2018年的Gen5,到2019的Gen这个节奏简直疯狂。如果说Intel现在的节奏是Tock、Tock、Tock..,那PCIe就像鸡血一样Tick、Tick和Tick!这让主板厂商感到尴尬?吃瓜的人也一脸懵懂。我应该升级吗?
虽然我不认为我们能在2021年底之前看到任何东西PCIe 6.0的设备,但PCIe高歌猛进的标准使人们更加关注PCIe现代计算机的脊柱总线也是一件好事。我已经介绍了两篇文章了PCIe基本知识:
深入PCI与PCIe一、硬件篇 - 知乎
深入PCI与PCIe第二:软件篇 - 知乎
让我们今天深入一点,介绍一下PCIe通道数,以及它们是如何组合和分割的。
PCIe Lane(通道)
我在前面的文章中介绍过,PCIe通过使用差分信号传输串行总线(differential transmission),如图
通过一正一反镜传输相同的内容,可以快速发现和纠正干扰,从而大大提高传输频率。PCI原来基本上是半双工(地址/数据线太多,要复用线路),串行可以是全双工。
这样一对差分信号形成一对PCIe Lane,也叫做x1通道。将n组绑定在一起可以让PCIe传输带宽大大提高。M.2接口的NVMe SSD一般四组四个Lane,也就是x4;最耗带宽的显卡一般需要16组,即x16.注意n应该是2的幂,所以没有奇数组或者x10等组合。
PCIe通道的组合和差异
现在PCIe的设备越来越多,Intel为了让主板厂商灵活满足客户的需求,台式机/笔记本平台在CPU和南桥PCH后面提供了很多PCIe通道:
这是个Haswell比如比较老,但是和现在的系统没有本质区别(现在南桥换成了PCIe Gen3了)。CPU一般提供PCIe x南桥为显卡提供了更多的通道,但因为它必须通过DMI一般不建议链接显卡等需要高带宽的设备。
计算机用户多种多样,有的用户需要插两组显卡,有的需要很多x1.插槽。芯片制造商通过一种方式,称为主板制造商提供灵活的空间bifurcation(分叉)的方式让主板厂商可以灵活配置,组合或者拆分PCIe制作满足细分市场需求的产品。
1.bifurcation。
2.Root Port Training。尽管根据信号完整性的不同,Root port支持PCIe Gen3/4,但主板布线有问题和干扰,只能Training出Gen2,甚至Gen1的速度。信号完整性可以参考我的文章:老狼:芯片中的数学-均衡器EQ它在高速外部总线的应用
3. PCI枚举。
4. PCI/PCIe的各种特性(Feature)设置,如CTO等等。
作为初始化的第一步,bifurcation重要性不言而喻。它决定了每个设备和PCIe插槽的通道宽度。通常有三种方式:Hard Strap,Soft Strap或者Wait for BIOS。
Hard Strap
所谓Hard,这意味着这种方法是硬件连接,以后不能修改。酷睿桌面CPU后面的PCIe这些方法通常用于通道。让我们举个例子。以下内容均来自Intel官网,7代i5的Datasheet[1]
注意红框部分
我们可以看到这一点bifurcation,CPU后面的PCIe是一个x16,还是两个x8,亦或1个x8家两个x4,取决于CFG信号。
根据自己的主板风格,如果提供了一个显卡插槽,那就把CFG[6:5]信号连高电平都是一个x16.如果提供两个显卡插槽,请使用CFG[6:5]信号连接一高一低,即两个x8,即两个PCIe显卡就降成x8.有些厂家喜欢用;NVMe的m.2连接到CPU以后,提高存储速度,则可以把CFG[6:5]信号连低电平都是一个x连接显卡,两个x4来连接M.2 SSD。
这种bifurcation一旦确定,除非重新布线,否则不能更改。
Soft Strap
所谓Soft,软件可以修改。PCH下PCIe root port这通常是这样的。这种配置通常存储在BIOS Image前面的discription可通过工具修改:
这种修改一般和BIOS程序无关,修改后直接烧录BIOS即可。当然BIOS在Image该区域可以重新修改,但修改后需要重新启动才能生效。
主板制造商一般根据自己的主板设计,在烧录中BIOS用软件改变相应的值,BIOS一般没有界面来修改这个值。
Wait For BIOS
这种方法是纯的BIOS设置,也就是在PCIe Training之前,通过BIOS对相关PCIe root complex的寄存器设置以确定通道宽度。
这种方法通常用于强系列CPU,它们在CPU后面提供40个Lanes的支持:
为什么是44个Lane?
如图所示,总共有44个Lane,不是说40个Lane吗?其实P0的lane是给DMI如果在多路情况下使用,除了第一个Socket,其他CPU只能用它。
这么多Lane,因为最高设备只支持x所以分为几组。一般一组是一组PCIe device,分为4个function,在bifurcation以后,如果是的话Function轮空,需要我们禁掉该function来省电。
这种方法是最灵活的方法,赋予最强CPU用户灵活性大,配置界面一般有:
结论
这些细节可能很无聊,但只有了解现象背后的本质,我们才能更深入地了解计算机是如何工作的。
最后,解决一些学生的实际问题。有些学生只有一个主板X16槽,但是如果你想插两个显卡(想想什么情况需要),你该怎么办?可以用一个叫做bifurcation卡的PCIe卡:
现在你知道为什么叫它了bifurcation顾名思义,真是分叉啊。