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