一个简单的问题
首先问一个很简单的问题,一个主板能支持多少PCI-e板卡?每个插槽的都能插什么PCI-e设备?
看到这里,你会说这个问题多简单,能插多少PCI-e板卡那就看什么主板了,主板有几个PCI-e槽就能插多少卡,每个槽多长就能插多长的卡呗。
事实是这样么?
在这里我们来看一个主板,SuperMICRO的C7Z270-CG(选用超微主板当例子是因为超微主板的文档说明比较全,笔者并没有拥有这个主板)

我们从主板上可以看到,三个绿色的16X PCI-e插槽,三个黑色的1X PCI-e插槽,那么简单计算一下,一共应该是(16*3 + 1*3)=51X的PCI-e通道(LANE)。
但是从这个主板支持的第7代CPU Intel® Core™ i7-7700K Processor的资料来看:

这个CPU最大才支持16条PCI-e通道。
16条PCI-e通道,一个显卡就耗光了,其他设备怎么用的呢?这到底是怎么回事?
为了搞清楚这个问题,我们还是需要看一下主板厂家是什么说明的。
我们下载一下这个主板的PDF研究一下。

文档中,标识了每个插槽的编号。从上面靠近CPU开始数,是SLOT6至SLOT1,一个6个。然后每一个插槽的下方,我用红色圈出来,分别写着这个插槽的配置。
SLOT6,配置是CPU SLOT6 PCI-E3.0 x16,而SLOT3,配置是CPU SLOT3 PCI-E 3.0×8 (IN X16)
在这里,聪明的你看出来了,SLOT3虽然物理上是全长的16X插槽,但是只能支持8X的信号通道。就算你插上16X的卡,也是跑在8X的信号上。(PCI-e可以上下兼容,16x的卡可以跑在1x, 2x, 4x, 8x, 16x)
同理,SLOT1的配置只能跑4X,虽然插槽形状也是16X。所以16X的显卡要想发挥全部威力,只能插在靠近CPU的SLOT6上,而不能插在其他槽位,否则只能跑8X(SLOT3),或者4X(SLOT1)。
那么,SLOT5/SLOT4/SLOT2是什么情况?1X的槽位,速度就应该是1X吧?总不能变成4X或者8X/16X。
的确,1X的信号无法变成4X/8X/16X,但是细心的你会发现,文字描述有点不同,SLOT6/3/1的描述是CPU SLOTX PCI-E XXX,而SLOT5/4/2的描述是PCH SLOTX PCI-E XXX,PCH是什么鬼?
什么是PCH?
我们要想弄明白上面的问题,PCH(Platform Controller Hub)是干什么的要弄明白。
大家可能都听说过主板的南桥和北桥。现代主板中,北桥的大部分功能已经被INTEL集成到CPU中了,而剩下的功能,重新整合在PCH这个芯片中。

上面图中 Intel H81 Express Chipset就是PCH。和CPU通过DMI(Direct Media Interface)通道连接。
PCH连接着很多设备,比如声卡,板载网卡,SATA控制器,USB控制器,另外还能再分出来PCI接口。这么多设备经过PCH芯片整合之后,通过4x的DMI总线和CPU互联。
重新回来SuperMICRO的文档,下面是主板的方块图。

左边从CPU分出来16条PCI-e通道,另外PCH-H通过DMI和CPU相连。
那么左边的CPU x16可以怎么继续拆分呢?看下图:

原来有好多ASMedia Switch 1480芯片,可以将16x分成两个x8+x8, 或者拆分成x8+x4+x4。也就是说,一旦你使用了SLOT1/3的插槽,那么SLOT6就不是x16了,而是x8。
而SLOT2/4/5的插槽,则通过PCH交换出来,和其他很多设备共享DMI x4的PCI-e带宽。
到这里,你应该能的出来结论,要想让SLOT6的x16插槽满血,那么SLOT1/3就不能插任何设备。同样,如果你想要PCI-e的设备,比如NVMe SSD满血,那么就不能插到板载那个M2 NVMe口,而是单独通过PCI-e转换卡插到SLOT1/3/6上面,因为那样子可以直连CPU,时延和性能都能最优。
另外,你也看到从CPU直接出来的PCI-e只有x16,那么如果你同时拥有x16的显卡,和x4的NVMe硬盘,那么就无法将两者同时最佳化,必须有所取舍。或者换用PCI通道更多的CPU,比如LGA2066平台。
大家看到家用平台的CPU,PCI-e通道非常少。相反,工作站或者服务器CPU就不同了,PCI-e通道非常多。我们拿一个好几年前的CPU做例子,XEON E5-2680V3看一下。

2014年Q3发布的CPU

一共有40 PCI-e个通道。如果是双槽CPU主板,那么将达到惊人的80个PCI-e通道!这还是几年前的CPU。看一下最近发布的XEON scalable 白金8180

可能会比较失望,PCI-e通道才比E5 2680V3多8,48条。
讲了这么多PCI-e的事情,回到我们的标题,Bifurcation:PCI-e通道拆分
举一个简单的例子:你的NVMe SSD,一般都是PCIe 4x,如果你的x16槽,能拆分一下变成4个4x,那么将可以支持4个SSD,并且4个SSD可以同时满血运作,那该多好!或者说x8的插槽,通过拆分可以变成两个4x,这样子就可以用2个SSD了!
PCI拆分本来是服务器主板的一个功能,现在下放到民用主板了。支持PCIe拆分的卡,目前有很多,比如ASUS hyper m.2 x16 card

ASRock的ULTRA QUAD M.2 CARD

还有超微的AOC-SLG3-2M2,支持8x变成两个4x拆分

中提到,ASUS的这个卡,在支持PCI Bifurcation的主板上,可以将4个SSD同时识别,同时工作。在ZFS等环境中,将获得最大的性能。
当然,这个功能需要主板支持才可以使用。
第一个问题,就是要确认主板是否支持。这个问题查询一下主板厂家的文档即可。比如超微的主板,X10系列之后(包括X10),都是支持拆分的。X9系列的X9DRi-LN4F也有人说可以,我还没测试成功。
我拿SuperMICRO X10DRL这个主板来举例子,说一下怎么开启这个功能。下面是主板的外观图。

这个主板有一个16x插槽,插槽编号是SLOT5。

看一下主板的Block图,SLOT5是连接到CPU1上。编号是#3 (这个编号很重要,BIOS中设置时需要使用)

有了这些信息,接下来我们进入BIOS设置界面,选高级设置选项。

进入Chipset配置

进入北桥选项

再进入IIO配置

里面有很多拆分配置。大家可能在这里就不知道选哪个,搞不明白。
刚才我们从文档中得到的信息,SLOT5是编号3,所以我们在这里找到IOU1(IIO PCIe Port3),将auto改成x4x4x4x4即可。

保存之后重新启动机器,就可以将4个SSD正确识别!
其他型号的主板,由于笔者没有相关的环境,所以还需要大家自己学会看文档搞定。
如果你喜欢今后能多看到类似的文章,请看完之后点赞收藏分享,这样子我就可以有动力多写一些啦~~~