隨著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.0剛剛發布,如果我們看最近這個組織的活動軌跡:

也許是哪裡來的莫名其妙王子用親吻喚醒了她,在蟄伏了7年之後,PCI-SIG加速以翻一番的速度發布新標準,從2017年的Gen4,2018年的Gen5,到2019的Gen6,這個節奏簡直瘋狂。如果說Intel現在的節奏是Tock、Tock、Tock...,那PCIe就是打了雞血般的Tick、Tick和Tick!這讓主板廠商情何以堪?吃瓜群眾也一臉懵懂,到底我是不是該升級呢?

儘管我不認為我們在2021年底之前能看到任何的PCIe 6.0的設備,但PCIe標準的高歌猛進讓人們更加關注PCIe這個現代計算機的脊柱匯流排,也是好事一件。我已經有兩篇文章介紹PCIe的基本知識:

老狼:深入PCI與PCIe之一:硬體篇?

zhuanlan.zhihu.com
圖標
老狼:深入PCI與PCIe之二:軟體篇?

zhuanlan.zhihu.com
圖標

今天來讓我們稍微深入一些,介紹一下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 x16通道給顯卡,南橋則提供更多的通道,但因為要經過DMI這個小水管,一般不建議鏈接顯卡等需要高帶寬的設備。

計算機用戶多種多樣,有的用戶需要插兩組顯卡,有的則需要很多x1的插槽。為了給主板廠商提供靈活的空間,晶元廠商通過一種叫做bifurcation(分叉)的方式讓主板廠商可以靈活配置,組合或者拆分PCIe通道,來做出滿足細分市場的產品來。

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]信號都連低電平,則是1個x8連接顯卡,兩個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,因為最高一個設備只支持x16,所以分為幾組。一般一組是一個PCIe device,分為4個function,在bifurcation之後,如果該Function輪空,需要我們禁掉該function來省電。

這種方式是最靈活的方式,它賦予至強CPU的用戶極大的靈活性,一般會有配置界面來配置:

結論

這許多細節也許比較枯燥,但只有了解現象後面的本質,我們才能夠更深刻地理解計算機是怎麼工作的。

最後來解決一下有些同學的實際問題,有的同學主板只有一個X16的槽,但想要插兩個顯卡(想想什麼情況下需要),怎麼辦呢?可以藉助一種叫做bifurcation卡的PCIe卡:

現在你知道為什麼叫做bifurcation了吧,顧名思義,真的就是分叉啊。

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。

用微信掃描二維碼加入UEFIBlog公眾號

參考

  1. ^7th gen i5 Datasheet https://www.intel.com/content/www/us/en/processors/core/7th-gen-core-family-mobile-h-processor-lines-datasheet-vol-1.html

推薦閱讀:

相关文章