專利名稱:用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送和接收的處理方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,尤其涉及一種用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送和接收
的處理方法和裝置。
背景技術(shù):
相關(guān)技術(shù)中公開了一種零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的管理方法,屬于網(wǎng)絡(luò)數(shù) 據(jù)零拷貝的數(shù)據(jù)緩沖區(qū)隊列的管理方法領(lǐng)域。該技術(shù)方案包括如下操作步驟A、在用戶空 間分配連續(xù)的內(nèi)存作為報文的DMA緩沖區(qū);B、在內(nèi)核驅(qū)動中建立緩沖區(qū)的控制句柄;C、應(yīng) 用程序通過接口庫映射控制句柄,實現(xiàn)對緩沖區(qū)的操作;D、發(fā)送報文時,驅(qū)動把滿緩沖區(qū)的 物理地址寫入網(wǎng)卡,應(yīng)用從滿緩沖區(qū)隊列取出一個填充了報文的緩沖區(qū),發(fā)送報文內(nèi)容后 把緩沖區(qū)放入空緩沖區(qū)隊列。
該技術(shù)存在以下問題 (1)網(wǎng)卡驅(qū)動程序使用緩沖區(qū)描述符進(jìn)行報文發(fā)送時DMA操作的效率很低;
(2)需要采用中斷作為驅(qū)動程序與網(wǎng)卡硬件之間的通訊方式;
(3)發(fā)送的數(shù)據(jù)報文不是連續(xù)存儲在報文DMA緩沖區(qū)中的,而是按照頁面大小,比 如4K字節(jié),分別對發(fā)送的數(shù)據(jù)報文進(jìn)行存儲。 上述問題的根本原因是,在用戶空間申請的連續(xù)內(nèi)存空間可能在內(nèi)核空間并不是 連續(xù)的內(nèi)存地址。這樣,它需要將用戶空間內(nèi)存地址按頁面大小轉(zhuǎn)換成DMA操作所需的物 理地址。而且,網(wǎng)卡硬件在做DMA操作時,數(shù)據(jù)報文長度限制在頁面大小范圍內(nèi),比如4K字 節(jié)。驅(qū)動程序也需要使用中斷方式與網(wǎng)卡硬件通訊,獲得網(wǎng)卡進(jìn)行報文傳輸后的硬件狀態(tài), 為后續(xù)的報文發(fā)送準(zhǔn)備報文DMA緩沖區(qū)。
發(fā)明內(nèi)容
針對相關(guān)技術(shù)中存在的一個或多個問題,本發(fā)明的目的在于提供一種用于零拷貝 緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送和接收的處理方法和裝置,以解決上述問題中的至少之一。
為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種用于零拷貝緩沖區(qū)隊列網(wǎng) 絡(luò)數(shù)據(jù)發(fā)送的處理方法,該方法包括在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用 于報文發(fā)送的緩沖區(qū)隊列;將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將物理地址和 內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針 寄存器和寫指針寄存器,在發(fā)送報文時,根據(jù)所要發(fā)送的報文、物理地址以及內(nèi)存的大小更 新讀指針寄存器和寫指針寄存器。 為實現(xiàn)上述目的,根據(jù)本發(fā)明的另一個方面,提供了一種用于零拷貝緩沖區(qū)隊列 網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理裝置,其特征在于,裝置包括內(nèi)存申請單元,用于在網(wǎng)卡驅(qū)動程序中 申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文發(fā)送的緩沖區(qū)隊列;轉(zhuǎn)換單元,用于將所申請的連 續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將物理地址和內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及寄存器設(shè)置和更新單元,用于在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫 指針寄存器,在發(fā)送報文時,根據(jù)所要發(fā)送的報文、物理地址以及內(nèi)存的大小更新讀指針寄 存器和寫指針寄存器。 為實現(xiàn)上述目的,根據(jù)本發(fā)明的再一個方面,提供了一種用于零拷貝緩沖區(qū)隊列 網(wǎng)絡(luò)數(shù)據(jù)接收的處理方法,該方法包括在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為 用于報文接收的緩沖區(qū)隊列;將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將物理地址 和內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指 針寄存器和寫指針寄存器,在接收報文時,根據(jù)所接收的報文、物理地址和內(nèi)存的大小更新 讀指針寄存器和寫指針寄存器。 為實現(xiàn)上述目的,根據(jù)本發(fā)明的又一個方面,提供了一種用于零拷貝緩沖區(qū)隊列 網(wǎng)絡(luò)數(shù)據(jù)接收的處理裝置,包括內(nèi)存申請單元,用于在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連 續(xù)內(nèi)存作為用于報文接收的緩沖區(qū)隊列;轉(zhuǎn)換單元,用于將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn) 換為物理地址并將物理地址和內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;寄存器設(shè)置和更新單 元,用于在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存器,并且在接 收報文時,根據(jù)所接收的報文、物理地址和內(nèi)存的大小更新讀指針寄存器和寫指針寄存器。
借助本發(fā)明上述至少一個技術(shù)方案,通過將所申請的內(nèi)存的首地址轉(zhuǎn)換成物理地 址存儲到相關(guān)寄存器中,并在發(fā)送和接收報文時及時地更新相關(guān)寄存器中的指針位置,這 樣不需要采用中斷方式通知驅(qū)動程序數(shù)據(jù)報文發(fā)送和接收情況,并且不占用CPU資源,也 不需要將用戶空間內(nèi)存地址按頁面大小轉(zhuǎn)換成DMA操作所需的物理地址,并且網(wǎng)卡硬件在 做DMA操作及發(fā)送和接收的數(shù)據(jù)報文在存儲時,不受頁面大小限制,比如4K字節(jié),不需要使 用緩沖區(qū)描述符進(jìn)行緩沖區(qū)隊列的管理。
圖1是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理方法的流程以及 圖2是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理裝置的框圖; 圖3是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理方法的流程圖; 以及 圖4是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理裝置的框圖。
具體實施方式
功能概述 考慮到相關(guān)技術(shù)中存在的的問題,本發(fā)明提出用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā) 送和接收的處理方法和裝置,通過申請連續(xù)的內(nèi)存作為發(fā)送或接收報文的緩沖區(qū)隊列,將 所申請的內(nèi)存的首地址轉(zhuǎn)換成物理地址存儲到相關(guān)寄存器中,并在發(fā)送或接收報文時及時 地更新相關(guān)寄存器中的指針位置,這樣不需要采用中斷方式通知驅(qū)動程序數(shù)據(jù)報文發(fā)送或 接收情況,并且不占用CPU資源,也不需要將用戶空間內(nèi)存地址按頁面大小轉(zhuǎn)換成DMA操作 所需的物理地址,并且網(wǎng)卡硬件在做DMA操作及發(fā)送和接收的數(shù)據(jù)報文在存儲時,不受頁 面大小限制,比如4K字節(jié),不需要使用緩沖區(qū)描述符進(jìn)行緩沖區(qū)隊列的管理。
圖1是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理方法的流程圖。
如圖1所示,根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理方法包括 以下步驟 步驟S102,在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文發(fā)送的緩沖 區(qū)隊列; 步驟S104,將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將物理地址和內(nèi)存的 大小存儲到網(wǎng)卡相關(guān)寄存器中;以及 步驟S106,在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存 器,在發(fā)送報文時,根據(jù)所要發(fā)送的報文、物理地址以及內(nèi)存的大小更新讀指針寄存器和寫 指針寄存器。 其中,可以通過配置文件指定所申請的連續(xù)內(nèi)存的大小,也可以在驅(qū)動程序進(jìn)行 加載時通過參數(shù)指定所申請的連續(xù)內(nèi)存的大小。內(nèi)存的大小需要根據(jù)計算機的內(nèi)存大小確 定,例如32MB,64MB等。網(wǎng)卡相關(guān)寄存器可以為發(fā)送緩沖區(qū)首地址配置寄存器,其可以是64 位大小的。網(wǎng)卡寄存器本身就是一個存儲32位數(shù)的內(nèi)存空間。 在發(fā)送報文時,可以通過應(yīng)用程序更新寫指針寄存器,并且可以通過網(wǎng)卡更新讀 指針寄存器。 在應(yīng)用程序發(fā)送報文時,將讀指針寄存器和寫指針寄存器進(jìn)行比較,如果寫指針 寄存器的數(shù)值加上數(shù)據(jù)報文的長度不等于讀指針寄存器的數(shù)值,則將報文存儲在緩沖區(qū)中 的寫指針寄存器的數(shù)值所在的偏移地址上,并將寫指針寄存器的數(shù)值加上報文的總長度后 寫到寫指針寄存器中。 在網(wǎng)卡發(fā)送報文時,將讀指針寄存器和寫指針寄存器進(jìn)行比較,如果讀指針寄存 器的數(shù)值不等于寫指針寄存器的數(shù)值,則將緩沖區(qū)隊列中讀指針寄存器的數(shù)值所在的偏移 地址作為報文頭進(jìn)行報文發(fā)送操作,并將讀指針寄存器的數(shù)值加上報文的總長度之后寫到 讀指針寄存器中。 圖2是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理裝置的框圖。 如圖2所示,根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理裝置包
括內(nèi)存申請單元202,用于在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文發(fā)
送的緩沖區(qū)隊列;轉(zhuǎn)換單元204,用于將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將
物理地址和內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及寄存器設(shè)置和更新單元206,用于
在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存器,在發(fā)送報文時,根
據(jù)所要發(fā)送的報文、物理地址以及內(nèi)存的大小更新讀指針寄存器和寫指針寄存器。 其中,可以通過配置文件指定所申請的連續(xù)內(nèi)存的大小,也可以在驅(qū)動程序進(jìn)行
加載時通過參數(shù)指定所申請的連續(xù)內(nèi)存的大小。 在應(yīng)用程序發(fā)送報文時,寄存器設(shè)置和更新單元將讀指針寄存器和寫指針寄存器 進(jìn)行比較,如果寫指針寄存器的數(shù)值加上數(shù)據(jù)報文長度不等于讀指針寄存器的數(shù)值,則將 報文存儲在緩沖區(qū)中的寫指針寄存器的數(shù)值所在的偏移地址上,并將寫指針寄存器的數(shù)值 加上報文的總長度后寫到寫指針寄存器中。 在網(wǎng)卡發(fā)送報文時,寄存器設(shè)置和更新單元將讀指針寄存器和寫指針寄存器進(jìn)行 比較,如果讀指針寄存器的數(shù)值不等于寫指針寄存器的數(shù)值,則將緩沖區(qū)隊列中讀指針寄存器的數(shù)值所在的偏移地址作為報文頭進(jìn)行報文發(fā)送操作,并將讀指針寄存器的數(shù)值加上 報文的總長度之后寫到讀指針寄存器中。 圖3是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理方法的流程圖。
如圖3所示,根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理方法包括 以下步驟 步驟S302,在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文接收的緩沖 區(qū)隊列; 步驟S304,將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將物理地址和內(nèi)存的 大小存儲到網(wǎng)卡相關(guān)寄存器中;以及 步驟S306,在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存 器,在接收報文時,根據(jù)所接收的報文、物理地址和內(nèi)存的大小更新讀指針寄存器和寫指針
寄存器。 其中,可以通過配置文件指定所申請的連續(xù)內(nèi)存的大小,也可以在驅(qū)動程序進(jìn)行 加載時通過參數(shù)指定所申請的連續(xù)內(nèi)存的大小。大小需要根據(jù)計算機的內(nèi)存大小確定,例 如32MB,64MB等。網(wǎng)卡寄存器本身可以是一個存儲32位數(shù)的內(nèi)存空間。其中,網(wǎng)卡相關(guān)寄 存器可以為接收緩沖區(qū)首地址配置寄存器,接收緩沖區(qū)首地址配置寄存器可以是64位大 小的。 在驅(qū)動程序與用戶運行的應(yīng)用程序之間,存在一個應(yīng)用程序可以調(diào)用的函數(shù)接口
庫。函數(shù)接口庫的目的是方便用戶應(yīng)用程序的編寫及屏蔽驅(qū)動程序及網(wǎng)卡設(shè)備的內(nèi)部實
現(xiàn)。因此,可以通過應(yīng)用程序更新讀指針寄存器,并且通過網(wǎng)卡更新寫指針寄存器。 在應(yīng)用程序接收報文時,將讀指針寄存器和寫指針寄存器進(jìn)行比較,如果讀指針
寄存器的數(shù)值不等于寫指針寄存器的數(shù)值,則將緩沖區(qū)隊列中讀指針寄存器的數(shù)值所在的
偏移地址作為報文頭返回給應(yīng)用程序。 在網(wǎng)卡接收報文時,將讀指針寄存器和寫指針寄存器進(jìn)行比較,如果寫指針寄存 器的數(shù)值加上數(shù)據(jù)報文長度不等于讀指針寄存器,則將報文存儲在緩沖區(qū)中的寫指針寄存 器的數(shù)值所在的偏移地址上,并將寫指針寄存器的數(shù)值加上報文的總長度后寫到寫指針寄 存器中。 圖4是根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理裝置的框圖。
如圖4所示,根據(jù)本發(fā)明的用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理裝置包 括內(nèi)存申請單元402,用于在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文接 收的緩沖區(qū)隊列;轉(zhuǎn)換單元404,用于將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將 物理地址和內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;寄存器設(shè)置和更新單元406,用于在網(wǎng) 卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存器,并且在接收報文時,根 據(jù)所接收的報文、物理地址和內(nèi)存的大小更新讀指針寄存器和寫指針寄存器。
其中,內(nèi)存申請單元可以通過配置文件指定所申請的連續(xù)內(nèi)存的大小,也可以通 過在驅(qū)動程序進(jìn)行加載時利用參數(shù)指定所申請的連續(xù)內(nèi)存的大小。大小需要根據(jù)計算機的 內(nèi)存大小確定,例如32MB,64MB等。網(wǎng)卡寄存器本身可以是一個存儲32位數(shù)的內(nèi)存空間。 其中,網(wǎng)卡相關(guān)寄存器可以為接收緩沖區(qū)首地址配置寄存器,接收緩沖區(qū)首地址配置寄存 器可以是64位大小的。
在應(yīng)用程序接收報文時,寄存器設(shè)置和更新單元將讀指針寄存器和寫指針寄存器 進(jìn)行比較,如果讀指針寄存器的數(shù)值不等于寫指針寄存器的數(shù)值,則將緩沖區(qū)隊列中讀指 針寄存器的數(shù)值所在的偏移地址作為報文頭返回給應(yīng)用程序。 在網(wǎng)卡接收報文時,寄存器設(shè)置和更新單元將讀指針寄存器和寫指針寄存器進(jìn)行 比較,如果寫指針寄存器的數(shù)值加上數(shù)據(jù)報文長度不等于讀指針寄存器,則將報文存儲在 緩沖區(qū)中的寫指針寄存器的數(shù)值所在的偏移地址上,并將寫指針寄存器的數(shù)值加上報文的 總長度后寫到寫指針寄存器中。 綜上所述,借助本發(fā)明上述至少一個技術(shù)方案,通過申請連續(xù)的內(nèi)存作為發(fā)送或 接收報文的緩沖區(qū)隊列,將所申請的內(nèi)存的首地址轉(zhuǎn)換成物理地址存儲到相關(guān)寄存器中, 并在發(fā)送或接收報文時及時地更新相關(guān)寄存器中的指針位置,能夠?qū)崿F(xiàn)以下技術(shù)效果
(1)網(wǎng)卡不需要采用中斷方式通知驅(qū)動程序數(shù)據(jù)報文發(fā)送或接收完成情況,不占 用CPU資源; (2)不需要將用戶空間內(nèi)存地址按頁面大小轉(zhuǎn)換成DMA操作所需的物理地址;
(3)網(wǎng)卡硬件在做DMA操作及發(fā)送的數(shù)據(jù)報文在存儲時,不受頁面大小限制,比如 4K字節(jié); (4)不需要使用緩沖區(qū)描述符進(jìn)行緩沖區(qū)隊列的管理。 顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用 的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲 在存儲裝置中由計算裝置來執(zhí)行,或者將它們分別制作成各個集成電路模塊,或者將它們 中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的 硬件和軟件結(jié)合。 以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技 術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
8
權(quán)利要求
一種用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理方法,其特征在于,包括在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文發(fā)送的緩沖區(qū)隊列;將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將所述物理地址和所述內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存器,在發(fā)送報文時,根據(jù)所要發(fā)送的報文、所述物理地址以及所述內(nèi)存的大小更新所述讀指針寄存器和所述寫指針寄存器。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,通過配置文件指定所申請的連續(xù)內(nèi)存的 大小,或在驅(qū)動程序進(jìn)行加載時通過參數(shù)指定所申請的連續(xù)內(nèi)存的大小。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在發(fā)送報文時,通過應(yīng)用程序更新寫指針 寄存器,并且通過網(wǎng)卡更新讀指針寄存器,在應(yīng)用程序發(fā)送報文時,將所述讀指針寄存器和所述寫指針寄存器進(jìn)行比較,如果所 述寫指針寄存器的數(shù)值加上數(shù)據(jù)報文長度不等于所述讀指針寄存器的數(shù)值,則將所述報文 存儲在所述緩沖區(qū)中的所述寫指針寄存器的數(shù)值所在的偏移地址上,并將所述寫指針寄存 器的數(shù)值加上報文的總長度后寫到所述寫指針寄存器中;在所述網(wǎng)卡發(fā)送報文時,將所述讀指針寄存器和所述寫指針寄存器進(jìn)行比較,如果所 述讀指針寄存器的數(shù)值不等于所述寫指針寄存器的數(shù)值,則將所述緩沖區(qū)隊列中所述讀指 針寄存器的數(shù)值所在的偏移地址作為報文頭進(jìn)行報文發(fā)送操作,并將所述讀指針寄存器的 數(shù)值加上報文的總長度之后寫到所述讀指針寄存器中。
4. 一種用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送的處理裝置,其特征在于,所述裝置包括內(nèi)存申請單元,用于在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文發(fā)送的 緩沖區(qū)隊列;轉(zhuǎn)換單元,用于將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將所述物理地址和所 述內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及寄存器設(shè)置和更新單元,用于在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和 寫指針寄存器,在發(fā)送報文時,根據(jù)所要發(fā)送的報文、所述物理地址以及所述內(nèi)存的大小更 新所述讀指針寄存器和所述寫指針寄存器。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,通過配置文件指定所申請的連續(xù)內(nèi)存的 大小,或在驅(qū)動程序進(jìn)行加載時通過參數(shù)指定所申請的連續(xù)內(nèi)存的大小。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于在應(yīng)用程序發(fā)送報文時,寄存器設(shè)置和更新單元將所述讀指針寄存器和所述寫指針 寄存器進(jìn)行比較,如果所述寫指針寄存器的數(shù)值加上數(shù)據(jù)報文長度不等于所述讀指針寄存 器的數(shù)值,則將所述報文存儲在所述緩沖區(qū)中的所述寫指針寄存器的數(shù)值所在的偏移地址 上,并將所述寫指針寄存器的數(shù)值加上報文的總長度后寫到所述寫指針寄存器中;以及在所述網(wǎng)卡發(fā)送報文時,寄存器設(shè)置和更新單元將所述讀指針寄存器和所述寫指針寄 存器進(jìn)行比較,如果所述讀指針寄存器的數(shù)值不等于所述寫指針寄存器的數(shù)值,則將所述 緩沖區(qū)隊列中所述讀指針寄存器的數(shù)值所在的偏移地址作為報文頭進(jìn)行報文發(fā)送操作,并 將所述讀指針寄存器的數(shù)值加上報文的總長度之后寫到所述讀指針寄存器中。
7. —種用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理方法,其特征在于,包括 在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文接收的緩沖區(qū)隊列; 將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將所述物理地址和所述內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及在所述網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存器,并且在接 收報文時,根據(jù)所接收的報文、所述物理地址和所述內(nèi)存的大小更新所述讀指針寄存器和 所述寫指針寄存器。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,通過配置文件指定所申請的連續(xù)內(nèi)存的 大小,或在驅(qū)動程序進(jìn)行加載時通過參數(shù)指定所申請的連續(xù)內(nèi)存的大小。
9. 根據(jù)權(quán)利要求7所述的方法,其特征在于,在接收報文時,通過應(yīng)用程序更新讀指針 寄存器,并且通過網(wǎng)卡更新寫指針寄存器,在所述應(yīng)用程序接收報文時,將所述讀指針寄存器和所述寫指針寄存器進(jìn)行比較,如 果所述讀指針寄存器的數(shù)值不等于所述寫指針寄存器的數(shù)值,則將所述緩沖區(qū)隊列中所述 讀指針寄存器的數(shù)值所在的偏移地址作為報文頭返回給應(yīng)用程序;在所述網(wǎng)卡接收報文時,將所述讀指針寄存器和所述寫指針寄存器進(jìn)行比較,如果所 述寫指針寄存器的數(shù)值加上數(shù)據(jù)報文長度不等于所述讀指針寄存器,則將所述報文存儲在 所述緩沖區(qū)中的所述寫指針寄存器的數(shù)值所在的偏移地址上,并將所述寫指針寄存器的數(shù) 值加上報文的總長度后寫到所述寫指針寄存器中。
10. —種用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)接收的處理裝置,其特征在于,包括 內(nèi)存申請單元,用于在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文接收的緩沖區(qū)隊列;轉(zhuǎn)換單元,用于將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將所述物理地址和所 述內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;寄存器設(shè)置和更新單元,在所述網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和 寫指針寄存器,并且在接收報文時,根據(jù)所接收的報文、所述物理地址和所述內(nèi)存的大小更 新所述讀指針寄存器和所述寫指針寄存器。
11. 根據(jù)權(quán)利要求io所述的裝置,其特征在于,所述內(nèi)存申請單元通過配置文件指定所申請的連續(xù)內(nèi)存的大小,或所述內(nèi)存申請單元通過在驅(qū)動程序進(jìn)行加載時利用參數(shù)指定 所申請的連續(xù)內(nèi)存的大小。
12. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,在應(yīng)用程序接收報文時,所述寄存器設(shè) 置和更新單元將所述讀指針寄存器和所述寫指針寄存器進(jìn)行比較,如果所述讀指針寄存器 的數(shù)值不等于所述寫指針寄存器的數(shù)值,則將所述緩沖區(qū)隊列中所述讀指針寄存器的數(shù)值 所在的偏移地址作為報文頭返回給應(yīng)用程序;以及在所述網(wǎng)卡接收報文時,所述寄存器設(shè)置和更新單元將所述讀指針寄存器和所述寫指 針寄存器進(jìn)行比較,如果所述寫指針寄存器的數(shù)值加上數(shù)據(jù)報文長度不等于所述讀指針寄 存器,則將所述報文存儲在所述緩沖區(qū)中的所述寫指針寄存器的數(shù)值所在的偏移地址上, 并將所述寫指針寄存器的數(shù)值加上報文的總長度后寫到所述寫指針寄存器中。
全文摘要
本發(fā)明提供一種用于零拷貝緩沖區(qū)隊列網(wǎng)絡(luò)數(shù)據(jù)發(fā)送和接收的處理方法和裝置,其中,該數(shù)據(jù)發(fā)送的處理方法包括在網(wǎng)卡驅(qū)動程序中申請預(yù)定大小的連續(xù)內(nèi)存作為用于報文發(fā)送的緩沖區(qū)隊列;將所申請的連續(xù)內(nèi)存的首地址轉(zhuǎn)換為物理地址并將物理地址和內(nèi)存的大小存儲到網(wǎng)卡相關(guān)寄存器中;以及在網(wǎng)卡寄存器中設(shè)置用于緩沖區(qū)隊列的讀指針寄存器和寫指針寄存器,在發(fā)送報文時,根據(jù)所要發(fā)送的報文、物理地址以及內(nèi)存的大小更新讀指針寄存器和寫指針寄存器。
文檔編號H04L12/56GK101707564SQ20091024209
公開日2010年5月12日 申請日期2009年12月4日 優(yōu)先權(quán)日2009年12月4日
發(fā)明者歷軍, 李永成, 聶華, 邵宗有 申請人:曙光信息產(chǎn)業(yè)(北京)有限公司