呂民強等
[摘 要]本文分析了高速網(wǎng)卡與主機的通信方式——基于描述符的DMA通信機制,研究了提高網(wǎng)卡與主機通信性能的技術(shù)——提高總線帶寬和減少中斷開銷。
[關(guān)鍵詞]中斷;描述符;DMA
1013939/jcnkizgsc201520059
隨著網(wǎng)絡(luò)技術(shù),尤其是光纖技術(shù)的快速發(fā)展,互聯(lián)網(wǎng)通信帶寬不斷提升。網(wǎng)絡(luò)應用的性能需求表現(xiàn)為高吞吐率、低延遲、低主機開銷和低存儲開銷等特點[1]。這些特點對網(wǎng)絡(luò)接口卡與主機的通信性能提出了更高的要求。
1 高速網(wǎng)卡整體結(jié)構(gòu)
高速網(wǎng)卡的硬件結(jié)構(gòu)如圖1所示,包括:IO接口部分、DMA引擎部分、接收和發(fā)送FIFO、以太網(wǎng)MAC協(xié)議處理部分和物理層(PHY)模擬信號處理部分,此外,還有一些輔助模塊,如EEPROM接口模塊,擴展BootROM接口模塊,LED控制和整個芯片的命令狀態(tài)寄存器(CSR)部分。IO接口主要負責和主機進行通信;DMA引擎模塊主要負責數(shù)據(jù)包的具體控制,包括配合IO接口的控制動作、DMA訪問起始地址的控制;MAC模塊則負責處理以太網(wǎng)CSMA/CD(Carrier Sense Multiple Access with Collision Detection)協(xié)議;物理層(PHY)負責處理網(wǎng)卡與網(wǎng)卡之間的信號連接以及對信號進行恢復,配置寄存器CSR負責對網(wǎng)卡的特性進行設(shè)置。
高速網(wǎng)卡硬件結(jié)構(gòu)
網(wǎng)卡有兩路數(shù)據(jù)通道:一是數(shù)據(jù)發(fā)送過程:從主機網(wǎng)絡(luò)協(xié)議棧傳來的數(shù)據(jù)包,通過IO接口,由TxDMA控制到達TxFIFO先暫存起來,當TxFIFO暫存的數(shù)據(jù)包到達一定閾值時,TxMAC將TxFIFO中的數(shù)據(jù)包按CSMA/CD協(xié)議發(fā)送到具有自適應選擇功能的PHY層,再由雙絞線或者光纖發(fā)送到外部網(wǎng)絡(luò)上。一是數(shù)據(jù)接收過程:網(wǎng)絡(luò)上的數(shù)據(jù)信號被物理層捕獲,轉(zhuǎn)換為并行數(shù)據(jù)后傳送到接收MAC,接收MAC判斷數(shù)據(jù)包是否接被接收,將接收的數(shù)據(jù)包送進接收FIFO先暫存起來,當接收FIFO數(shù)據(jù)達到一定閾值后,RxDMA會通過IO模塊,將數(shù)據(jù)傳送到主機內(nèi)存,完成數(shù)據(jù)包的接收[2,3]。
2 網(wǎng)卡與主機通信方式
傳統(tǒng)網(wǎng)卡與主機交換數(shù)據(jù)的方式有中斷方式和DMA方式[4]。
中斷方式又稱可編程I/O(Programmed I/O),是指當網(wǎng)卡硬件的報文緩沖區(qū)準備好數(shù)據(jù)時,便向主機CPU發(fā)送中斷,CPU響應中斷,在中斷處理程序中先將數(shù)據(jù)從網(wǎng)卡的報文緩沖區(qū)讀到CPU的寄存器,然后由寄存器再寫到主存。在低速網(wǎng)絡(luò)條件下,可編程I/O方式對主機系統(tǒng)性能影響不大。但是,在高速網(wǎng)絡(luò)條件下,可編程I/O機制由于傳輸數(shù)據(jù)需要CPU的參與而大大增加CPU的工作負載,影響主機系統(tǒng)性能[5]。
DMA(Direct Memory Access)方式又稱直接內(nèi)存訪問方式,DMA技術(shù)是一種代替微處理器完成存儲器與外部設(shè)備或存儲器之間大量數(shù)據(jù)傳送的方法。利用DMA技術(shù)可不用CPU介入就能實現(xiàn)網(wǎng)卡與內(nèi)存之間數(shù)據(jù)的直接傳送,大大降低主機CPU的工作負載。運行在高速網(wǎng)絡(luò)上的服務器要求其CPU資源更多用于應用程序的運行,所以,現(xiàn)在幾乎所有的高速網(wǎng)卡設(shè)計都采用DMA方式作為與主機交換數(shù)據(jù)的主要手段[5]。
3 基于描述符的DMA通信技術(shù)
高速網(wǎng)卡采用基于描述符的DMA方式與主機進行通信。高速網(wǎng)絡(luò)接口卡通過DMA引擎進行基本的數(shù)據(jù)傳輸。DMA引擎是實現(xiàn)DMA機制的主要部件,其主要工作是描述符的管理、接收和發(fā)送數(shù)據(jù)的傳輸以及中斷的產(chǎn)生。
描述符機制和中斷機制是DMA引擎的核心機制。描述符機制主要用于接收和發(fā)送描述符的組織和管理,而中斷機制主要涉及接收中斷和發(fā)送中斷的產(chǎn)生。
31 描述符機制
在DMA機制中,網(wǎng)絡(luò)接口卡在進行數(shù)據(jù)報文的讀寫前必須知道其讀寫的主機內(nèi)存目的地址。DMA引擎中接收和發(fā)送描述符的主要任務之一是為網(wǎng)絡(luò)接口卡提供主機內(nèi)存的地址信息。接收和發(fā)送描述符的數(shù)據(jù)結(jié)構(gòu)中包含讀寫的主機內(nèi)存地址以及讀寫數(shù)據(jù)的長度。DMA引擎采用了環(huán)形的發(fā)送和接收描述符隊列,發(fā)送和接收描述符指向的緩沖區(qū)大小通常是固定的。
DMA引擎包含兩個描述符隊列即接收描述符隊列和發(fā)送描述符隊列。網(wǎng)絡(luò)接口卡和驅(qū)動程序進行正確數(shù)據(jù)傳送的基本必要條件是接收和發(fā)送描述符的正確傳送。
可用接收描述符到達DMA引擎可通過兩種方法。一種方法是基于驅(qū)動程序的,由驅(qū)動程序告知DMA引擎此次可用接收描述符個數(shù),然后DMA引擎通過DMA機制獲得新的可用接收描述符;另一種是基于DMA引擎的,由DMA引擎主動請求接收描述符。
32 中斷機制
在高速網(wǎng)絡(luò)條件下,網(wǎng)絡(luò)處理開銷大小直接影響系統(tǒng)性能。網(wǎng)絡(luò)處理開銷大小取決于網(wǎng)絡(luò)中斷次數(shù)、網(wǎng)絡(luò)數(shù)據(jù)傳輸方式以及用戶層和操作系統(tǒng)內(nèi)核間的數(shù)據(jù)拷貝方式。DMA引擎中斷機制決定網(wǎng)絡(luò)中斷次數(shù)。為減少報文接收(發(fā)送)中斷的次數(shù),DMA引擎接收(發(fā)送)了一定數(shù)量的報文后才置接收(發(fā)送)中斷。這個固定的報文數(shù)量被稱為接收(發(fā)送)中斷閾值。
為避免因網(wǎng)絡(luò)流量過低導致較長的網(wǎng)絡(luò)延遲,DMA引擎還提供超時機制,當定時器超時,DMA引擎立即產(chǎn)生中斷。中斷閾值與超時相結(jié)合的中斷機制能夠極大地減少網(wǎng)絡(luò)接口卡產(chǎn)生的中斷次數(shù),同時將報文延時控制在較小的范圍內(nèi)。
33 數(shù)據(jù)收發(fā)過程
基于DMA機制的網(wǎng)絡(luò)接口卡的數(shù)據(jù)接收和發(fā)送過程并不是對稱的,因此我們將數(shù)據(jù)的發(fā)送和接收過程分開介紹并討論。數(shù)據(jù)報文的接收過程是一個軟硬件交互過程,具體過程如下:
(1)驅(qū)動程序初始化所有可用的接收描述符。然后,驅(qū)動程序通告網(wǎng)絡(luò)接口卡接收描述符在內(nèi)存的起始地址以及可用接收描述符的個數(shù);
(2)DMA引擎根據(jù)接收描述符的起始地址信息和其他相關(guān)信息通過DMA方式將所有可用的接收描述符下載到DMA引擎;
(3)當有數(shù)據(jù)報文到達網(wǎng)絡(luò)接口卡時,DMA引擎就根據(jù)接收描述符指示的地址發(fā)動一次DMA操作,將到達的數(shù)據(jù)報文寫入主機內(nèi)存;
(4)DMA操作完成后,DMA引擎立即發(fā)動另一次DMA操作,回寫剛才已使用的接收描述符的若干域(報文長度域,回寫標志域);
(5)當接收報文的數(shù)量達到接收中斷閾值時,DMA引擎通告主機接收中斷,主機處理接收數(shù)據(jù)并進行接收描述符的回收;
(6)主機在完成接收描述符的回收后,將此次回收接收描述符的個數(shù)通告給DMA引擎,DMA引擎根據(jù)相關(guān)信息讀取可用接收描述符。
數(shù)據(jù)報文的發(fā)送過程也是一個軟硬件交互過程,具體過程如下:
(1)驅(qū)動程序初始化所有可用的發(fā)送描述符,同時通告網(wǎng)絡(luò)接口卡發(fā)送描述符的在內(nèi)存中的起始地址;
(2)當有數(shù)據(jù)報文需要發(fā)送時,驅(qū)動程序?qū)?shù)據(jù)報文在內(nèi)存中的起始地址和報文長度填寫到發(fā)送描述符的相應域中;
(3)發(fā)送描述符填寫完成后,網(wǎng)絡(luò)接口卡驅(qū)動程序就通告網(wǎng)絡(luò)接口卡此次需要處理的發(fā)送描述符個數(shù);
(4)DMA引擎發(fā)動一次DMA操作將需要處理的發(fā)送描述符下載到網(wǎng)絡(luò)接口卡上;
(5)發(fā)送描述符的下載完成后,DMA引擎就根據(jù)發(fā)送描述符的內(nèi)容發(fā)動DMA操作,將發(fā)送描述符指向的數(shù)據(jù)報文發(fā)送到網(wǎng)絡(luò)上;
(6)當發(fā)送報文的數(shù)量達到發(fā)送中斷閾值時,DMA引擎通告主機發(fā)送中斷,驅(qū)動程序開始進行發(fā)送中斷的處理,并進行發(fā)送描述符的回收。
4 提高網(wǎng)卡與主機通信性能的技術(shù)
41 提高總線的帶寬
網(wǎng)卡通過系統(tǒng)總線和主機系統(tǒng)相連,因此總線帶寬的大小直接影響網(wǎng)卡和主機數(shù)據(jù)交換的性能。目前總線技術(shù)已發(fā)展到第三代:第一代ISA總線,第二代PCI總線和第三代PCIE總線,隨之,也出現(xiàn)了三種不同類型的網(wǎng)卡:ISA網(wǎng)卡、PCI網(wǎng)卡和PCIE網(wǎng)卡。隨著總線技術(shù)的發(fā)展,總線的帶寬得到極大的提高,網(wǎng)卡與主機的通信性能也隨之提升。
42 減少中斷開銷
為減少網(wǎng)卡硬件的中斷頻率,在網(wǎng)卡驅(qū)動中采取關(guān)中斷技術(shù)和中斷聯(lián)合技術(shù)[6]。所謂關(guān)中斷技術(shù)就是當CPU接收到網(wǎng)卡的第一個中斷,執(zhí)行中斷處理時,在中斷處理程序中將網(wǎng)卡的中斷關(guān)閉,當處理完所有到達的數(shù)據(jù)包后,再將網(wǎng)卡的中斷打開。所謂“中斷合并”就是網(wǎng)絡(luò)設(shè)備DMA完數(shù)據(jù)后并不立即向系統(tǒng)發(fā)中斷,而是當設(shè)備接收(或者發(fā)送)的數(shù)據(jù)到達一定的閾值后才向系統(tǒng)發(fā)中斷。
參考文獻:
[1]吳建軍一種基于PCI總線的10/100Mbps以太網(wǎng)卡接口芯片的設(shè)計[D].武漢:華中科技大學,2003.
[2]孫德文微型計算機技術(shù)[M].北京:高等教育出版社,1999.