超載
總線是指電腦內(nèi)部規(guī)范化的交換數(shù)據(jù)(Data)的方式,是一種內(nèi)部結(jié)構(gòu),它的是為處理器、內(nèi)存、輸入/輸出設(shè)備提供傳遞信息的公共通道,一如連接各地的高速公路般連接各個配件或元件??偩€的基本邏輯是,在同一個時間內(nèi)只能負(fù)責(zé)傳輸一位數(shù)據(jù)(比特,bit),其實(shí)就是0或1。要想傳輸更多的數(shù)據(jù)、傳輸?shù)酶欤蔷捅仨殧U(kuò)展“道路”,增加“車道”,這就是所謂的總線的位寬;也可以提升行車速度,即所謂的頻率,兩者結(jié)合而產(chǎn)生的一定時間內(nèi)數(shù)據(jù)流量就是帶寬。
而且,針對不同的連接,總線也是有(針對性)區(qū)別的。一般來說,電腦的總線分為幾種。第一種是數(shù)據(jù)總線,名為DataBus,主要負(fù)責(zé)處理器和內(nèi)存之間的數(shù)據(jù)存儲、傳輸;第二種是地址總線,即AddressBus,它負(fù)責(zé)用來在指定的內(nèi)存(RandomAccess Memory)數(shù)據(jù)存儲地址;第三種總線,是控制總線Control Bus,它負(fù)責(zé)將微處理器(Control Unit,非中央處理器)發(fā)出的信號傳送到具體外部設(shè)備上,比如SATA設(shè)備(并發(fā))、USB設(shè)備(串行);還有一種是擴(kuò)展總線Expansion Bus,它的作用是電腦內(nèi)部和外部設(shè)備進(jìn)行通訊的總線(圖2)。比如我們說的PCIe總線就是擴(kuò)展總線的一種。
具象來說,例如一臺電腦,主板的主芯片(PCH)要負(fù)責(zé)CPU與內(nèi)存、顯卡等數(shù)據(jù)吞吐大戶的通訊工作(現(xiàn)在的CPU也會肩負(fù)這一工作),那么它如何工作呢?在CPU部分,通過前端總線(即FSB)連接到PCH芯片上,進(jìn)而通過其與內(nèi)存、顯卡進(jìn)行數(shù)據(jù)的“交流”(圖3)。
當(dāng)然,總線也是代際迭代的,隨著時間的發(fā)展,數(shù)據(jù)的傳輸需求越來越高。時至今日,PCIe 5.0的總線帶寬速度已經(jīng)達(dá)到了驚人的128GB/s(全雙工),這要比早期ISA總線的數(shù)據(jù)帶寬大多了——8MB/s。你沒看錯,早期的ISA總線帶寬受限于位寬只有8bit/16bit,最大的帶寬傳輸速度不過區(qū)區(qū)4.77MB/s、8MB/s。
ISA的全稱為Industrial Standard Architecture(工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)總線),它最早出現(xiàn)于1981年,是IBM兼容電腦的一個總線系統(tǒng),位寬只有8bit。到了1984年,ISA總線升級為16bit,相應(yīng)插槽(圖4)可插接顯卡、聲卡、網(wǎng)卡已及所謂的多功能接口卡等擴(kuò)展插卡(圖5)。其缺點(diǎn)是CPU資源占用太高,數(shù)據(jù)傳輸帶寬太小,是已經(jīng)被淘汰的插槽接口。而且,它現(xiàn)在只存在于極少部分的工控類設(shè)備上還在使用。
ISA 總線的表現(xiàn)形式是一個長長的插槽,遠(yuǎn)比現(xiàn)在的PCIe長許多,而且它的使用其實(shí)并不方便——現(xiàn)如今我們非常習(xí)慣的“即插即用”,即Plug-n-Play功能根本沒有,所以在安裝了ISA接口的設(shè)備時,必須手動設(shè)置IRQ(中斷請求)、I/O地址(輸出/輸入地址)、DMA信道才能配置其工作。
早年間,數(shù)據(jù)總線的傳輸負(fù)載并不高,在80286處理器時代ISA總線還能夠完全應(yīng)對。但是當(dāng)80386這個32bit位寬外部總線的處理器出現(xiàn)后,總線帶寬就成為了嚴(yán)重的性能瓶頸,畢竟ISA擴(kuò)展標(biāo)準(zhǔn)后也不過是16bit位寬(圖6)。因此在1988年的時候,康柏、惠普等九個廠商協(xié)同制定標(biāo)準(zhǔn),將ISA總線擴(kuò)展到了32bit位寬,相應(yīng)的名稱也變成了EISA,即Extended ISA擴(kuò)展ISA。EISA總線的工作頻率其實(shí)和ISA一樣都是8MHz,并且可以向下兼容8bit、16bit位寬的ISA總線設(shè)備。
ISA總線的致命弱點(diǎn)可不止帶寬有限,它更大的問題在于CPU占用率高、且占用硬件中斷資源——筆者曾經(jīng)在一塊主板上裝了兩個ISA設(shè)備,為了分配好中斷資源著實(shí)煞費(fèi)苦心,遠(yuǎn)不如現(xiàn)在的設(shè)備即插即用那么簡單。1990年代后期,PCI總線逐步取代了ISA總線。在英特爾PC'98規(guī)范中徹底放棄了對ISA總線的支持,后期即便有推出帶有ISA插槽的主板,也不過是通過模擬的方式實(shí)現(xiàn)對ISA設(shè)備的支持。
正如前文所述,ISA也好,EISA也罷,先天的傳輸瓶頸已經(jīng)無法滿足32bit的80386、乃至80486處理器的帶寬吞吐需求,新的總線標(biāo)準(zhǔn)呼之欲出。19 92年的時候,英特爾提出了PCI,Peripheral ComponentInterconnect(外圍組件互連總線)協(xié)議1.0標(biāo)準(zhǔn),但是該標(biāo)準(zhǔn)僅僅限于組件規(guī)范。
為了能夠盡管推廣PCI總線協(xié)議,替代掉ISA總線協(xié)議等標(biāo)準(zhǔn),英特爾召集了多個廠商組成了PCI-SIG(PCI Special InterestGroup,PCI特殊興趣小組)企業(yè)聯(lián)盟(圖7),并在1993年4月發(fā)布了PCI 2.0標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)第一次將PCI接口的物理規(guī)格確定,從此也奠定了PCI總線協(xié)議的地位。
對比ISA總線協(xié)議,PCI總線標(biāo)準(zhǔn)一開始就提供了ISA無法企及的高度:133MB/s的帶寬(33MHz時鐘,每時鐘傳送32bit),這對當(dāng)時的電腦(圖8)來說已經(jīng)是超高速帶寬了。到了后期,PCI總線標(biāo)準(zhǔn)進(jìn)一步提升到64bit位寬,帶寬達(dá)到了264MB/s,當(dāng)然,對于現(xiàn)在來看這根本不算什么,但是在當(dāng)時,這個標(biāo)準(zhǔn)遠(yuǎn)遠(yuǎn)超出ISA。
另一個特點(diǎn)是實(shí)現(xiàn)了即插即用功能。在使用ISA設(shè)備安裝的時候,設(shè)備之間可能存在硬件資源占用上的沖突,這必須手動調(diào)配硬件資源才能解決,而在PCI總線標(biāo)準(zhǔn)下的設(shè)備,安裝即可使用(當(dāng)然在操作系統(tǒng)內(nèi)還需要安裝驅(qū)動程序),無需手動調(diào)配硬件資源(圖9)。
還有一個優(yōu)點(diǎn)也是ISA總線標(biāo)準(zhǔn)不具備的,PCI總線標(biāo)準(zhǔn)增加了奇偶校驗(yàn)錯(PERR)、系統(tǒng)錯(SERR)、從設(shè)備結(jié)束(STOP)等控制信號及超時處理等可靠性措施,使數(shù)據(jù)傳輸?shù)目煽啃源鬄樵黾?。可以說,PCI總線標(biāo)準(zhǔn)讓PCI設(shè)備擴(kuò)展真正做到了好用、省心的效果。
不過,在90年代末期,PCI總線即便是64bit的修訂版本規(guī)格,也僅有264MB/s的帶寬吞吐能力,已經(jīng)無法為顯卡提供足夠的帶寬支撐,而此時業(yè)界又沒有一個更好的解決辦法。于是,英特爾將AGP這種點(diǎn)對點(diǎn)的專用傳輸通道提了出來。
AGP全稱為Accelerated Graphics Port(加速圖形接口),是1997年英特爾為了應(yīng)對顯卡這種帶寬吞吐大戶的需求,在PCI總線標(biāo)準(zhǔn)上創(chuàng)建的一種點(diǎn)對點(diǎn)傳輸通道??梢哉f它并非是一個總線標(biāo)準(zhǔn)——畢竟它只是為顯卡的專用接口(圖10)。要知道,任何一個總線都允許多個設(shè)備共享,而AGP只能只能實(shí)現(xiàn)“一對一”的模式,僅僅為顯卡提供帶寬支撐。
AGP時代,出現(xiàn)了許多經(jīng)典的顯卡,比如3DFX Voodoo Banshee(圖11)、NVIDIARIVA 128(圖12)、3Dlabs Permedia 2、ATiRage系列(圖13)、Matrox Millennium II、S3ViRGE GX/2等等。比較有趣的是,最早的一批AGP顯卡并非原生AGP接口,而是通過橋接方式由PCI總線轉(zhuǎn)換成AGP,而且需要一顆單獨(dú)的芯片負(fù)責(zé)處理轉(zhuǎn)換,這導(dǎo)致首批此類顯卡的性能根本無法發(fā)揮實(shí)際效率,很多人都對AGP嗤之以鼻。直到真正原生的AGP接口顯卡出現(xiàn),人們才領(lǐng)略了AGP接口的高帶寬究竟能帶來什么樣的3D加速性能。
那么,AGP的帶寬究竟有多大呢?在PCI總線標(biāo)準(zhǔn)下,最高的帶寬吞吐能力也不過264MB/s,還會有多個設(shè)備分享,而AGP的第一版即達(dá)到266MB/s的帶寬,且只有顯卡獨(dú)享。到了后期,AGP 8×的帶寬達(dá)到了驚人的2.1GB/s——當(dāng)然,你不能以今天的眼光來看待。AG P的規(guī)范版本一共經(jīng)歷了4次更替,分別為AGP 1×、AGP 2×、AGP 4×和AGP 8×,它們對應(yīng)的規(guī)格版本分別是AGP 1.0(AGP 1×、AGP 2×)、AGP 2.0(AGP 4×)、AGP 3.0(AGP 8×),具體的規(guī)格可以參考表格,注意AGP 1×和AGP 2×都?xì)w于AGP 1.0版本。另外,AGP接口向下兼容,而不能向上兼容,因?yàn)檫B電壓都會有所區(qū)別(圖14)。
到了AGP 8×后期,最高2.1GB/s的帶寬吞吐能力也不足以支撐顯卡日益高漲的帶寬需求,同時,其他設(shè)備也對總線帶寬有了更高的要求,PCI+AGP的組合已經(jīng)不夠看了。于是,PCIe應(yīng)運(yùn)而生(圖15)。
2001年,英特爾在IDF(英特爾開發(fā)者論壇)大會上公布了最新的總線技術(shù),被命名為“3GIO”。之后的2002年,PCI特殊興趣組織(PCI-SIG)正式公布了新一代總線技術(shù)標(biāo)準(zhǔn),這就是從3GIO改名而來的PCIe。PCIe,實(shí)際全稱為PCI Express。
而且極具創(chuàng)新的是,PCIe的規(guī)范設(shè)計(jì)十分友好,只要是支持PCI總線的操作系統(tǒng),無需修改升級即可支持PCIe總線技術(shù)標(biāo)準(zhǔn),很快,這個總線技術(shù)標(biāo)準(zhǔn)就取代了PCI+AGP的組合,成為最主流的總線技術(shù)標(biāo)準(zhǔn)(圖16)。
PCI e不僅具有極為強(qiáng)大的帶寬吞吐能力,還能支持更高的供電,對于大功率的PCIe擴(kuò)展設(shè)備無疑十分友好。它甚至在電壓的支持上也做了特別設(shè)計(jì),可以分別支持+3.3V、3.3Vaux以及+12V三種不同的電壓標(biāo)準(zhǔn),讓PCIe設(shè)備的設(shè)計(jì)更為簡單容易。
當(dāng)然,最重要的還是PCIe驚人的帶寬吞吐能力。不同于以往的PCI、ISA總線技術(shù)標(biāo)準(zhǔn),根據(jù)需求,PCIe能夠以不同規(guī)格、不同速率提供給使用者設(shè)計(jì)不同的插槽,如PCIe ×1、PCIe ×2、PCIe ×4、PCIe×8、PCIe ×16(圖17)。
PCIe的規(guī)范主要是為了提升電腦內(nèi)部所有總線的速度,因此帶寬有多種不同規(guī)格標(biāo)準(zhǔn),其中PCIe ×16是特別為顯卡所設(shè)計(jì)。AGP的帶寬吞吐能力最高為2.1GB/s,對比PCIe 1.0 ×16的4GB/s很明顯差異甚大。但是要注意,4GB/s是指資料傳輸?shù)睦硐胫?,并不是使用PCIe接口的顯卡,就能夠有突飛猛進(jìn)的性能表現(xiàn),實(shí)際的測試數(shù)據(jù)并不會有這么大的差異存在。
計(jì)算公式為PCIe串行總線帶寬(MB/s)=串行總線時鐘頻率(MHz)×串行總線位寬(bit/8= B)×串行總線管線×編碼方式×每時鐘傳輸幾組數(shù)據(jù)(cycle),例如全雙工PCIe 1.0 ×1,其帶寬= 2500×1/8×1×8/10×1×2=500MB/s。
可以說,PCIe的出現(xiàn)一定程度解決了帶寬不足的問題,而且PCIe總線技術(shù)標(biāo)準(zhǔn)也在不斷升級,方案已經(jīng)從最初的PCIe 1.0更替到最新的PCIe 6.0。目前的設(shè)備應(yīng)用則開始全面進(jìn)入PCIe 4.0時代。而最新的12代酷睿處理器平臺雖然在處理器中提供了PCIe 5.0總線通道,但是距離普及還相當(dāng)遙遠(yuǎn)。
當(dāng)然了,即便是PCIe 4.0總線技術(shù)準(zhǔn),其帶寬吞吐能力依然是極為強(qiáng)勁的,對比最初的ISA總線技術(shù)標(biāo)準(zhǔn)呈幾何數(shù)量級的增長,這就是技術(shù)進(jìn)步帶來的好處——否則,NVMe規(guī)范的固態(tài)硬盤(圖18),又怎么可能因之發(fā)揮其超強(qiáng)的讀寫性能?次時代的旗艦級顯卡,又靠什么與CPU通信,來支持高分辨率、高畫質(zhì)下的流暢游戲呢?