欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種支持多類型網(wǎng)卡鏈路聚合的零拷貝方法

文檔序號:6464351閱讀:281來源:國知局
專利名稱:一種支持多類型網(wǎng)卡鏈路聚合的零拷貝方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種零拷貝捕包方法,具體地說是一種可支持多類型網(wǎng)卡、 實現(xiàn)鏈路聚合功能的零拷貝方法。
背景技術(shù)
在高速網(wǎng)絡(luò)環(huán)境中,進行偵聽,檢測等工作的應(yīng)用軟件需要高效的報文
捕獲方式,也就是零拷貝捕包方式,在傳統(tǒng)的零拷貝捕包軟件中, 一般采用
內(nèi)核驅(qū)動和應(yīng)用接口庫兩層結(jié)構(gòu)。內(nèi)核驅(qū)動負(fù)責(zé)向報文緩沖區(qū)中寫入報文, 應(yīng)用接口庫負(fù)責(zé)把報文緩沖區(qū)提交給應(yīng)用,當(dāng)應(yīng)用軟件處理完報文后,會再
把緩沖區(qū)通過應(yīng)用接口庫釋放,以便內(nèi)核驅(qū)動向緩沖區(qū)寫入新的報文。
在傳統(tǒng)的零拷貝軟件中,當(dāng)一個應(yīng)用在一塊網(wǎng)卡上捕包時,應(yīng)用通過零
拷貝接口庫和內(nèi)核緩沖區(qū)共同操作一個緩沖區(qū)隊列。但是隨著CPU計算能力
的增強,現(xiàn)在一臺服務(wù)器已經(jīng)有能力處理多塊網(wǎng)卡上的流量,所以需要零拷 貝軟件提供鏈路聚合功能,把多個網(wǎng)卡的流量聚合成一個數(shù)據(jù)流提交給應(yīng)用 軟件。
實現(xiàn)鏈路聚合的一般方法是,在接口庫中建立一系列緩沖隊列,對應(yīng)每 個網(wǎng)卡設(shè)備有一個隊列,當(dāng)接口庫向應(yīng)用提交報文緩沖區(qū)時,接口庫對每個
網(wǎng)卡進行輪詢,并尋找一個緩沖區(qū)給應(yīng)用;當(dāng)應(yīng)用釋放緩沖區(qū)時,接口庫根 據(jù)緩沖區(qū)的位置計算緩沖區(qū)屬于哪個網(wǎng)卡,把緩沖區(qū)放入該網(wǎng)卡的空閑隊列。
隨著應(yīng)用需求的發(fā)展,現(xiàn)有技術(shù)方案出現(xiàn)了可擴展性不好的缺點,因為 很多高速網(wǎng)上的報文處理應(yīng)用需要特殊的定制化的網(wǎng)卡硬件,在這些定制網(wǎng) 卡上,往往要對原始的網(wǎng)絡(luò)報文做一些預(yù)處理,常見的是在原始報文結(jié)構(gòu)前面增強一個額外的數(shù)據(jù)結(jié)構(gòu),或者把多個小報文拼合在一個緩沖區(qū)內(nèi)。由于 不同的捕包網(wǎng)卡上傳的報文結(jié)構(gòu)不同,現(xiàn)有的技術(shù)方案中,應(yīng)用接口庫把緩 沖區(qū)和報文作為 一致的數(shù)據(jù)結(jié)構(gòu)處理,導(dǎo)致一套接口庫只能在一種類型的網(wǎng) 卡設(shè)備上使用,無法解決一個應(yīng)用使用多種網(wǎng)卡的問題。

發(fā)明內(nèi)容
本發(fā)明的目的在于解決現(xiàn)有技術(shù)方案的缺點,從而提供一種通過將現(xiàn)有 技術(shù)中的捕包應(yīng)用接口層劃分為緩沖區(qū)接口層和報文接口層的分層結(jié)構(gòu)實現(xiàn) 對多類型網(wǎng)卡的報文的聚合、對應(yīng)用提供分流、過濾等附加功能的零拷貝方 法。
為實現(xiàn)上述發(fā)明目的,本發(fā)明通過如下技術(shù)方案實現(xiàn) 一種支持多類型 網(wǎng)卡鏈路聚合的零拷貝方法,包括如下步驟
A) 應(yīng)用程序調(diào)用接口庫提供的緩沖區(qū)接口層函數(shù)打開設(shè)備接口,對各網(wǎng)
卡指定一個用于區(qū)分不同類型網(wǎng)卡的類型號碼,將各類型號碼記錄在設(shè)備類 型列表中;在各網(wǎng)卡的內(nèi)核驅(qū)動中都增加一個用于返回網(wǎng)卡類型號碼的系統(tǒng) 調(diào)用命令;
B) 緩沖區(qū)接口層提供的打開設(shè)備接口函數(shù)在用戶空間中申請一片連續(xù)的 內(nèi)存作為緩沖區(qū),并將緩沖區(qū)首地址傳給內(nèi)核驅(qū)動;
C) 內(nèi)核驅(qū)動申請連續(xù)的頁面來構(gòu)造緩沖區(qū)隊列的控制結(jié)構(gòu),并把控制結(jié) 構(gòu)的物理地址傳給緩沖區(qū)接口層函數(shù);
D) 接口函數(shù)根據(jù)緩沖區(qū)控制結(jié)構(gòu)的地址,通過內(nèi)存映射得到緩沖區(qū)控制 結(jié)構(gòu)中的信息;
E) 應(yīng)用程序調(diào)用接口庫提供的報文接口層函數(shù)打開設(shè)備接口 ,通過各網(wǎng) 卡設(shè)備的系統(tǒng)調(diào)用命令獲得各網(wǎng)卡設(shè)備的類型號碼,并將記錄所有號碼的設(shè) 備類型列表記錄在一個全局?jǐn)?shù)據(jù)結(jié)構(gòu)中,報文接口層根據(jù)類型號碼對相應(yīng)網(wǎng) 卡設(shè)備的緩沖區(qū)進行操作;
F) 在用戶空間中為應(yīng)用新建報文指針隊列,將從緩沖區(qū)中提取出的報文
5指針放入報文指針隊列,應(yīng)用程序?qū)笪闹羔橁犃兄械膱笪臄?shù)據(jù)進行處理。
所述步驟B中緩沖區(qū)的大小為2KB,為保證在用戶空間申請的緩沖區(qū)位于 連續(xù)的內(nèi)存頁面上,接口庫函數(shù)申請的內(nèi)存為共享內(nèi)存,因為在linux操作 系統(tǒng)中,共享內(nèi)存位于連續(xù)的物理頁面上,具體操作為
Bl)接口庫函數(shù)在用戶空間申請共享緩沖區(qū),并連接到共享緩沖區(qū); B2)接口庫函數(shù)把共享緩沖區(qū)的首地址通過ioctl系統(tǒng)調(diào)用命令傳給內(nèi) 核驅(qū)動。
B3)內(nèi)核驅(qū)動計算緩沖區(qū)隊列中每個緩沖區(qū)的物理地址,并將所述地址 保存在一張物理地址表中以便DMA使用;
所述步驟C中的緩沖區(qū)控制結(jié)構(gòu)包括緩沖區(qū)隊列,此隊列包括空閑隊列、 接收緩沖區(qū)隊列、描述驅(qū)動工作模式的正常模式和直接拷貝模式,用于進程 同步及互斥的變量等。
所述步驟D的具體步驟為
Dl )用戶接口庫函數(shù)從系統(tǒng)調(diào)用返回的數(shù)據(jù)結(jié)構(gòu)中獲得內(nèi)核驅(qū)動中構(gòu)造 的緩沖區(qū)隊列控制結(jié)構(gòu)的物理地址;
D2)用戶接口庫函數(shù)打開內(nèi)存設(shè)備文件;
D 3 )用戶接口庫函數(shù)通過系統(tǒng)調(diào)用把內(nèi)核中的緩沖區(qū)控制結(jié)構(gòu)映射到自 己的地址空間。
所述步驟F的具體步驟為
Fl )報文接口層提供的打開設(shè)備接口函數(shù)在用戶空間中新建報文指針隊
列;
F2 )報文接口庫的報文提取函數(shù)通過設(shè)備類型列表判斷各網(wǎng)卡的緩沖區(qū) 中的結(jié)構(gòu),從而提取出報文指針,放入報文指針隊列中。
F3 )報文獲取接口函數(shù)從全局?jǐn)?shù)據(jù)結(jié)構(gòu)中得到報文指針隊列; F4)當(dāng)獲取報文接口被應(yīng)用程序調(diào)用時,報文接口層函數(shù)從接收報文指 針隊列中取出 一報文,緩沖區(qū)接口層繼續(xù)從填滿報文的緩沖區(qū)中定位每個報 文,以提取出報文首地址指針存入報文接口層的接收報文指針隊列。F5)當(dāng)報文被應(yīng)用程序4吏用完后即釋放才艮文接口凈皮應(yīng)用程序調(diào)用時,報 文接口層函數(shù)向釋放報文指針隊列中插入一報文,緩沖區(qū)接口層通過驅(qū)動把 釋放了報文的緩沖區(qū)傳給相應(yīng)的網(wǎng)卡設(shè)備,等待網(wǎng)卡設(shè)備再次向緩沖區(qū)中寫 入報文。
所述全局?jǐn)?shù)據(jù)結(jié)構(gòu)是在用戶空間申請一塊連續(xù)的內(nèi)存所構(gòu)建的,其成員 包括接收報文指針隊列和釋放報文指針隊列。
本發(fā)明所帶來的有益效果為
1、 本發(fā)明通過分層結(jié)構(gòu),將現(xiàn)有的應(yīng)用接口層劃分為緩沖區(qū)接口層和 報文接口層,緩沖區(qū)接口層不關(guān)心具體設(shè)備的緩沖區(qū)結(jié)構(gòu),報文接口層根據(jù) 設(shè)備類型從緩沖區(qū)提取報文,這樣不同設(shè)備的報文數(shù)據(jù)流可以在報文接口層 聚合為一個數(shù)據(jù)流,實現(xiàn)同 一臺機器上混合使用多種類型的網(wǎng)卡。
2、 本發(fā)明通過采用分層結(jié)構(gòu),實現(xiàn)了接口庫針對不同設(shè)備的代碼,只 有報文接口層不同,可以方便軟件的移植和擴展。


圖1是應(yīng)用接口層的結(jié)構(gòu)示意圖,圖中虛線框中為現(xiàn)有技術(shù)的應(yīng)用接口 層,本發(fā)明中將其拆分為緩沖區(qū)接口層和報文接口層; 圖2是實現(xiàn)本發(fā)明零拷貝方法的流程示意圖。
具體實施例方式
下面結(jié)合附圖,以兩種類型網(wǎng)卡(網(wǎng)卡A和網(wǎng)卡B)為例對本發(fā)明作進一 步說明。
如圖1所示,本發(fā)明通過分層結(jié)構(gòu),將現(xiàn)有零拷貝技術(shù)的捕包應(yīng)用接口 層劃分為緩沖區(qū)接口層和報文接口層,在緩沖區(qū)接口層中只有緩沖區(qū)的概 念,只針對一個網(wǎng)絡(luò)設(shè)備和一個緩沖區(qū)隊列進行操作,不再關(guān)心緩沖區(qū)內(nèi)的 數(shù)據(jù)結(jié)構(gòu),緩沖區(qū)接口層A面向網(wǎng)卡A,緩沖區(qū)接口層B面向網(wǎng)卡B;報文接口層面向應(yīng)用,使用設(shè)備類型列表,對每個設(shè)備的緩沖區(qū)進行獲取和釋放操 作,把報文結(jié)構(gòu)從緩沖區(qū)提取出來,并進行多網(wǎng)卡的報文的聚合。 圖2為實現(xiàn)本發(fā)明零拷貝方法的總體流程圖。
A) 應(yīng)用程序調(diào)用接口庫提供的緩沖區(qū)接口層函數(shù)打開設(shè)備接口,對各網(wǎng) 卡指定一個用于區(qū)分不同類型網(wǎng)卡的類型號碼,設(shè)備類型列表是一個全局?jǐn)?shù) 組dev—type[],每類設(shè)備有一個全局唯一的類型號碼,設(shè)定網(wǎng)卡A的類型號 碼為1,網(wǎng)卡B的類型號是2,那么就在設(shè)備類型列表中記錄dev—type[A]= 1, dev—type[B] =2。在網(wǎng)卡A和網(wǎng)卡B的驅(qū)動中均^是供ioctl接口 , ioctl 接口中提供GET-DEV-TYPE命令,該命令返回設(shè)備的類型號碼,用戶空間的函 數(shù)可以通過使用GET-DEV—TYPE命令調(diào)用網(wǎng)卡A和網(wǎng)卡B的ioctl接口,獲得 相應(yīng)網(wǎng)卡設(shè)備的類型號碼。
B) 緩沖區(qū)接口層提供的打開設(shè)備接口函數(shù)在用戶空間中申請一片連續(xù)的 內(nèi)存作為報文緩沖區(qū),并將緩沖區(qū)首地址傳給內(nèi)核驅(qū)動。在本步驟中,檢查 系統(tǒng)初始設(shè)置的最大共享內(nèi)存值,若請求內(nèi)存值大于系統(tǒng)默認(rèn)共享內(nèi)存值, 則對系統(tǒng)默認(rèn)內(nèi)存值進行修改,根據(jù)所需的內(nèi)存大小來分配共享內(nèi)存,成功 返回內(nèi)存的起始地址后,就可以對內(nèi)存進行保存數(shù)據(jù)或鎖定操作。在使用完 內(nèi)存后,將此內(nèi)存歸還給系統(tǒng)。
緩沖區(qū)隊列是由一系列指向緩沖區(qū)的指針組成的循環(huán)隊列,內(nèi)核驅(qū)動分 別從緩沖區(qū)隊列A和緩沖區(qū)隊列B中取出空閑緩沖區(qū),將網(wǎng)卡A的報文傳送 到緩沖區(qū)隊列A中的空閑緩沖區(qū)中,將網(wǎng)卡B的報文傳送到緩沖區(qū)隊列B中 的空閑緩沖區(qū)。
C )首先內(nèi)核驅(qū)動根據(jù)整個緩沖區(qū)隊列的大小計算需要的緩沖區(qū)控制結(jié)構(gòu) 的大小,其次內(nèi)核驅(qū)動申請連續(xù)的頁面來構(gòu)造緩沖區(qū)隊列的控制結(jié)構(gòu),再次 內(nèi)核驅(qū)動計算緩沖區(qū)隊列中每個緩沖區(qū)的物理地址,保存在一張物理地址表 中以便畫A使用,最后內(nèi)核驅(qū)動計算緩沖區(qū)隊列控制結(jié)構(gòu)的物理地址傳給緩 沖區(qū)接口層函數(shù)。
緩沖區(qū)控制結(jié)構(gòu)的成員包括緩沖區(qū)隊列,此隊列的結(jié)構(gòu)包括空閑隊列、接收緩沖區(qū)隊列、描述驅(qū)動工作模式的正常模式和直接拷貝模式,用于 進程同步及互斥的變量等。控制句柄進行初始化時,將每一塊緩沖區(qū)的首地
址轉(zhuǎn)換成內(nèi)核空間的物理地址,即DMA操作所需的地址,存儲在物理地址表 中。
D) 首先,緩沖區(qū)接口庫接口函數(shù)從系統(tǒng)調(diào)用返回數(shù)據(jù)結(jié)構(gòu)中獲得內(nèi)核驅(qū) 動中構(gòu)造的緩沖區(qū)隊列控制結(jié)構(gòu)的物理地址;其次,打開內(nèi)存設(shè)備文件 /dev/mem;最后,通過系統(tǒng)調(diào)用mmap把內(nèi)核中的緩沖區(qū)控制結(jié)構(gòu)映射到自己 的i也址空間。
E) 應(yīng)用程序調(diào)用接口庫提供的報文接口層函數(shù)打開設(shè)備接口,通過各網(wǎng) 卡設(shè)備的ioctl系統(tǒng)調(diào)用命令獲得各網(wǎng)卡設(shè)備的類型號碼,并將記錄所有號 碼的設(shè)備類型列表記錄在 一個全局?jǐn)?shù)據(jù)結(jié)構(gòu)中,報文接口層根據(jù)類型號碼對 相應(yīng)網(wǎng)卡設(shè)備的緩沖區(qū)進行操作。
在用戶空間申請一塊連續(xù)的內(nèi)存作為全局?jǐn)?shù)據(jù)結(jié)構(gòu),其成員包括接收報 文指針隊列和釋放才艮文指針隊列。
由報文接口層的函數(shù)到網(wǎng)卡設(shè)備列表中找到各網(wǎng)卡設(shè)備,并調(diào)用這些網(wǎng) 卡設(shè)備的緩沖區(qū)接口層的函數(shù)打開設(shè)備接口,通過各網(wǎng)卡設(shè)備的ioctl系統(tǒng) 調(diào)用命令獲得各網(wǎng)卡設(shè)備的類型號碼,將記錄所有號碼的設(shè)備類型列表記錄 在全局?jǐn)?shù)據(jù)結(jié)構(gòu)中。
F )首先,報文接口層提供的打開設(shè)備接口函數(shù)在用戶空間的數(shù)據(jù)結(jié)構(gòu)中 新建報文指針隊列,所述報文指針隊列中的隊列元素是指向每個報文的指 針,這些報文是從多個不同設(shè)備獲得的。報文接口庫的報文提取函數(shù)通過設(shè) 備類型列表判斷網(wǎng)卡A和網(wǎng)卡B的緩沖區(qū)中的結(jié)構(gòu),從而提取出報文指針, 放入報文指針隊列中;
報文獲取接口函數(shù)從全局?jǐn)?shù)據(jù)結(jié)構(gòu)中獲取報文指針隊列,當(dāng)獲取報文接 口被應(yīng)用程序調(diào)用時,報文接口層函數(shù)從接收報文指針隊列中取出 一報文, 應(yīng)用程序便對此報文進行相應(yīng)處理,此時緩沖區(qū)接口層繼續(xù)從填滿報文的緩 沖區(qū)中定位每個報文,以提取出報文首地址指針存入報文接口層的接收報文
9指針隊列;當(dāng)報文被應(yīng)用程序使用完后即釋放報文接口被應(yīng)用程序調(diào)用時, 報文接口層函數(shù)向釋放報文指針隊列中插入一報文,此時緩沖區(qū)接口層通過 驅(qū)動把釋放了報文的緩沖區(qū)傳給相應(yīng)的網(wǎng)卡設(shè)備,等待網(wǎng)卡設(shè)備再次向緩沖 區(qū)中寫入報文。
應(yīng)用程序會不斷從報文指針隊列中獲取報文指針,此時被提取的報文數(shù) 據(jù)便會形成一個數(shù)據(jù)流,以實現(xiàn)數(shù)據(jù)的聚合。
實施例2
本實施例的結(jié)構(gòu)和操作步驟基本同與實施例1,唯有不同之處在于,所 述步驟B中每個緩沖區(qū)的大小為2KB,為保證在用戶空間申請的緩沖區(qū)位于連 續(xù)的內(nèi)存頁面上,接口庫函數(shù)申請的內(nèi)存為共享內(nèi)存,因為在linux操作系統(tǒng) 中,共享內(nèi)存位于連續(xù)的物理頁面上。具體操作為
Bl)在接口庫函數(shù)申請共享緩沖區(qū),并連接到共享緩沖區(qū)。 B2)接口庫函數(shù)4巴共享緩沖區(qū)的首地址通過ioctl系統(tǒng)調(diào)用命令傳給內(nèi) 核驅(qū)動。
最后應(yīng)當(dāng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其 限制,盡管參照上述實施例對本發(fā)明進行了詳細(xì)的說明,所屬領(lǐng)域的普通技 術(shù)人員英當(dāng)理解依然可以對本發(fā)明的具體實施方式
進行修改或者等同替換, 而未脫離本發(fā)明精神和范圍的任何修改或者等同替換,其均應(yīng)涵蓋在本發(fā)明 的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1、一種支持多類型網(wǎng)卡鏈路聚合的零拷貝方法,其特征在于,所述方法包括如下步驟A)應(yīng)用程序調(diào)用接口庫提供的緩沖區(qū)接口層函數(shù)打開設(shè)備接口,對各網(wǎng)卡指定一個用于區(qū)分不同類型網(wǎng)卡的類型號碼,將各類型號碼記錄在設(shè)備類型列表中;在各網(wǎng)卡的內(nèi)核驅(qū)動中都增加一個用于返回網(wǎng)卡類型號碼的系統(tǒng)調(diào)用命令;B)緩沖區(qū)接口層提供的打開設(shè)備接口函數(shù)在用戶空間中申請一片連續(xù)的內(nèi)存作為緩沖區(qū),并將緩沖區(qū)首地址傳給內(nèi)核驅(qū)動;C)內(nèi)核驅(qū)動申請連續(xù)的頁面來構(gòu)造緩沖區(qū)隊列的控制結(jié)構(gòu),并把控制結(jié)構(gòu)的物理地址傳給緩沖區(qū)接口層函數(shù);D)接口函數(shù)根據(jù)緩沖區(qū)控制結(jié)構(gòu)的地址,通過內(nèi)存映射得到緩沖區(qū)控制結(jié)構(gòu)中的信息;E)應(yīng)用程序調(diào)用接口庫提供的報文接口層函數(shù)打開設(shè)備接口,通過各網(wǎng)卡設(shè)備的系統(tǒng)調(diào)用命令獲得各網(wǎng)卡設(shè)備的類型號碼,并將記錄所有號碼的設(shè)備類型列表記錄在一個全局?jǐn)?shù)據(jù)結(jié)構(gòu)中,報文接口層根據(jù)類型號碼對相應(yīng)網(wǎng)卡設(shè)備的緩沖區(qū)進行操作;F)在用戶空間中為應(yīng)用新建報文指針隊列,將從緩沖區(qū)中提取出的報文指針放入報文指針隊列,應(yīng)用程序?qū)笪闹羔橁犃兄械膱笪臄?shù)據(jù)進行處理。
2、 根據(jù)權(quán)利要求1所述的零拷貝方法,其特征在于,所述步驟B中緩沖區(qū)的大小為2KB,為保證在用戶空間申請的緩沖區(qū)位于連續(xù)的內(nèi)存頁面上,接口庫函數(shù)申請的內(nèi)存為共享內(nèi)存,因為在linux操作系統(tǒng)中,共享內(nèi)存位于連續(xù)的物理頁面上,具體操作為Bl)接口庫函數(shù)在用戶空間申請共享緩沖區(qū),并連接到共享緩沖區(qū);B2)接口庫函數(shù)把共享緩沖區(qū)的首地址通過ioctl系統(tǒng)調(diào)用命令傳給內(nèi)核驅(qū)動。B3)內(nèi)核驅(qū)動計算緩沖區(qū)隊列中每個緩沖區(qū)的物理地址,并將所述地址保存在一張物理地址表中以《更DMA使用;
3、 根據(jù)權(quán)利要求1所述的零拷貝方法,其特征在于所述步驟C中的緩沖區(qū)控制結(jié)構(gòu)包括緩沖區(qū)隊列,此隊列包括空閑隊列、接收緩沖區(qū)隊列、描述驅(qū)動工作模式的正常模式和直接拷貝模式,用于進程同步及互斥的變量等。
4、 根據(jù)權(quán)利要求1所述的零拷貝方法,其特征在于,所述步驟D的具體步驟為Dl )用戶接口庫函數(shù)從系統(tǒng)調(diào)用返回的數(shù)據(jù)結(jié)構(gòu)中獲得內(nèi)核驅(qū)動中構(gòu)造的緩沖區(qū)隊列控制結(jié)構(gòu)的物理地址;D2)用戶接口庫函數(shù)打開內(nèi)存設(shè)備文件;D3)用戶接口庫函數(shù)通過系統(tǒng)調(diào)用把內(nèi)核中的緩沖區(qū)控制結(jié)構(gòu)映射到自己的地址空間。
5、 根據(jù)權(quán)利要求1所述的零拷貝方法,其特征在于,所述步驟F的具體步驟為Fl )報文接口層提供的打開設(shè)備接口函數(shù)在用戶空間中新建報文指針隊列;F2 )報文接口庫的報文提取函數(shù)通過設(shè)備類型列表判斷各網(wǎng)卡的緩沖區(qū)中的結(jié)構(gòu),從而提取出報溫指針,放入報文指針隊列中。F3 )報文獲取接口函書從全局?jǐn)?shù)據(jù)結(jié)構(gòu)中得到報文指針隊列;F4)當(dāng)獲取報文接口被應(yīng)用程序調(diào)用時,報文接口層函數(shù)從接收報文指針隊列中取出 一報文,緩沖區(qū)接口層繼續(xù)從填滿報文的緩沖區(qū)中定位每個報文,以提取出報文首地址指針存入報文接口層的接收報文指針隊列。F5)當(dāng)報文被應(yīng)用程序使用完后即釋放才艮文接口被應(yīng)用程序調(diào)用時,報文接口層函數(shù)向釋放報文指針隊列中插入一報文,緩沖區(qū)接口層通過驅(qū)動把釋放了報文的緩沖區(qū)傳給相應(yīng)的網(wǎng)卡設(shè)備,等待網(wǎng)卡設(shè)備再次向緩沖區(qū)中寫入報文。
6、 根據(jù)權(quán)利要求1或5任一所述的零拷貝方法,其特征在于所述全局?jǐn)?shù)據(jù)結(jié)構(gòu)是在用戶空間申請一塊連續(xù)的內(nèi)存所構(gòu)建的,其成員包括接收報文指針隊列和釋放才艮文指針隊列。
全文摘要
本發(fā)明涉及零拷貝捕包方法,具體地說是一種可支持多類型網(wǎng)卡、實現(xiàn)鏈路聚合功能的零拷貝方法,所述零拷貝方法包括A緩沖區(qū)接口層函數(shù)打開設(shè)備接口;B在用戶空間緩沖區(qū);C構(gòu)造緩沖區(qū)隊列;D接口函數(shù)通過內(nèi)存映射得到緩沖區(qū)控制結(jié)構(gòu)的信息;E報文接口層函數(shù)打開設(shè)備接口;F為應(yīng)用新建報文指針隊列,從緩沖區(qū)中提取出報文指針放入報文指針隊列,應(yīng)用程序報文指針隊列中的報文數(shù)據(jù)進行處理。本發(fā)明采用分層結(jié)構(gòu),將現(xiàn)有的應(yīng)用接口層劃分為不關(guān)心具體設(shè)備緩沖區(qū)結(jié)構(gòu)的緩沖區(qū)接口層和根據(jù)設(shè)備類型從緩沖區(qū)提取報文的報文接口層,實現(xiàn)了同一臺機器上混合使用多種類型的網(wǎng)卡,并且方便了軟件的移植和擴展。
文檔編號G06F13/20GK101540720SQ200810114690
公開日2009年9月23日 申請日期2008年6月6日 優(yōu)先權(quán)日2008年6月6日
發(fā)明者劉朝輝, 軍 歷, 宇 曾, 華 聶 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
漳州市| 新巴尔虎右旗| 桃源县| 昭通市| 道真| 高雄市| 阜城县| 景宁| 张家口市| 凉城县| 柯坪县| 五峰| 伊金霍洛旗| 宜城市| 贞丰县| 永吉县| 牙克石市| 高密市| 汕尾市| 福清市| 吉安市| 上虞市| 鸡泽县| 望谟县| 北票市| 行唐县| 伊通| 凤冈县| 乳山市| 扎鲁特旗| 九龙坡区| 温州市| 闻喜县| 同仁县| 康保县| 东丽区| 平湖市| 眉山市| 镇沅| 太仆寺旗| 诸暨市|