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