專利名稱:一種提高多數據緩沖區dma效率的系統和方法
技術領域:
本發明屬于數字信息傳輸領域,具體講涉及一種提高多數據緩沖區DMA效率的系統和方法。
背景技術:
在現有技術中,從網卡請求數據到數據從主機內存中返回需要較長時間。在單隊列的DMA系統中,從請求發送到數據返回的這段時間內,主機IO總線一直處于空閑狀態,浪費了大量總線帶寬,這種現象在使用中斷的描述符機制系統中更為嚴重。同時,現有的網卡并未考慮對多個應用的數據緩沖區進行支持,對于運行在高速網絡上的服務器,由操作系統對多個數據緩沖區進行管理會占用相當多的CPU資源,進而影響對主機IO總線的使用效率。專利號為ZL200680011384. 0、名稱為“完成事件中包括描述符隊列空事件”的 PCT披露了一種基于事件通知的主機子系統和網絡接口設備間的管理數據傳輸的方法。該方法主機將數據緩沖區描述符寫入到一 DMA描述符隊列中,并且當數據緩沖區的處理已經完成時,網絡接口設備寫入完成事件來通知主機。每個完成事件描述符通知主機在NIC和一個或更多個數據緩沖區之間的數據傳輸的完成,并且也可以將一隊列空通知嵌入在完成事件里。專利號為ZL02U8709. 0的、名稱為“多通道數據直接內存訪問系統和方法”的發明披露了一種涉及數字信息傳輸的多通道數據直接內存訪問系統和方法。該方法利用空閑隊列描述子、完成隊列描述子等數據結構信息,用一個接收DMA模塊不連續地接收各通道的數據,在FREE_FIF0存儲器中的空閑隊列描述子數目少于某個設定的門限時,根據其內部實時調整的讀空閑隊列指針通過總線接口控制模塊從片外主存中的空閑隊列;在發送 DMA模塊中,利用待發送隊列描述子、發送完成隊列描述子、配置RAM、待發包數據描述子的數據結構信息用一個發送DMA模塊不連續地發送多通道數據,將各通道在主存中的連續數據正確發送到各通道。論文“高速網卡芯片設計中一種新的多隊列描述符機制”(戴斌,孫志剛,國防科技大學計算機學院,CCIC2007)中記錄了一種方法,該方法根據網絡上報文大小的分布情況的分析,提出了一種可應用于高速網卡芯片設計的多隊列描述符機制。以上發明和論文都是對傳統描述符機制的優化和擴展,并未解決描述符傳輸所帶來的時間開銷和系統總線開銷;而且在操作系統對多個數據緩沖區進行管理所帶來的開銷也未考慮。
發明內容
為克服上述缺陷,本發明提供了一種提高多數據緩沖區DMA效率的系統和方法, 基于非描述符機制的多隊列DMA引擎,并對多個數據緩沖區進行支持,以提高主機IO總線的利用率和報文發送速度。
為實現上述目的,本發明提供一提高多數據緩沖區DMA效率的系統,其包括主機和與其通過IO總線連接的網卡,所述主機包括數據緩沖區、數據緩沖區信息模塊和DMA 控制器,其特征在于,所述網卡包括數據緩沖區信息管理單元以及與所述DMA控制器分別通信的DMA請求隊列和返回數據接收隊列;所述數據緩沖區信息模塊中的數據緩沖區信息 (Buffer Info)通過主機IO總線傳輸到所述數據緩沖區信息管理單元。本發明提供的優選技術方案中,所述DMA請求隊列與所述返回數據接收隊列的數量相等并有一一對應關系;所述數據緩沖區的數量有64個。本發明提供的第二優選技術方案中,所述數據緩沖區信息管理單元包括Buffer Info 模塊、Lock 模塊、Buffer Number 模塊 l、Block Address 模塊、Block Length 模塊、DMA Info Available 模塊禾口 Ack for DMA Read Pointer Write Back 模塊。本發明提供的第三優選技術方案中,所述DMA請求隊列包括:Ack for DMA hfo模 Buffer NumberIl^i2>DMA Read PointerH^i>DMA Read Pointer Write Back Request
模塊禾口 DMA Read Request Sender 模塊。本發明提供的第四優選技術方案中,所述網卡使用型號為V5110T的fpga芯片。本發明提供的第五優選技術方案中,提供一種提高多數據緩沖區DMA效率的方法,其改進之處在于,所述方法包括如下步驟(1).向數據緩沖區填入數據時,數據緩沖區信息通過主機10總線送往網卡并存儲在數據緩沖區信息管理單元;(2).從緩沖區相關信息中提取出待發送數據的地址和長度,并送往DMA請求隊列;(3). DMA請求隊列將對數據塊的請求組織為一個或多個符合主機10總線要求的 DMA請求,并發送到主機;(4).主機的DMA控制器響應接收到的DMA請求,將被請求的數據通過主機10總線發送網卡上;其中,步驟1和步驟2中,從所述數據緩沖區中提取的相關信息包括待發送數據的地址和長度。本發明提供的第六優選技術方案中,在所述步驟2中,所述數據緩沖區信息管理單元優先處理DMA Read Pointer Write Back Request,隨后檢查是否有緩沖區正在等待處理,如果等待處理的緩沖區請求未被DMA請求隊列所接受,則重新執行此流程,否則將所述 DMA Info Available 模塊置 0。本發明提供的第七優選技術方案中,在所述步驟4中,如果已有數據緩沖區正在等待處理,且能仲裁出空閑的請求隊列,則將等待處理的緩沖區信息送往空閑的DMA請求隊列,將所述Ack for DMA hfo模塊置為1并保持一周期。本發明提供的第八優選技術方案中,所述數據緩沖區信息管理單元提供數據緩沖區號和讀指針信息;內部號為緩沖區號的數值模DMA請求隊列數量所得的余數;所述DMA Read Pointer Write Back Request的過程包括仲裁出一個已處理完緩沖區數據請求任務的DMA請求隊列,將要寫回的數據緩沖區號和讀指針信息送往數據緩沖區信息管理單元并將 DMA Read Pointer Write Back Request 模塊置為 1 ;如果此時 Ack for DMA Read Pointer Write Back 模塊置 1,貝叫f DMA Read Pointer Write Back Request 模塊置 0 ;其中,緩沖區號的低位由DMA請求隊列號(RRS Number)構成,高位由內部號(Internal Number)構成。與現有技術比,本發明提供的一種提高多數據緩沖區DMA效率的系統和方法,基于非描述符機制的多隊列DMA引擎,并對多個數據緩沖區進行支持,以提高主機IO總線的利用率和報文發送速度。而且解決了描述符傳輸所帶來的時間開銷和系統總線開銷大以及操作系統在對多個數據緩沖區進行管理時會帶來額外的開銷的問題。
圖1為提高多數據緩沖區DMA效率的系統的結構示意圖。圖2為數據緩沖區與DMA請求隊列的數據結構示意圖。圖3為數據緩沖區信息管理模塊流程圖。圖4為緩沖區請求信號控制流程圖。圖5為數據緩沖區請求處理流程圖。圖6為數據緩沖區寫回請求流程圖。圖7為直接相聯模式示意圖。圖8為直接相聯模式流程圖。
具體實施例方式圖1為此系統的整體結構圖。一種提高多數據緩沖區DMA效率的系統,其包括 主機和與其通過IO總線連接的網卡,所述主機包括數據緩沖區、數據緩沖區信息模塊和 DMA控制器,其特征在于,所述網卡包括數據緩沖區信息管理單元以及與所述DMA控制器分別通信的DMA請求隊列和返回數據接收隊列;數據緩沖區信息模塊中的數據緩沖區信息 (Buffer Info)通過主機IO總線傳輸到所述數據緩沖區信息管理單元。所述DMA請求隊列與所述返回數據接收隊列的數量各為4 ;所述數據緩沖區有64 個。所述數據緩沖區信息管理單元,包括Buffer hfo模塊、Lock模塊、Buffer Number模塊 1、Block Address 模塊、Block Length 模塊、DMA Info Available 模塊禾口 Ack for DMA Read Pointer Write Back模塊。所述DMA請求隊列,包括Ack for DMA hfo模塊、Buffer Number 模塊 2、DMA Read Pointer 模塊、DMA Read Pointer Write Back Request 模塊禾口 DMA Read Request Sender模塊。所述網卡使用型號為M6110T的fpga芯片。提高多數據緩沖區DMA效率的系統和方法,包括(1)當應用程序向數據緩沖區填入數據時,緩沖區的相關信息(如讀寫指針)通過主機10總線送往網卡并存儲在數據緩沖區信息管理模塊。(2)數據緩沖區信息管理模塊檢測到數據緩沖區中有數據需要發送時, 就從緩沖區相關信息中提取出待發送數據的地址和長度,并送往DMA請求隊列。C3)DMA請求隊列將對數據塊的請求組織為一個或多個符合主機10總線要求的DMA請求,并發送到主機。(4)主機的DMA控制器響應接收到的DMA請求,將被請求的數據通過主機10總線發送網卡上。圖1中的數據緩沖區、DMA請求隊列、返回數據接收隊列可以為多個,其中DMA請求隊列與返回數據接收隊列的數量相等并有一一對應關系。DMA請求隊列與返回數據接收隊列之間需要流控信號,以保證請求數據的速度不超過整個系統的處理能力。
下面以使用FPGA作為網卡控制器和PCI Express總線的系統為例,其中數據緩沖區的數量為64,DMA請求隊列與返回數據接收隊列的數量各為4。數據緩沖區與DMA請求隊列采用全相聯模式連接,即任意一個數據緩沖區的數據發送請求可以由任意一個空閑的DMA請求隊列完成。如圖2所示,數據緩沖區的數據結構與DMA請求隊列包括如下數據結構=Buffer Info 數據緩沖區信息,可存放在FPGA片內RAM上。緩沖區讀指針由驅動程序維護,每次讀指針變化時,就通過PCI Express總線將讀指針位置發送到網卡中。緩沖區寫指針由網卡維護,每次緩沖區數據傳輸結束后,將更新的緩沖區讀指針寫回到緩沖區信息中。為避免因主機頻繁的讀取緩沖區讀指針而影響數據發送效率,可以等到緩沖區中已保存了一些待發送數據后(如緩沖區空閑空間小于緩沖區總大小一半時)再更新讀指針。Lock 數據緩沖區鎖定標記。對應于每個數據緩沖區,有1位的Lock信號控制此緩沖區能否被訪問。當一個數據緩沖區被選中并正在等待處理,或已經與某一對DMA請求—— 數據返回隊列進行數據傳輸時,此緩沖區不能被輪詢選中,Lock標記為1,直到DMA請求隊列已經處理完該數據緩沖區上一次提交的全部傳輸請求且更新后的讀指針被寫回到DMA Buffer Info 中。Buffer Number 正在等待處理的緩沖區號。Block Address 請求傳輸的數據在內存中的起始地址。Block Length 請求傳輸的數據長度,由數據緩沖區的讀寫指針決定。DMA Info Available :DMA信息有效信號,表示已檢測一個緩沖區在請求數據傳輸。Ack for DMA Info :DMA信息響應信號,表示當前緩沖區的數據傳輸請求已被接受。DMA RRS (DMA Read Request Sender) :DMA讀請求發送器將對緩沖區數據塊的請求組織為一個或多個符合主機10總線要求的DMA請求,并發送到主機。DMA Read Pointer :DMA 讀指針,由 Block Address+Block Length 計算得出,需寫回到數據緩沖區信息中。DMA Read Pointer Write Back Request :DMAi賣指針寫回請求。Ack for DMA Read Pointer Write Back :DMA讀指針寫回請求響應,表示該請求已被接受。在圖3所示的數據緩沖區信息管理流程中,優先處理讀指針的寫回請求。隨后檢查是否有緩沖區正在等待處理,如果等待處理的緩沖區請求未被DMA請求隊列所接受,則重新執行此流程。所有正在等待處理和處理請求已被接受但尚未寫回讀指針的隊列都必須被鎖定(Lock位置為1),以防止因同一緩沖區同時被多個DMA請求隊列同時訪問而產生的緩沖區指針錯誤。數據緩沖區信息管理模塊對64個緩沖區輪詢檢查,被鎖定的緩沖區直接跳過輪詢。由于每次檢查緩沖區是否有數據需要發送所用時間很短,遠小于等待DMA請求從主機返回的時間,所以輪詢查找方式對緩沖區數據傳輸請求的響應時間不會產生太大影響。圖4顯示數據緩沖區信息管理模塊與DMA請求隊列之間的數據交換流程。圖5顯示如和給正在等待處理的緩沖區請求分配一個DMA請求隊列。空閑DMA之間的仲裁可以選用任意的仲裁方法(包括固定優先級仲裁)。因為DMA請求隊列與數據緩沖區并無一一對應關系,所以數據緩沖區之間的響應機會均等由圖3所示的順序輪詢所保證,而與空閑DMA之間的仲裁方式無關。如圖6所示為數據緩沖區寫回請求流程圖,對于圖6中選擇一個已處理完緩沖區數據請求任務的DMA請求隊列的仲裁方式,可使用與圖5中選擇空閑DMA相同的仲裁方式。所述數據緩沖區信息管理單元提供數據緩沖區號和讀指針信息;內部號為緩沖區號的數值模DMA請求隊列數量所得的余數;數據緩沖區與DMA請求隊列采用直接聯模式連接,即一個數據緩沖區的數據發送請求只能由一個指定的DMA請求隊列完成。具體數據結構如圖7所示。如圖7所示,64個緩沖區被分為4組,每組的16個緩沖區傳輸請求只能被一個指定的DMA請求隊列處理。緩沖區號(Buffer Number)的低位由DMA請求隊列號(RRS Number)構成,高位由內部號(Internal Number)構成。圖8為直接相聯模式流程圖,由于采用直接相聯的分組模式,同組的緩沖區傳輸請求只能被同一個DMA請求隊列處理,與圖2所示全相聯模式相比,不需要對正在傳輸數據的緩沖區進行鎖定操作。需要聲明的是,本發明內容及具體實施方式
意在證明本發明所提供技術方案的實際應用,不應解釋為對本發明保護范圍的限定。本領域技術人員在本發明的精神和原理啟發下,可作各種修改、等同替換、或改進。但這些變更或修改均在申請待批的保護范圍內。
權利要求
1.一種提高多數據緩沖區DMA效率的系統,其包括主機和與其通過IO總線連接的網卡,所述主機包括數據緩沖區、數據緩沖區信息模塊和DMA控制器,其特征在于,所述網卡包括數據緩沖區信息管理單元以及與所述DMA控制器分別通信的DMA請求隊列和返回數據接收隊列;所述數據緩沖區信息模塊中的數據緩沖區信息(Buffer Info)通過主機IO總線傳輸到所述數據緩沖區信息管理單元。
2.根據權利要求1所述的系統,其特征在于,所述DMA請求隊列與所述返回數據接收隊列的數量各為4 ;所述數據緩沖區的數量有64個。
3.根據權利要求1所述的系統,其特征在于,所述數據緩沖區信息管理單元包括 Buffer Info 模塊、Lock 模塊、Buffer Number 模塊 1、Block Address 模塊、Block Length 模塊、DMA Info Available 模塊禾口 Ack for DMA Read Pointer Write Back 模塊。
4.根據權利要求1所述的系統,其特征在于,所述DMA請求隊列包括Ackfor DMA Info Illfe>Buffer Number 2>DMA Read Pointer DMA Read Pointer Write Back Request 模塊禾口 DMA Read Request Sender 模塊。
5.根據權利要求1所述的系統,其特征在于,所述網卡使用型號為V5110T的fpga芯片。
6.根據1-5項權利要求任一項所述的提高多數據緩沖區DMA效率的系統的提高多數據緩沖區DMA效率的方法,其特征在于,所述方法包括如下步驟(1).向數據緩沖區填入數據時,數據緩沖區信息通過主機IO總線送往網卡并存儲在數據緩沖區信息管理單元;(2).從緩沖區相關信息中提取出待發送數據的地址和長度,并送往DMA請求隊列;(3).DMA請求隊列將對數據塊的請求組織為一個或多個符合主機IO總線要求的DMA請求,并發送到主機;⑷.主機的DMA控制器響應接收到的DMA請求,將被請求的數據通過主機10總線發送網卡上。
7.根據權利要求6所述的方法,其特征在于,在所述步驟2中,所述數據緩沖區信息管理單元優先處理DMA Read Pointer Write Back Itequest,隨后檢查是否有緩沖區正在等待處理,如果等待處理的緩沖區請求未被DMA請求隊列所接受,則重新執行此流程,否則將所述 DMA Info Available 模塊置 0。
8.根據權利要求6所述的方法,其特征在于,在所述步驟4中,如果已有數據緩沖區正在等待處理,且能仲裁出空閑的請求隊列,則將等待處理的緩沖區信息送往空閑的DMA請求隊列,將所述Ack for DMA hfo模塊置為1。
9.根據權利要求7所述的方法,其特征在于,所述數據緩沖區信息管理單元提供數據緩沖區號和讀指針信息;內部號為緩沖區號的數值模DMA請求隊列數量所得的余數;所述 DMA Read Pointer Write Back Request的過程包括仲裁出一個已處理完緩沖區數據請求任務的DMA請求隊列,將要寫回的數據緩沖區號和讀指針信息送往數據緩沖區信息管理單元并將 DMA Read Pointer Write Back Request 模塊置為 1 ;如果此時 Ack for DMA Read Pointer Write Back|f|feSDMA Read Pointer Write Back Request HlfeS 0 ;其中,緩沖區號的低位由DMA請求隊列號(RRS Number)構成,高位由內部號(Internal Number)構成。
全文摘要
本發明提供了一種提高多數據緩沖區DMA效率的系統和方法,包括(1)當應用程序向數據緩沖區填入數據時,緩沖區的相關信息通過主機IO總線送往網卡并存儲在數據緩沖區信息管理模塊。(2)數據緩沖區信息管理模塊檢測到數據緩沖區中有數據需要發送時,就從緩沖區相關信息中提取出待發送數據的地址和長度,并送往DMA請求隊列。(3)DMA請求隊列將對數據塊的請求組織為一個或多個符合主機IO總線要求的DMA請求,并發送到主機。(4)主機的DMA控制器響應接收到的DMA請求,將被請求的數據通過主機IO總線發送網卡上。本發明提供的提高多數據緩沖區DMA效率的系統和方法,基于非描述符機制的多隊列DMA引擎,提高主機IO總線的利用率和報文發送速度。
文檔編號G06F13/28GK102541779SQ201110383370
公開日2012年7月4日 申請日期2011年11月28日 優先權日2011年11月28日
發明者張磊, 張英文, 李旭, 李靜, 白宗元, 竇曉光, 紀奎 申請人:曙光信息產業(北京)有限公司