專利名稱:一種零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法
技術領域:
本發(fā)明涉及一種零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)4妄收的管理方法,特別是涉及 一種通過分離句柄管理零拷貝數(shù)據(jù)緩沖區(qū)隊列的網(wǎng)絡數(shù)據(jù)接收的方法。
背景技術:
在計算機的現(xiàn)有數(shù)據(jù)發(fā)送技術中,經(jīng)常采用數(shù)據(jù)隊列的數(shù)據(jù)結構來保存數(shù) 據(jù),數(shù)據(jù)隊列中的元素(數(shù)據(jù))和隊列的控制信息(隊列控制項)是緊密耦合 在一起的,這樣做便于增加軟件的內(nèi)聚,這對單進程操作十分有利。在零拷貝 的網(wǎng)絡傳送中,需要內(nèi)核驅動程序及用戶內(nèi)存應用程序能夠同時訪問由報文緩 沖區(qū)構成的隊列空間,這就帶來了隊列控制結構是在用戶內(nèi)存空間構造還是在 內(nèi)核空間構造的問題,以及隊列信息訪問時的互斥問題。目前管理零拷貝緩沖 隊列,采用的技術方法是在用戶空間構造數(shù)據(jù)緩沖隊列及其控制信息,這就需 要用內(nèi)存拷貝將控制信息傳給內(nèi)核,并需要在隊列控制信息中增加互斥標志, 即內(nèi)核驅動程序及用戶內(nèi)存應用程序訪問隊列時都要查看并設置互斥標志,因 此這種將緩沖區(qū)隊列和它的控制信息揉合在一起的數(shù)據(jù)緩沖區(qū)隊列管理方法, 不便于內(nèi)核驅動程序及用戶內(nèi)存應用程序對數(shù)據(jù)緩沖隊列同時訪問。目前采用 的通過互斥標志避免讀寫沖突的方法,雖然能夠節(jié)省存貯資源,但無法滿足零 拷貝對軟件的高時效性要求。發(fā)明內(nèi)容本發(fā)明針對目前網(wǎng)絡數(shù)據(jù)發(fā)送中的數(shù)據(jù)緩沖隊列管理方法采用的是數(shù)據(jù)隊 列中的元素(數(shù)據(jù))和隊列的控制信息(隊列控制項)是緊密耦合在一起的, 在內(nèi)核驅動程序及用戶內(nèi)存應用程序訪問隊列時都要查看并設置互斥標志,無 法實現(xiàn)內(nèi)核驅動程序及用戶內(nèi)存應用程序對對數(shù)據(jù)緩沖隊列同時訪問,并滿足零拷貝對軟件的高時效性要求的問題,提供了 一種在用戶空間分配連續(xù)的內(nèi)存作為報文的DMA緩沖區(qū),同時在內(nèi)核中建立緩沖區(qū)隊列的控制句柄管理零拷貝緩沖隊列的網(wǎng)絡數(shù)據(jù)發(fā)送方法,實現(xiàn)內(nèi)核驅動程序及用戶內(nèi)存應用程序對數(shù)據(jù) 緩沖隊列的免鎖同時訪問,并滿足零拷貝對軟件的高時效性要求。為了實現(xiàn)上述發(fā)明目的,本發(fā)明采用下述技術方案一種零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其中,所述方法包括如 下操作步驟A、在用戶空間分配連續(xù)的內(nèi)存作為報文的DMA緩沖區(qū);B、在內(nèi) 核驅動中建立緩沖區(qū)的控制句柄,把緩沖區(qū)劃分為4個環(huán)形隊列來管理,發(fā)送 和接收報文有兩個隊列,避免使用互斥鎖,在控制句柄中設置DMA物理地址表, 計算并保存每個DMA緩沖區(qū)的物理地址;C、應用程序通過接口庫映射控制句柄, 實現(xiàn)對緩沖區(qū)的操作;D、接收報文時,驅動從接收報文的空緩沖區(qū)隊列取出一 個空緩沖區(qū)索引,查找物理地址表,把空緩沖區(qū)的物理地址寫入網(wǎng)卡,當網(wǎng)卡 把緩沖區(qū)填充了報文后,驅動把填滿報文的緩沖區(qū)索引放入滿緩沖區(qū)隊列,應 用從滿緩沖區(qū)隊列取出 一個填充了報文的緩沖區(qū),分析報文內(nèi)容后把緩沖區(qū)放 入空緩沖區(qū)隊列。一種優(yōu)選的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其中,所述操作 步驟A具體操作過程如下Al、應用程序用一系列參數(shù)調(diào)用接口庫打開設備函 數(shù),參數(shù)中有應用所需要的報文緩沖區(qū)的總容量,以及其中發(fā)送緩沖區(qū)占的百 分比;A2、接口庫函數(shù)根據(jù)緩沖區(qū)參數(shù)申請一片連續(xù)的內(nèi)存,但不對這片內(nèi)存 劃分緩沖區(qū)隊列,不構造管理結構,而是把緩沖區(qū)地址和參數(shù)傳給內(nèi)核驅動。一種進一步優(yōu)選的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其中,所 述操作步驟B具體操作過程如下Bl、內(nèi)核驅動根據(jù)緩沖區(qū)內(nèi)存的大小計算管 理句柄的大小,申請一片連續(xù)的空間作為句柄結構;B2、驅動根據(jù)緩沖區(qū)參數(shù), 初始化句柄中的4個隊列,把整個緩沖區(qū)內(nèi)存劃分為多個2K字節(jié)大小的緩沖區(qū), 把每個緩沖區(qū)的索引保存在句柄的隊列中,從而可以通過句柄控制用戶空間的 整個緩沖區(qū)內(nèi)存,因為句柄中的隊列會被應用和驅動同時訪問,接收和發(fā)送分 別實現(xiàn)兩個隊列,可以避免使用互斥鎖,減少系統(tǒng)開銷;B3、驅動根據(jù)緩沖區(qū)
大小構造緩沖區(qū)的物理地址表,把每個緩沖區(qū)的物理地址計算出來保存到表中,以便設置網(wǎng)卡DMA時使用;B4、驅動把句柄物理地址返回給接口庫函數(shù)。一種進一步優(yōu)選的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其中,所 述操作步驟C具體操作過程如下Cl、接口庫函數(shù)根據(jù)驅動返回的句柄的物理 地址,通過內(nèi)存映射把句柄映射到用戶空間;C2、接口庫函數(shù)通過驗證句柄開 始和結束部分的魔數(shù),確認句柄映射是否成功;C3、接口庫獲得句柄后,可以 通過句柄操作緩沖區(qū)隊列。一種進一步優(yōu)選的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)發(fā)送的管理方法,其中,所 述操作步驟D具體操作過程如下Dl、驅動從句柄中的空緩沖區(qū)隊列取出一個 空緩沖區(qū)的索引;D2、驅動根據(jù)索引查找緩沖區(qū)物理地址表,得到緩沖區(qū)的物 理地址;D3、驅動4巴緩沖區(qū)物理地址寫入硬件網(wǎng)卡,由網(wǎng)卡填充l艮文并發(fā)中斷 信號給驅動;D4、驅動響應網(wǎng)卡中斷,把填充了報文的緩沖區(qū)索引放入句柄中 的滿緩沖區(qū)隊列,供應用取出使用;D5、應用通過接口庫中映射的句柄結構訪 問緩沖區(qū)隊列,從漫緩沖區(qū)中取出一個填充了報文的緩沖區(qū)的索引;D6、應用 根據(jù)索引獲得緩沖區(qū),分析緩沖區(qū)里面的報文;D7、應用把分析完的緩沖區(qū)放 入空緩沖區(qū)隊列,以便驅動取出使用。本發(fā)明的上述技術方案,由于在網(wǎng)絡數(shù)據(jù)傳送中采用將用戶空間的零拷貝 緩沖區(qū)隊列與內(nèi)核空間的隊列控制句柄分離,從而避免零拷貝驅動在滿/空兩個 隊列中設置互斥鎖的方法,使數(shù)據(jù)隊列結構與現(xiàn)有技術相比變得更加靈活,可 方便地監(jiān)視各個緩沖區(qū)隊列的狀態(tài)、改變緩沖區(qū)隊列的長度;由于雙隊列免鎖, 應用程序和驅動程序可同時對網(wǎng)絡傳送中的數(shù)據(jù)進行操作,減少了驅動程序和 應用程序的互斥開銷,大大提高了網(wǎng)絡數(shù)據(jù)發(fā)送的時效性,運用本發(fā)明可滿足 高速網(wǎng)對數(shù)據(jù)傳送效率的要求,提高零拷貝緩沖區(qū)管理的靈活性和效率。例如 將本發(fā)明試運用于中國國家網(wǎng)絡信息安全中心,經(jīng)測試可以通過參數(shù)指定緩沖 區(qū)的總容量,可以指定發(fā)送緩沖區(qū)的百分比,可以靈活高效的管理零拷貝緩沖 區(qū)隊列。
以下結合附圖對本發(fā)明做進一 步詳細說明。
圖1為本發(fā)明操作過程示意圖; 圖2為本發(fā)明操作步驟A的具體操作過程示意圖; 圖3為本發(fā)明操作步驟B的具體操作過程示意圖; 圖4為本發(fā)明操作步驟C的具體操作過程示意圖; 圖5為本發(fā)明操作步驟D的具體操作過程示意圖; 圖6為本發(fā)明控制句柄結構示意圖。
具體實施方式
在本發(fā)明上述技術方案的設計思想下,本發(fā)明可以有多種,下面通過具體 實施例予以:說明。 實施例一圖1為本發(fā)明操作過程示意圖,圖6為本發(fā)明控制句柄結構示意圖。如圖1、 圖6所示,本發(fā)明包括如下操作步驟A、 在用戶空間分配連續(xù)的內(nèi)存作為報文的DMA緩沖區(qū); 在本步驟中,檢查系統(tǒng)初始設置的最大共享內(nèi)存值,若請求內(nèi)存值大于系統(tǒng)默認共享內(nèi)存值,則對系統(tǒng)默認內(nèi)存值進行修改。根據(jù)所需的內(nèi)存大小來分 配共享內(nèi)存,成功返回內(nèi)存的起始地址后,就可以對內(nèi)存進行保存數(shù)據(jù)或鎖定 操作。在使用完內(nèi)存后,將此內(nèi)存歸還給系統(tǒng)。B、 在內(nèi)核驅動中建立緩沖區(qū)的控制句柄,把緩沖區(qū)劃分為4個環(huán)形隊列 來管理,發(fā)送和接收報文有兩個隊列,避免使用互斥鎖;在控制句柄中設置 DMA物理地址表,計算并保存每個DMA緩沖區(qū)的物理地址;在本步驟中,驅動程序會申請一塊內(nèi)存,作為全局的控制句柄,成員包括描 述發(fā)送和接收報文的隊列,此隊列由空閑的接收隊列、空閑的傳輸隊列、緩存 數(shù)據(jù)報的接收隊列及緩存數(shù)據(jù)報的發(fā)送隊列組成;描述驅動工作模式的變量,工作模式包含正常模式和直接拷貝模式;用于進程同步及互斥的變量等??刂?句柄進行初始化后,把用戶空間中發(fā)送和接收報文地址區(qū)域分割成若干數(shù)據(jù)塊, 將每一塊的首地址轉換成內(nèi)核空間的物理地址,即DMA操作所需的地址,存儲 在控制句柄的隊列結構中。C、 應用程序通過接口庫映射控制句柄,實現(xiàn)對緩沖區(qū)的操作。本實施例 中通過映射緩存句柄的物理地址到用戶空間的虛擬地址實現(xiàn)以上操作。D、 接收報文時,驅動從接收報文的空緩沖區(qū)隊列取出一個空緩沖區(qū)索引, 查找物理地址表,把空緩沖區(qū)的物理地址寫入網(wǎng)卡,當網(wǎng)卡把緩沖區(qū)填充了報 文后,驅動把填滿報文的緩沖區(qū)索引放入滿緩沖區(qū)隊列,應用從滿緩沖區(qū)隊列 取出 一個填充了報文的緩沖區(qū),分析報文內(nèi)容后把緩沖區(qū)放入空緩沖區(qū)隊列。實施例二本實施例與實施例一的不同之處在于,所述操作步驟A具體操作過程如圖 2所示,為Al、應用程序用一系列參數(shù)調(diào)用接口庫打開設備函數(shù),參數(shù)中有 應用所需要的報文緩沖區(qū)的總容量,以及其中發(fā)送緩沖區(qū)占的百 分比。A2、接口庫函數(shù)根據(jù)緩沖區(qū)參數(shù)申請一片連續(xù)的內(nèi)存,但不對這 片內(nèi)存劃分緩沖區(qū)隊列,不構造管理結構,而是把緩沖區(qū)地址和 參數(shù)傳給內(nèi)核驅動。實施例三本實施例與實施例二的不同之處在于,所述操作步驟B具體操作過程如圖3 所示,為Bl、內(nèi)核驅動根據(jù)根據(jù)緩沖區(qū)內(nèi)存的大小計算管理句柄的大小,
申請 一 片連續(xù)的空間作為句柄結構。B2、驅動根據(jù)緩沖區(qū)參數(shù),初始化句柄中的4個隊列,把整個緩 沖區(qū)內(nèi)存劃分為多個2K字節(jié)大小的緩沖區(qū),把每個緩沖區(qū)的索 I保存在句柄的隊列中,從而可以通過句柄控制用戶空間的整個 緩沖區(qū)內(nèi)存。因為句柄中的隊列會被應用和驅動同時訪問,接收 和發(fā)送分別實現(xiàn)兩個隊列,可以避免使用互斥鎖,減少系統(tǒng)開銷。 B3、驅動根據(jù)緩沖區(qū)大小構造緩沖區(qū)的物理地址表,把每個緩沖 區(qū)的物理地址計算出來保存到表中,以便設置網(wǎng)卡DMA時使用。 B4、驅動4巴句柄物理地址返回給接口庫函數(shù)。實施例四本實施例與實施例三的不同之處在于,所述操作步驟C具體搡作過程如圖4 所示,為Cl、接口庫函數(shù)根據(jù)驅動返回的句柄的物理地址,通過內(nèi)存映射 ^^句柄映射到用戶空間。C2、接口庫函數(shù)通過驗證句柄開始和結束部分的魔數(shù),確認句柄 映射是否成功。C3、接口庫獲得句柄后,可以通過句柄搡作緩沖區(qū)隊列。實施例五本實施例與實施例四的不同之處在于,所述^喿作步驟D具體#:作過程如圖5所示,為Dl 、驅動從句柄中的空緩沖區(qū)隊列取出 一個空緩沖區(qū)的索引; D2、驅動根據(jù)索引查找緩沖區(qū)物理地址表,得到緩沖區(qū)的物理地址; D3、驅動把緩沖區(qū)物理地址寫入硬件網(wǎng)卡,由網(wǎng)卡填充報文并發(fā)中斷 信號給驅動;D4、驅動響應網(wǎng)卡中斷,把填充了報文的緩沖區(qū)索引放入句柄中的滿緩沖區(qū)隊列,供應用取出使用;D5 、應用通過接口庫中映射的句柄結構訪問緩沖區(qū)隊列,從漫緩沖區(qū)中取出 一個填充了報文的緩沖區(qū)的索引;D6、應用根據(jù)索引獲得緩沖區(qū),分析緩沖區(qū)里面的報文;D7、應用把分析完的緩沖區(qū)放入空緩沖區(qū)隊列,以便驅動取出使用。最后應當說明的是以上實施例僅用以說明本發(fā)明的技術方案而非對其限 制,盡管參照上述實施例對本發(fā)明進行了詳細的說明,所屬領域的普通技術人 員應當理解依然可以對本發(fā)明的具體實施方式
進行修改或者等同替換,而未 脫離本發(fā)明精神和范圍的任何修改或者等同替換,其均應涵蓋在本發(fā)明的權利 要求范圍當中。
權利要求
1、一種零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其特征在于,所述方法包括如下操作步驟A、在用戶空間分配連續(xù)的內(nèi)存作為報文的DMA緩沖區(qū);B、在內(nèi)核驅動中建立緩沖區(qū)的控制句柄,把緩沖區(qū)劃分為4個環(huán)形隊列來管理,發(fā)送和接收報文有兩個隊列,避免使用互斥鎖,在控制句柄中設置DMA物理地址表,計算并保存每個DMA緩沖區(qū)的物理地址;C、應用程序通過接口庫映射控制句柄,實現(xiàn)對緩沖區(qū)的操作;D、接收報文時,驅動從接收報文的空緩沖區(qū)隊列取出一個空緩沖區(qū)索引,查找物理地址表,把空緩沖區(qū)的物理地址寫入網(wǎng)卡,當網(wǎng)卡把緩沖區(qū)填充了報文后,驅動把填滿報文的緩沖區(qū)索引放入滿緩沖區(qū)隊列,應用從滿緩沖區(qū)隊列取出一個填充了報文的緩沖區(qū),分析報文內(nèi)容后把緩沖區(qū)放入空緩沖區(qū)隊列。
2、 如權利要求1所述的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其 特征在于,所述操作步驟A具體操作過程如下Al、應用程序用一系列參數(shù)調(diào)用接口庫打開設備函數(shù),參數(shù)中有應用 所需要的報文緩沖區(qū)的總容量,以及其中發(fā)送緩沖區(qū)占的百分比; A2、接口庫函數(shù)根據(jù)緩沖區(qū)參數(shù)申請一片連續(xù)的內(nèi)存,但不對這片內(nèi) 存劃分緩沖區(qū)隊列,不構造管理結構,而是把緩沖區(qū)地址和參數(shù)傳給 內(nèi)核驅動。
3、 如權利要求1所述的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其 特征在于,所述操作步驟B具體操作過程如下Bl、內(nèi)核驅動根據(jù)緩沖區(qū)內(nèi)存的大小計算管理句柄的大小,申請一片 連續(xù)的空間作為句柄結構;B2、驅動根據(jù)緩沖區(qū)參數(shù),初始化句柄中的4個隊列,把整個緩沖區(qū) 內(nèi)存劃分為多個2K字節(jié)大小的緩沖區(qū),把每個緩沖區(qū)的索引保存在 句柄的隊列中,從而可以通過句柄控制用戶空間的整個緩沖區(qū)內(nèi)存, 因為句柄中的隊列會被應用和驅動同時訪問,^接收和發(fā)送分別實現(xiàn)兩 個隊列,可以避免使用互斥鎖,減少系統(tǒng)開銷;B3、驅動根據(jù)緩沖區(qū)大小構造緩沖區(qū)的物理地址表,把每個緩沖區(qū)的 物理地址計算出來保存到表中,以便設置網(wǎng)卡DMA時使用; B4、驅動4巴句柄物理地址返回給4妄口庫函數(shù)。 4、如權利要求1所述的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其 特征在于,所述操作步驟C具體操作過程如下Cl、接口庫函數(shù)對艮據(jù)驅動返回的句柄的物理地址,通過內(nèi)存映射把句 柄映射到用戶空間;C2、接口庫函數(shù)通過驗證句柄開始和結束部分的魔數(shù)magic number, 確i人句柄映射是否成功; C3、接口庫獲得句柄后,可以通過句柄操作緩沖區(qū)隊列。 5、如權利要求1所述的零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,其 特征在于,所述搡作步驟D具體操作過程如下Dl 、驅動從句柄中的空緩沖區(qū)隊列取出 一個空緩沖區(qū)的索引; D2、驅動根據(jù)索引查找緩沖區(qū)物理地址表,得到緩沖區(qū)的物理地址; D3、驅動4巴援沖區(qū)物理地址寫入硬件網(wǎng)卡,由網(wǎng)卡填充報文并發(fā)中斷 信號給驅動;D4、驅動響應網(wǎng)卡中斷,把填充了報文的緩沖區(qū)索引放入句柄中的滿 緩沖區(qū)隊列,供應用取出使用;D5、應用通過4妄口庫中映射的句柄結構訪問緩沖區(qū)隊列,從漫緩沖區(qū)中取出 一個填充了報文的緩沖區(qū)的索引;D6、應用根據(jù)索引獲得緩沖區(qū),分析緩沖區(qū)里面的報文;D7、應用把分析完的緩沖區(qū)放入空緩沖區(qū)隊列,以便驅動取出使用。全文摘要
本發(fā)明公開了一種零拷貝緩沖區(qū)隊列網(wǎng)絡數(shù)據(jù)接收的管理方法,屬于網(wǎng)絡數(shù)據(jù)零拷貝的數(shù)據(jù)緩沖區(qū)隊列的管理方法領域。本發(fā)明的技術方案包括如下操作步驟A.在用戶空間分配連續(xù)的內(nèi)存作為報文的DMA緩沖區(qū);B.在內(nèi)核驅動中建立緩沖區(qū)的控制句柄;C.應用程序通過接口庫映射控制句柄,實現(xiàn)對緩沖區(qū)的操作;D.接收報文時,驅動把滿緩沖區(qū)的物理地址寫入網(wǎng)卡,應用從滿緩沖區(qū)隊列取出一個填充了報文的緩沖區(qū),發(fā)送報文內(nèi)容后把緩沖區(qū)放入空緩沖區(qū)隊列。本發(fā)明適用于零拷貝驅動對報文緩沖區(qū)的靈活管理。
文檔編號H04L12/54GK101150486SQ200710177370
公開日2008年3月26日 申請日期2007年11月15日 優(yōu)先權日2007年11月15日
發(fā)明者劉朝輝, 軍 歷, 宇 曾, 華 聶 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司