專利名稱:一種網(wǎng)絡(luò)包處理的方法、裝置和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種網(wǎng)絡(luò)包處理的方法、裝置和系統(tǒng)。
背景技術(shù):
隨著網(wǎng)絡(luò)服務(wù)和應(yīng)用的多樣化,網(wǎng)絡(luò)包處理的方法也呈現(xiàn)多樣化。傳統(tǒng)的利用CPU (Central Processing Unit,中央處理器)處理網(wǎng)絡(luò)包的方法已經(jīng)不能滿足網(wǎng)絡(luò)傳輸速度的需求。與此同時,GPU(Graphics Processing Unit,圖形處理器)正在以超過摩爾定律的速度高速發(fā)展,浮點(diǎn)運(yùn)算能力遠(yuǎn)遠(yuǎn)超過CPU,同時GPU訪問顯存的帶寬也超過CPU訪問內(nèi)存的帶寬,不僅在速度方面大大提高,且具有流處理、高密度并行運(yùn)算、可編程流水線等特性,軟件層面上利用GPU進(jìn)行通用計(jì)算的平臺也日益成熟,尤其是提出面向異構(gòu)系統(tǒng)并行編程的開放式統(tǒng)一標(biāo)準(zhǔn)OpenCL (Open Computing Language,開放運(yùn)算語言),大大簡化了編程難度和開發(fā)工作量。正是由于GPU具有高效的并行性和靈活的可編程性,基于GPU的網(wǎng)絡(luò)包處理的方法成為人們研究的熱點(diǎn)。現(xiàn)有技術(shù)中存在一種基于CPU+GPU異構(gòu)系統(tǒng)來處理網(wǎng)絡(luò)包的方案,具體如下:網(wǎng)絡(luò)包由多個網(wǎng)絡(luò)協(xié)議任務(wù)構(gòu)成,當(dāng)內(nèi)核中有需要GPU處理的任務(wù),創(chuàng)建GPU任務(wù)請求放入CPU內(nèi)存的請求隊(duì)列中,接著CPU的用戶態(tài)程序讀取所述請求隊(duì)列中的GPU任務(wù)請求,然后調(diào)度GPU線程將所述GPU任務(wù)請求所請求的任務(wù)從內(nèi)存拷貝到顯存報文緩存區(qū),在所述GPU完成相應(yīng)的任務(wù)后,將執(zhí)行結(jié)果從GPU的顯存拷貝到CPU內(nèi)存的響應(yīng)隊(duì)列中,通知內(nèi)核繼續(xù)處理。該方案雖然可以加速內(nèi)核中的網(wǎng)絡(luò)協(xié)議任務(wù),如路由查找、SSL (Secure SocketsLayer,安全套接層)、IPSec (Internet Protocol Security,網(wǎng)絡(luò)協(xié)議安全性)、DPI (DeepPacket Inspection,深度包檢測)、加密文件系統(tǒng)、重復(fù)數(shù)據(jù)塊查找等任務(wù),但是整個過程系統(tǒng)的響應(yīng)時間較長,導(dǎo)致網(wǎng)絡(luò)包處理的效率較低,并且整個過程消耗資源較多。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供一種網(wǎng)絡(luò)包處理的方法、裝置和系統(tǒng),能夠減少系統(tǒng)的響應(yīng)時間,節(jié)省系統(tǒng)資源,提高網(wǎng)絡(luò)包處理的效率。為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:第一方面,提供一種網(wǎng)絡(luò)包處理的方法,所述方法包括:接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中;根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中;
發(fā)送第一指示消息,以使通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。第二方面,提供一種網(wǎng)絡(luò)包處理的方法,所述方法包括:接收第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在圖形處理器GPU的顯存中的物理地址;根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息;根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù);判斷所述任務(wù)是否為所述GPU所支持的任務(wù);若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù);若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行所述任務(wù)。在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第二方面,所述判斷所述任務(wù)是否為所述GPU所支持的任務(wù),具體包括:確定所述任務(wù)是否為讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù);若所述任務(wù)是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)是所述GPU所支持的任務(wù);若所述任務(wù)不是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)不是所述GPU所支持的任務(wù)。在第二種可能的實(shí)現(xiàn)方式中,根據(jù)第二方面或第一種可能的實(shí)現(xiàn)方式,若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù)具體包括:將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列;若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù);獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第二種可能的實(shí)現(xiàn)方式,所述第一條件具體為所述任務(wù)隊(duì)列滿;或所述第一條件具體為所述任務(wù)隊(duì)列的定時器超時。第三方面,提供一種網(wǎng)絡(luò)包處理的裝置,所述裝置包括接收單元、存儲單元、確定單元、控制單元、發(fā)送單元;所述接收單元,用于接收網(wǎng)絡(luò)包;所述存儲單元,用于將所述網(wǎng)絡(luò)包緩存在內(nèi)存緩沖區(qū)的第一地址中;所述確定單元,用于根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;所述控制單元,用于控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中;
所述發(fā)送單元,用于發(fā)送第一指示消息,以使得通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。第四方面,提供一種網(wǎng)絡(luò)包處理的裝置,所述裝置包括接收單元、讀取單元、確定單元、判斷單元、控制單元、執(zhí)行單元;所述接收單元,用于接收第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在圖形處理器GPU的顯存中的物理地址;所述讀取單元,用于根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息;所述確定單元,用于根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù);所述判斷單元,用于判斷所述任務(wù)是否為所述GPU所支持的任務(wù);所述控制單元,用于若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù);所述執(zhí)行單元,用于若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行所述任務(wù)。在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第四方面,所述判斷單元判斷所述任務(wù)是否為所述GPU所支持的任務(wù),具體包括:確定所述任務(wù)是否為需要讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù);若所述任務(wù)是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)是所述GPU所支持的任務(wù);若所述任務(wù)不是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)不是所述GPU所支持的任務(wù)。在第二種可能的實(shí)現(xiàn)方式中,根據(jù)第四方面或第一種可能的實(shí)現(xiàn)方式,若所述任務(wù)是所述GPU所支持的任務(wù),所述控制單元控制所述GPU執(zhí)行所述任務(wù)具體包括:將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列;若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù);獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第二種可能的實(shí)現(xiàn)方式,所述第一條件具體為所述任務(wù)隊(duì)列滿;或所述第一條件具體為所述任務(wù)隊(duì)列的定時器超時。第五方面,提供了一種網(wǎng)絡(luò)包處理的系統(tǒng),所述系統(tǒng)包括網(wǎng)卡、中央處理器CPU、顯卡、內(nèi)存、直接內(nèi)存訪問DMA控制器、芯片組、PCIe總線,其中,所述顯卡包括圖像處理器GPU和顯存,所述網(wǎng)卡和所述顯卡連接到同一個PCIe總線,通過芯片組和CPU通信,包括:網(wǎng)卡接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中;網(wǎng)卡根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;網(wǎng)卡控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中;網(wǎng)卡發(fā)送第一指示消息給中央處理器CPU,以使所述CPU根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;CPU接收所述網(wǎng)卡發(fā)送的所述第一指示消息;CPU根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息;CPU根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù);CPU判斷所述任務(wù)是否為所述GPU所支持的任務(wù);若所述任務(wù)是所述GPU所支持的任務(wù),CPU控制所述GPU執(zhí)行所述任務(wù);若所述任務(wù)不是所述GPU所支持的任務(wù),CPU執(zhí)行所述任務(wù)本發(fā)明實(shí)施例基于上述方案,利用統(tǒng)一虛擬地址空間UVA技術(shù)和圖形處理器GPU直連技術(shù)實(shí)現(xiàn)網(wǎng)卡和GPU的顯存的直通,可以將網(wǎng)絡(luò)包從網(wǎng)卡直接寫入GPU的顯存,減少了GPU處理網(wǎng)絡(luò)協(xié)議任務(wù)時數(shù)據(jù)的拷貝次數(shù),節(jié)省了系統(tǒng)資源,提高了網(wǎng)絡(luò)包處理的效率,同時避免了將網(wǎng)絡(luò)包寫入內(nèi)存時通過系統(tǒng)的橋接芯片組所帶來的系統(tǒng)延時,在一定程度上降低了網(wǎng)卡的丟包率。
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)包處理的方法;圖2為本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)包處理的方法;圖3為本發(fā)明實(shí)施例提供的一種網(wǎng)絡(luò)包處理的系統(tǒng);圖4為本發(fā)明實(shí)施例提供的又一種網(wǎng)絡(luò)包處理的方法;圖5為本發(fā)明實(shí)施例提供的又一種網(wǎng)絡(luò)包處理的方法;圖6為本發(fā)明實(shí)施例提供的一種CPU的模塊框架圖;圖7為本發(fā)明實(shí)施例提供的一種網(wǎng)絡(luò)包處理的裝置;圖8為本發(fā)明實(shí)施例提供的另一種網(wǎng)絡(luò)包處理的裝置。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。實(shí)施例一、本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的方法,具體如圖1所示,所述方法包括:101、接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中。需要說明的是,所述第一地址中的“第一”不具有任何特殊的含義,僅說明是內(nèi)存緩沖區(qū)中的一個具體的地址。102、根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。
具體的,本發(fā)明實(shí)施例基于統(tǒng)一虛擬地址空間UVA(Unified virtualaddressing,統(tǒng)一虛擬地址空間)技術(shù),將內(nèi)存資源和顯卡上的顯存資源當(dāng)做一塊統(tǒng)一的存儲器池,存儲器地址統(tǒng)一編碼,操作系統(tǒng)可像訪問內(nèi)存般對顯存讀寫。所以所述網(wǎng)絡(luò)包處理的裝置中存儲了內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,在接收到網(wǎng)絡(luò)包后,可以根據(jù)緩存所述網(wǎng)絡(luò)數(shù)據(jù)包的第一地址,通過查找預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。需要說明的是,所述網(wǎng)絡(luò)包處理的裝置具體可以是網(wǎng)卡,本發(fā)明實(shí)施例對此不作具體限定。需要說明的是,所述GPU的顯存實(shí)質(zhì)上是指顯卡上與GPU相連接的顯存,而并非GPU內(nèi)部包含的顯存。因?yàn)槊總€GPU都有與其連接的顯存,所以可以稱與GPU相連接的顯存為“GPU的顯存”。103、控制直接內(nèi)存訪問DMA (Direct Memory Access,直接內(nèi)存訪問)控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中。具體的,本發(fā)明還利用GPU直連技術(shù),允許其他PCIe (Peripheral ComponentInterconnect Express,高速外設(shè)元件互聯(lián)方式,一種最新的總線和接口標(biāo)準(zhǔn))設(shè)備,如網(wǎng)絡(luò)適配器、固態(tài)硬盤等通過DMA直接讀寫顯存,就像以前通過DMA直接讀寫內(nèi)存一樣。所以,所述網(wǎng)絡(luò)包處理的裝置可以控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中。正是基于所述UVA技術(shù)和所述GPU直連技術(shù),所述網(wǎng)絡(luò)包處理的裝置在接收到網(wǎng)絡(luò)包后,才最終將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中,實(shí)現(xiàn)所述網(wǎng)絡(luò)包處理的裝置和GPU的顯存的直通。104、發(fā)送第一指示消息,以使通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。具體的,在所述控制所述DMA將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中后,可能會產(chǎn)生硬中斷通知通信對端處理所述數(shù)據(jù)包,即發(fā)送第一指示消息給所述通信對端,所述第一指示消息指示所述CPU處理所述數(shù)據(jù)包。具體的,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。本發(fā)明實(shí)施例還提供一種網(wǎng)絡(luò)包處理的方法,具體如圖2所示,所述方法包括:201、接收第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在圖形處理器GPU的顯存中的物理地址。202、根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。具體的,所述第一指示消息可能由通信對端的硬中斷產(chǎn)生,所述網(wǎng)絡(luò)包處理的裝置在接收到所述第一指示消息后,可能會產(chǎn)生軟中斷啟動對網(wǎng)絡(luò)包的處理,然后從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息,也可能是直接根據(jù)所述第一指示消息攜帶的所述物理地址,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息,本發(fā)明實(shí)施例對此不作具體限定,僅說明在接收第一指示消息后,還從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。具體的,因?yàn)榇嬖谌鐖D1所示的實(shí)施例,在接收到網(wǎng)絡(luò)包后,將所述網(wǎng)絡(luò)包寫入所述GPU的顯存中的物理地址中,故本發(fā)明實(shí)施例中,在所述數(shù)據(jù)包處理的裝置接收到第一指示消息后,可以直接從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。具體的,本發(fā)明實(shí)施例中,所述網(wǎng)絡(luò)包處理的裝置具體可以為中央處理器CPU,本發(fā)明實(shí)施例對此不作具體限定。203、根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù)。具體的,所述網(wǎng)絡(luò)包的包頭信息指示了當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù),因此可以根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對網(wǎng)絡(luò)包執(zhí)行的任務(wù)。204、判斷所述任務(wù)是否為所述GPU所支持的任務(wù)。具體的,因?yàn)樗鯣PU的浮點(diǎn)運(yùn)算能力遠(yuǎn)遠(yuǎn)超過CPU,同時GPU訪問顯存的帶寬也超過CPU訪問內(nèi)存的帶寬,不僅在速度方面大大提高,且具有流處理、高密度并行運(yùn)算、可編程流水線等特性,所以對于計(jì)算量大的網(wǎng)絡(luò)協(xié)議任務(wù),可以確定是所述GPU所支持的任務(wù),由GPU處理;而對于計(jì)算量小的網(wǎng)絡(luò)協(xié)議任務(wù),可以確定不是所述GPU所支持的任務(wù),可由所述網(wǎng)絡(luò)包處理的裝置處理。具體的,一般將需要讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù)視為計(jì)算量大的網(wǎng)絡(luò)協(xié)議任務(wù),比如網(wǎng)絡(luò)層的IPSec加/解密任務(wù)、傳輸層的SSL加/解密任務(wù)、應(yīng)用層的DPI深度包檢測任務(wù);而對于僅需讀取包頭數(shù)據(jù)的輕量級協(xié)議的任務(wù),可視為計(jì)算量小的網(wǎng)絡(luò)協(xié)議任務(wù)。本發(fā)明實(shí)施例對如何判斷所述任務(wù)是否為所述GPU所支持的任務(wù)不作具體限定,僅說明因?yàn)樗鋈蝿?wù)可以通過所述網(wǎng)絡(luò)包處理的裝置處理,也可以通過GPU處理,故此時首先判斷所述任務(wù)是否為所述GPU所支持的任務(wù)。若所述任務(wù)是所述GPU所支持的任務(wù),執(zhí)行步驟205 ;若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行步驟206。205、若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù)。具體的,若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù)可以包括:將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列;若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)。獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。具體的,所述第一條件可以為任務(wù)隊(duì)列滿或所述任務(wù)隊(duì)列的定時器超時。當(dāng)然,控制所述GPU執(zhí)行所述任務(wù)的方法還可以有其它,本發(fā)明實(shí)施例對此不作具體限定。206、若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行所述任務(wù)。具體的,若所述任務(wù)不是所述GPU所支持的任務(wù),則所述網(wǎng)絡(luò)包處理的裝置可以直接讀顯存執(zhí)行所述任務(wù)。本發(fā)明實(shí)施例基于上述方案,利用統(tǒng)一虛擬地址空間UVA技術(shù)和圖形處理器GPU直連技術(shù),實(shí)現(xiàn)網(wǎng)卡和GPU的顯存的直通,可以將網(wǎng)絡(luò)包從網(wǎng)卡直接寫入GPU的顯存,減少了 GPU處理網(wǎng)絡(luò)協(xié)議任務(wù)時數(shù)據(jù)的拷貝次數(shù),節(jié)省了系統(tǒng)資源,提高了網(wǎng)絡(luò)包處理的效率,同時避免了將網(wǎng)絡(luò)包寫入內(nèi)存時通過系統(tǒng)的橋接芯片組所帶來的系統(tǒng)延時,在一定程度上降低了網(wǎng)卡的丟包率。實(shí)施例二、本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的方法,具體在如圖3所示的網(wǎng)絡(luò)包處理的系統(tǒng)300下進(jìn)行說明,所述網(wǎng)絡(luò)包處理的系統(tǒng)具體可以包括網(wǎng)卡301、顯卡302、CPU303、內(nèi)存304、芯片組305、PCIe總線306、DMA控制器307,其中,所述顯卡302包括GPU3021和顯存3022。網(wǎng)卡301和顯卡302連接到同一個PCIe總線306,通過芯片組305和CPU303通信。所述方法如圖4所示,包括:401、網(wǎng)卡接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中。402、網(wǎng)卡根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。具體的,本發(fā)明實(shí)施例基于統(tǒng)一虛擬地址空間UVA (Unified virtualaddressing,統(tǒng)一虛擬地址空間)技術(shù),將內(nèi)存資源和顯卡上的顯存資源當(dāng)做一塊統(tǒng)一的存儲器池,存儲器地址統(tǒng)一編碼,操作系統(tǒng)可像訪問內(nèi)存般對顯存讀寫。所以,所述網(wǎng)卡中存儲了內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,在接收到網(wǎng)絡(luò)包后,可以根據(jù)所述網(wǎng)絡(luò)包攜帶的所述第一地址,通過查找地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。需要說明的是,所述GPU的顯存實(shí)質(zhì)上是指顯卡上與GPU相連接的顯存,而并非GPU內(nèi)部包含的顯存。因?yàn)槊總€GPU都有與其連接的顯存,所以可以稱與GPU相連接的顯存為“GPU的顯存”。403、網(wǎng)卡控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中。具體的,本發(fā)明還利用所述GPU直連技術(shù),允許其他PCIe設(shè)備,如網(wǎng)絡(luò)適配器、固態(tài)硬盤等通過DMA直接讀寫顯存,就像以前通過DMA直接讀寫內(nèi)存一樣。所以,所述網(wǎng)卡可以控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中。正是基于所述UVA技術(shù)和所述GPU直連技術(shù),所述網(wǎng)卡在接收到網(wǎng)絡(luò)包后,才最終將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中,實(shí)現(xiàn)所述網(wǎng)卡和GPU的顯存的直通。404、網(wǎng)卡發(fā)送第一指示消息給中央處理器CPU,以使通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。具體的,在所述網(wǎng)卡控制所述DMA將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中后,可能會產(chǎn)生硬中斷通知通信對端處理所述數(shù)據(jù)包,即發(fā)送第一指示消息給所述CPU,所述第一指示消息指示所述CPU處理所述數(shù)據(jù)包。具體的,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。
405、CPU接收所述網(wǎng)卡發(fā)送的第一指示消息。406、CPU根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信
肩、O具體的,所述第一指示消息可能由網(wǎng)卡的硬中斷產(chǎn)生,所述CPU在接收到所述第一指示消息后,可能會產(chǎn)生軟中斷啟動對網(wǎng)絡(luò)包的處理進(jìn)程,然后從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息,也可能是直接根據(jù)所述第一指示消息攜帶的所述物理地址,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息,本發(fā)明實(shí)施例對此不作具體限定,僅說明在接收第一指示消息后,還從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。具體的,因?yàn)榫W(wǎng)卡在接收到網(wǎng)絡(luò)包后,將所述網(wǎng)絡(luò)包寫入所述GPU的顯存中的物理地址中,故在所述CPU接收第一指示消息后,可以直接從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。407、CPU根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù)。具體的,所述網(wǎng)絡(luò)包的包頭信息指示了當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù),因此可以根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對網(wǎng)絡(luò)包執(zhí)行的任務(wù)。408、CPU判斷所述任務(wù)是否為所述GPU所支持的任務(wù)。具體的,因?yàn)樗鯣PU的浮點(diǎn)運(yùn)算能力遠(yuǎn)遠(yuǎn)超過CPU,同時GPU訪問顯存的帶寬也超過CPU訪問內(nèi)存的帶寬,不僅在速度方面大大提高,且具有流處理、高密度并行運(yùn)算、可編程流水線等特性,所以對于計(jì)算量大的網(wǎng)絡(luò)協(xié)議任務(wù)可以確定是所述GPU所支持的任務(wù),由GPU處理;而對于計(jì)算量小的網(wǎng)絡(luò)協(xié)議任務(wù),可以確定不是所述GPU所支持的任務(wù),可由所述CPU處理。具體的,一般將需要讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù)視為計(jì)算量大的網(wǎng)絡(luò)協(xié)議任務(wù),比如網(wǎng)絡(luò)層的IPSec加/解密任務(wù)、傳輸層的SSL加/解密任務(wù)、應(yīng)用層的DPI深度包檢測任務(wù)。而對于僅需讀取包頭數(shù)據(jù)的輕量級協(xié)議的任務(wù),可視為計(jì)算量小的網(wǎng)絡(luò)協(xié)議任務(wù)。本發(fā)明實(shí)施例對如何判斷所述任務(wù)是否為所述GPU所支持的任務(wù)不作具體限定,僅說明因?yàn)樗鋈蝿?wù)可以通過所述CPU處理,也可以通過GPU處理,故此時首先判斷所述任務(wù)是否為所述GPU所支持的任務(wù)。若所述任務(wù)是所述GPU所支持的任務(wù),執(zhí)行步驟409 ;若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行步驟410。409、若所述任務(wù)是所述GPU所支持的任務(wù),CPU控制所述GPU執(zhí)行所述任務(wù)。具體的,若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù)可以包括:將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列;若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)。獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。
具體的,所述第一條件可以為任務(wù)隊(duì)列滿或所述任務(wù)隊(duì)列的定時器超時。410、若所述任務(wù)不是所述GPU所支持的任務(wù),CPU執(zhí)行所述任務(wù)。需要說明的是,網(wǎng)絡(luò)包由多個網(wǎng)絡(luò)協(xié)議任務(wù)構(gòu)成,上述步驟406-410是網(wǎng)絡(luò)包處理過程中,一個網(wǎng)絡(luò)協(xié)議任務(wù)的處理方法,下面以所述GPU所支持的任務(wù)僅為網(wǎng)絡(luò)協(xié)議棧的網(wǎng)絡(luò)層的IPSec加/解密、傳輸層的SSL加/解密、應(yīng)用層的DPI深度包檢測這幾個典型協(xié)議任務(wù)為例,描述CPU接收網(wǎng)卡發(fā)送的第一指示消息后,對網(wǎng)絡(luò)包進(jìn)行處理的過程,具體如圖5所示,包括:501、CPU接收所述網(wǎng)卡發(fā)送的第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在GPU的顯存中的物理地址。502、CPU根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的網(wǎng)絡(luò)層的包頭信息。具體的,因?yàn)榫W(wǎng)卡在接收到網(wǎng)絡(luò)包后,將所述網(wǎng)絡(luò)包寫入所述GPU的顯存中的物理地址中,故在所述CPU接收第一指示消息后,可以直接從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。503、CPU根據(jù)所述網(wǎng)絡(luò)層的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的網(wǎng)絡(luò)層任務(wù)。若所述網(wǎng)絡(luò)層任務(wù)是IPSec加/解密,執(zhí)行步驟504 ;若所述網(wǎng)絡(luò)層任務(wù)不是IPSec加/解密,執(zhí)行步驟508。504、若所述網(wǎng)絡(luò)層任務(wù)是IPSec加/解密,確定所述任務(wù)為所述GPU所支持的任務(wù)。需要說明的是,本發(fā)明實(shí)施例僅以所述GPU所支持的任務(wù)為網(wǎng)絡(luò)層的IPSecW/解密、傳輸層的SSL加/解密、應(yīng)用層的DPI深度包檢測這幾個典型協(xié)議任務(wù)為例做示例性說明,所以若所述網(wǎng)絡(luò)層是IPSec加密,確定所述IPSec任務(wù)為所述GPU所支持的任務(wù),SP由所述GPU處理該任務(wù)。當(dāng)然,所述GPU所支持的任務(wù)包括但不限于上述列舉的網(wǎng)絡(luò)協(xié)議任務(wù),本發(fā)明實(shí)施例僅是示例性的說明,對所述GPU支持的網(wǎng)絡(luò)協(xié)議任務(wù)不作具體限定。505、將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列。具體的,如圖6所示,所述CPU包括網(wǎng)絡(luò)協(xié)議棧和GPU調(diào)度模塊。若所述CPU判斷當(dāng)前要對網(wǎng)絡(luò)包執(zhí)行的任務(wù)不是所述GPU所支持的任務(wù),直接通過網(wǎng)絡(luò)協(xié)議棧對所述任務(wù)進(jìn)行處理;若所述CPU判斷當(dāng)前要對網(wǎng)絡(luò)包執(zhí)行的任務(wù)是所述GPU所支持的任務(wù),則通過GPU調(diào)用模塊對所述任務(wù)進(jìn)行處理。其中,所述GPU調(diào)用模塊由3個子模塊組成,分別是隊(duì)列管理、GPU線程調(diào)度和協(xié)議代理。CPU為每個網(wǎng)絡(luò)協(xié)議任務(wù)創(chuàng)建了相應(yīng)的任務(wù)隊(duì)列,隊(duì)列管理模塊負(fù)責(zé)管理這些任務(wù)隊(duì)列,其中,在確定當(dāng)前要對網(wǎng)絡(luò)包執(zhí)行的任務(wù)為所述GPU所支持的任務(wù)后,,將所述任務(wù)放入對應(yīng)的任務(wù)隊(duì)列。若是網(wǎng)絡(luò)層的IPSec任務(wù),則放入CPU的IPSec任務(wù)隊(duì)列;若是傳輸層的SSL任務(wù),則放入CPU的SSL任務(wù)隊(duì)列;
若是應(yīng)用層的DPI任務(wù),則放入CPU的DPI任務(wù)隊(duì)列。506、若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)。具體的,所述第一條件可以為任務(wù)隊(duì)列滿,或任務(wù)隊(duì)列的定時器超時,也可以是任務(wù)隊(duì)列中的任務(wù)達(dá)到預(yù)設(shè)的某個數(shù)值,本發(fā)明實(shí)施例對所述第一條件不作具體限定,僅說明在所述任務(wù)隊(duì)列滿足第一條件后,發(fā)送第二指示消息給GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)。其中,步驟506由圖6所示的GPU線程調(diào)度模塊執(zhí)行。507、獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。具體的,在所述GPU執(zhí)行完成任務(wù)隊(duì)列中的任務(wù)后,還需要返回CPU的網(wǎng)絡(luò)協(xié)議棧繼續(xù)處理網(wǎng)絡(luò)協(xié)議任務(wù),圖6所示的協(xié)議代理持有每個CPU任務(wù)隊(duì)列執(zhí)行完成后下一步協(xié)議處理的接口函數(shù)地址,它負(fù)責(zé)獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在顯存中的存儲地址后,交給協(xié)議棧繼續(xù)處理。若獲取的是IPSec任務(wù)隊(duì)列的執(zhí)行結(jié)果,此時根據(jù)下一步協(xié)議處理的接口函數(shù)地址,轉(zhuǎn)去執(zhí)行步驟510 ;若獲取的是SSL任務(wù)隊(duì)列的執(zhí)行結(jié)果,此時根據(jù)下一步協(xié)議處理的接口函數(shù)地址,轉(zhuǎn)去執(zhí)行步驟515 ;若獲取的是DPI任務(wù)隊(duì)列的執(zhí)行結(jié)果,此時根據(jù)下一步協(xié)議處理的接口函數(shù)地址,轉(zhuǎn)去執(zhí)行步驟520。508、若所述網(wǎng)絡(luò)層任務(wù)不是IPSec加/解密,確定所述任務(wù)不是所述GPU所支持的任務(wù)。509、CPU執(zhí)行所述網(wǎng)絡(luò)層的所述任務(wù)。需要說明的是,網(wǎng)絡(luò)層任務(wù)可能包含多個,在將對所述網(wǎng)絡(luò)包要執(zhí)行的網(wǎng)絡(luò)層任務(wù)全部執(zhí)行完畢后,才會繼續(xù)處理上層傳輸層的任務(wù),本發(fā)明實(shí)施例中步驟503-509僅是示例性的說明CPU確定當(dāng)前對網(wǎng)絡(luò)包執(zhí)行的網(wǎng)絡(luò)層任務(wù)后所執(zhí)行的動作,并不對CPU對所述網(wǎng)絡(luò)包的網(wǎng)絡(luò)層的所有任務(wù)的處理過程一一描述。510、CPU從GPU的顯存中讀取所述網(wǎng)絡(luò)包的傳輸層的包頭信息。511、CPU根據(jù)所述傳輸層的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的傳輸層任務(wù)。若所述傳輸層任務(wù)是SSL加/解密,執(zhí)行步驟512 ;若所述傳輸層任務(wù)不是SSL加/解密,執(zhí)行步驟513。512、若所述任務(wù)是SSL加/解密,確定所述SSL任務(wù)為所述GPU所支持的任務(wù)。具體的,此時轉(zhuǎn)去執(zhí)行步驟505-507。513、若所述傳輸層任務(wù)不是SSL加/解密,確定所述任務(wù)為不是所述GPU所支持的任務(wù)。514、CPU執(zhí)行所述傳輸層的所述任務(wù)。
需要說明的是,傳輸層任務(wù)可能包含多個,在將對所述網(wǎng)絡(luò)包要執(zhí)行的傳輸層任務(wù)全部執(zhí)行完畢后,才會繼續(xù)處理上層應(yīng)用層的任務(wù),本發(fā)明實(shí)施例中步驟511-514僅是示例性的說明CPU確定當(dāng)前對網(wǎng)絡(luò)包執(zhí)行的傳輸層任務(wù)后所執(zhí)行的動作,并不對CPU對所述網(wǎng)絡(luò)包的傳輸層所有任務(wù)的處理過程 描述。515、CPU從GPU的顯存中讀取所述網(wǎng)絡(luò)包的應(yīng)用層的包頭信息。516、CPU根據(jù)所述應(yīng)用層的包頭信息,確定當(dāng)前對所述網(wǎng)絡(luò)包執(zhí)行的應(yīng)用層任務(wù)。具體的,若所述應(yīng)用層任務(wù)是DPI深度包檢測,執(zhí)行步驟517 ;若所述應(yīng)用層不是DPI深度包檢測,執(zhí)行步驟518。517、若所述應(yīng)用層任務(wù)是DPI深度包檢測,確定所述任務(wù)是所述GPU所支持的任務(wù)。具體的,此時轉(zhuǎn)去執(zhí)行步驟505-507。518、若所述應(yīng)用層任務(wù)不是DPI深度包檢測,確定所述DPI任務(wù)不是所述GPU所支持的任務(wù)。519、CPU執(zhí)行所述應(yīng)用層的所述任務(wù)。需要說明的是,應(yīng)用層任務(wù)可能包含多個,在將對所述網(wǎng)絡(luò)包執(zhí)行的應(yīng)用層任務(wù)全部執(zhí)行完畢后,才會繼續(xù)執(zhí)行網(wǎng)絡(luò)包的用戶處理,本發(fā)明實(shí)施例中步驟516-519僅是示例性的說明CPU確定當(dāng)前對網(wǎng)絡(luò)包執(zhí)行的應(yīng)用層任務(wù)后所執(zhí)行的動作,并不對CPU對所述網(wǎng)絡(luò)包的應(yīng)用層所有任務(wù)的處理過程一一描述。520、CPU執(zhí)行網(wǎng)絡(luò)包的用戶數(shù)據(jù)處理。具體的,在完成上述的網(wǎng)絡(luò)協(xié)議任務(wù)處理后,CPU按照應(yīng)用業(yè)務(wù)邏輯對所述網(wǎng)絡(luò)包的用戶數(shù)據(jù)進(jìn)行處理,比如報文統(tǒng)計(jì),包轉(zhuǎn)發(fā)等。如果是包轉(zhuǎn)發(fā)業(yè)務(wù),所述CPU傳遞所述網(wǎng)絡(luò)包在顯存中的存儲地址給網(wǎng)卡,由網(wǎng)卡控制所述DMA直接從顯存讀取網(wǎng)絡(luò)包,進(jìn)而轉(zhuǎn)發(fā)出去。需要說明的是,若所述GPU所支持的任務(wù)為網(wǎng)絡(luò)協(xié)議棧的網(wǎng)絡(luò)層的IPSec加/解密、傳輸層的SSL加/解密、應(yīng)用層的DPI深度包檢測之外的其它任務(wù)時,可以依據(jù)上述實(shí)施例的思想處理網(wǎng)絡(luò)數(shù)據(jù)包,本發(fā)明實(shí)施例對此不作具體限定。本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的方法,所述方法包括:網(wǎng)卡接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中;網(wǎng)卡根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;網(wǎng)卡控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中;網(wǎng)卡發(fā)送第一指示消息給中央處理器CPU,以使所述CPU根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;CPU接收所述網(wǎng)卡發(fā)送的所述第一指示消息;(PU根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息;CPU根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù);CPU判斷所述任務(wù)是否為所述GPU所支持的任務(wù);若所述任務(wù)是所述GPU所支持的任務(wù),CPU控制所述GPU執(zhí)行所述任務(wù);若所述任務(wù)不是所述GPU所支持的任務(wù),CPU執(zhí)行所述任務(wù)?;诒景l(fā)明實(shí)施例提供的網(wǎng)絡(luò)包處理的方法,利用統(tǒng)一虛擬地址空間UVA技術(shù)和圖形處理器GPU直連技術(shù),實(shí)現(xiàn)網(wǎng)卡和GPU的顯存的直通,可以將網(wǎng)絡(luò)包從網(wǎng)卡直接寫入GPU的顯存,減少了 GPU處理網(wǎng)絡(luò)協(xié)議任務(wù)時數(shù)據(jù)的拷貝次數(shù),節(jié)省了系統(tǒng)資源,提高了網(wǎng)絡(luò)包處理的效率,同時避免了將網(wǎng)絡(luò)包寫入內(nèi)存時通過系統(tǒng)的橋接芯片組所帶來的系統(tǒng)延時,在一定程度上降低了網(wǎng)卡的丟包率。實(shí)施例三、本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的裝置700,具體如圖7所示,包括接收單元701、存儲單元702、確定單元703、控制單元704、發(fā)送單元705。所述接收單元701,用于接收網(wǎng)絡(luò)包。所述存儲單元702,用于將所述網(wǎng)絡(luò)包緩存在內(nèi)存緩沖區(qū)的第一地址中。所述確定單元703,用于根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。所述控制單元704,用于控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中。所述發(fā)送單元705,用于發(fā)送第一指示消息,以使得通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。具體的,所述網(wǎng)絡(luò)包處理的裝置700可以為網(wǎng)卡,本發(fā)明實(shí)施例對此不作具體限定。具體的,通過所述網(wǎng)絡(luò)包處理的裝置700進(jìn)行網(wǎng)絡(luò)包處理的方法可參考實(shí)施例一和實(shí)施例二的描述,本發(fā)明實(shí)施例對此不再贅述?;诒景l(fā)明實(shí)施例提供的網(wǎng)絡(luò)包處理的裝置,利用統(tǒng)一虛擬地址空間UVA技術(shù)和圖形處理器GPU直連技術(shù),可以實(shí)現(xiàn)網(wǎng)卡和GPU的顯存的直通,可以將網(wǎng)絡(luò)包從網(wǎng)卡直接寫AGPU的顯存,減少了 GPU處理網(wǎng)絡(luò)協(xié)議任務(wù)時數(shù)據(jù)的拷貝次數(shù),節(jié)省了系統(tǒng)資源,提高了網(wǎng)絡(luò)包處理的效率,同時避免了將網(wǎng)絡(luò)包寫入內(nèi)存時通過系統(tǒng)的橋接芯片組所帶來的系統(tǒng)延時,在一定程度上降低了網(wǎng)卡的丟包率。實(shí)施例四、本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的裝置800,具體如圖8所示,所述裝置800包括接收單元801、讀取單元802、確定單元803、判斷單元804、控制單元805、執(zhí)行單元806。所述接收單元801,用于接收第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在圖形處理器GPU的顯存中的物理地址。所述讀取單元802,用于根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。所述確定單元803,用于根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù)。所述判斷單元804,用于判斷所述任務(wù)是否為所述GPU所支持的任務(wù)。所述控制單元805,用于若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù)。所述執(zhí)行單元806,用于若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行所述任務(wù)。進(jìn)一步的,所述判斷單元804判斷所述任務(wù)是否為所述GPU所支持的任務(wù),具體包括:確定所述任務(wù)是否為需要讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù)。若所述任務(wù)是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)是所述GPU所支持的任務(wù);若所述任務(wù)不是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)不是所述GPU所支持的任務(wù)。進(jìn)一步的,若所述任務(wù)是所述GPU所支持的任務(wù),所述控制單元805控制所述GPU執(zhí)行所述任務(wù)具體包括:將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列;若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù);獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。進(jìn)一步的,所述第一條件具體為所述任務(wù)隊(duì)列滿;或所述第一條件具體為所述任務(wù)隊(duì)列的定時器超時。具體的,所述網(wǎng)絡(luò)包處理的裝置800具體可以為中央處理器CPU,本發(fā)明實(shí)施例對此不作具體限定。具體的,通過所述網(wǎng)絡(luò)包處理的裝置800進(jìn)行網(wǎng)絡(luò)包處理的方法可參考實(shí)施例一和實(shí)施例二的描述,本發(fā)明實(shí)施例對此不再贅述?;诒景l(fā)明實(shí)施例提供的所述網(wǎng)絡(luò)包處理的裝置,由于對網(wǎng)絡(luò)包進(jìn)行處理時,均可以直接訪問所述GPU的顯存處理所述網(wǎng)絡(luò)包,減少了 GPU處理網(wǎng)絡(luò)協(xié)議任務(wù)時數(shù)據(jù)的拷貝次數(shù),節(jié)省了系統(tǒng)資源,提高了網(wǎng)絡(luò)包處理的效率,同時避免了將網(wǎng)絡(luò)包寫入內(nèi)存時通過系統(tǒng)的橋接芯片組所帶來的系統(tǒng)延時,在一定程度上降低了網(wǎng)卡的丟包率。實(shí)施例五、本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的系統(tǒng)300,具體如圖3所示,所述系統(tǒng)300包括網(wǎng)卡301、中央處理器CPU303、顯卡302、內(nèi)存304、芯片組305、PCIe總線306、DMA控制器307,其中所述顯卡302包括圖形處理器GPU3021和顯存3022,所述網(wǎng)卡301和所述顯卡302連接到同一個PCIe總線306,通過芯片組305和CPU303通信,包括:網(wǎng)卡301接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中。網(wǎng)卡301根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存304緩沖區(qū)的地址與圖形處理器GPU3021的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU3021的顯存中的物理地址。網(wǎng)卡301控制直接內(nèi)存訪問DMA控制器307,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU3021的顯存中的物理地址中。網(wǎng)卡301發(fā)送第一指示消息給中央處理器CPU303,以使所述CPU303根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU3021的顯存中的物理地址。CPU303接收所述網(wǎng)卡301發(fā)送的所述第一指示消息。CPU303根據(jù)所述第一指示消息,從所述GPU3021的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息。CPU303根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù)。CPU303判斷所述任務(wù)是否為所述GPU3021所支持的任務(wù)。若所述任務(wù)是所述GPU3021所支持的任務(wù),CPU303控制所述GPU3021執(zhí)行所述任務(wù)。若所述任務(wù)不是所述GPU3021所支持的任務(wù),CPU303執(zhí)行所述任務(wù)。具體的,通過所述網(wǎng)卡301和所述CPU303進(jìn)行網(wǎng)絡(luò)包處理的方法可參考實(shí)施例一和實(shí)施例二的描述,本發(fā)明實(shí)施例對此不再贅述。基于本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)包處理的系統(tǒng),利用統(tǒng)一虛擬地址空間UVA技術(shù)和圖形處理器GPU直連技術(shù)可以實(shí)現(xiàn)網(wǎng)卡和GPU的顯存的直通,可以將網(wǎng)絡(luò)包從網(wǎng)卡直接寫AGPU的顯存,減少了 GPU處理網(wǎng)絡(luò)協(xié)議任務(wù)時數(shù)據(jù)的拷貝次數(shù),節(jié)省了系統(tǒng)資源,提高了網(wǎng)絡(luò)包處理的效率,同時避免了將網(wǎng)絡(luò)包寫入內(nèi)存時通過系統(tǒng)的橋接芯片組所帶來的系統(tǒng)延時,在一定程度上降低了網(wǎng)卡的丟包率。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種網(wǎng)絡(luò)包處理的方法,其特征在于,所述方法包括: 接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中; 根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中; 發(fā)送第一指示消息,以使通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。
2.—種網(wǎng)絡(luò)包處理的方法,其特征在于,所述方法包括: 接收第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在圖形處理器GPU的顯存中的物理地址; 根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息; 根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù); 判斷所述任務(wù)是否為所述GPU所支持的任務(wù); 若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù); 若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行所述任務(wù)。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述判斷所述任務(wù)是否為所述GPU所支持的任務(wù),具體包括: 確定所述任務(wù)是否為讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù); 若所述任務(wù)是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)是所述GPU所支持的任務(wù); 若所述任務(wù)不是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)不是所述GPU所支持的任務(wù)。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù)具體包括: 將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列; 若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù); 獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述第一條件具體為所述任務(wù)隊(duì)列滿; 或 所述第一條件具體為所述任務(wù)隊(duì)列的定時器超時。
6.一種網(wǎng)絡(luò)包處理的裝置,其特征在于,所述裝置包括接收單元、存儲單元、確定單元、控制單元、發(fā)送單元; 所述接收單元,用于接收網(wǎng)絡(luò)包; 所述存儲單元,用于將所述網(wǎng)絡(luò)包緩存在內(nèi)存緩沖區(qū)的第一地址中;所述確定單元,用于根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址; 所述控制單元,用于控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中; 所述發(fā)送單元,用于發(fā)送第一指示消息,以使得通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。
7.—種網(wǎng)絡(luò)包處理的裝置,其特征在于,所述裝置包括接收單元、讀取單元、確定單元、判斷單元、控制單元、執(zhí)行單元; 所述接收單元,用于接收第一指示消息,其中,所述第一指示消息攜帶網(wǎng)絡(luò)包在圖形處理器GPU的顯存中的物理地址; 所述讀取單元,用于根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息; 所述確定單元,用于根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù); 所述判斷單元,用于判斷所述任務(wù)是否為所述GPU所支持的任務(wù); 所述控制單元,用于若所述任務(wù)是所述GPU所支持的任務(wù),控制所述GPU執(zhí)行所述任務(wù); 所述執(zhí)行單元,用于若所述任務(wù)不是所述GPU所支持的任務(wù),執(zhí)行所述任務(wù)。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述判斷單元判斷所述任務(wù)是否為所述GPU所支持的任務(wù),具體包括: 確定所述任務(wù)是否為需要讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù); 若所述任務(wù)是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)是所述GPU所支持的任務(wù); 若所述任務(wù)不是讀取完整網(wǎng)絡(luò)包做計(jì)算的任務(wù),確定所述任務(wù)不是所述GPU所支持的任務(wù)。
9.根據(jù)權(quán)利要求7或8所述的裝置,其特征在于,若所述任務(wù)是所述GPU所支持的任務(wù),所述控制單元控制所述GPU執(zhí)行所述任務(wù)具體包括: 將所述任務(wù)放入所述任務(wù)對應(yīng)的任務(wù)隊(duì)列; 若所述任務(wù)隊(duì)列滿足第一條件,發(fā)送第二指示消息給所述GPU,所述第二指示消息指示所述GPU并發(fā)執(zhí)行所述任務(wù)隊(duì)列中的任務(wù),其中,所述第二指示消息攜帶所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,以使得所述GPU根據(jù)所述任務(wù)隊(duì)列中的任務(wù)在所述GPU的顯存中的物理地址,執(zhí)行所述任務(wù)隊(duì)列中的任務(wù); 獲取所述GPU執(zhí)行所述任務(wù)隊(duì)列中的任務(wù)后的執(zhí)行結(jié)果和所述執(zhí)行結(jié)果在所述GPU的顯存中的物理地址。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述第一條件具體為所述任務(wù)隊(duì)列滿; 或 所述第一條件具體為所述任務(wù)隊(duì)列的定時器超時。
11.一種網(wǎng)絡(luò)包處理的系統(tǒng),其特征在于,所述系統(tǒng)包括網(wǎng)卡、中央處理器CPU、顯卡、內(nèi)存、直接內(nèi)存訪問DMA控制器、芯片組、PCIe總線,其中,所述顯卡包括圖像處理器GPU和顯存,所述網(wǎng)卡和所述顯卡連接到同一個PCIe總線,通過芯片組和CPU通信,包括: 網(wǎng)卡接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中;網(wǎng)卡根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;網(wǎng)卡控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中;網(wǎng)卡發(fā)送第一指示消息給中央處理器CPU,以使所述CPU根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;CPU接收所述網(wǎng)卡發(fā)送的所述第一指示消息;CPU根據(jù)所述第一指示消息,從所述GPU的顯存中讀取所述網(wǎng)絡(luò)包的包頭信息;(PU根據(jù)所述網(wǎng)絡(luò)包的包頭信息,確定當(dāng)前要對所述網(wǎng)絡(luò)包執(zhí)行的任務(wù);CPU判斷所述任務(wù)是否為所述GPU所支持的任務(wù);若所述任務(wù)是所述GPU所支持的任務(wù),CPU控制所述GPU執(zhí)行所述任務(wù);若所述任務(wù)不是所述GPU所支持的任務(wù),CPU執(zhí)行所 述任務(wù)。
全文摘要
本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)包處理的方法、裝置和系統(tǒng),能夠減少系統(tǒng)的響應(yīng)時間,節(jié)省系統(tǒng)資源,提高網(wǎng)絡(luò)包處理的效率。所述方法包括接收網(wǎng)絡(luò)包,并將其緩存在內(nèi)存緩沖區(qū)的第一地址中;根據(jù)所述內(nèi)存緩沖區(qū)的第一地址和預(yù)存儲的內(nèi)存緩沖區(qū)的地址與圖形處理器GPU的顯存中的物理地址的地址映射關(guān)系,確定所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址;控制直接內(nèi)存訪問DMA控制器,將所述網(wǎng)絡(luò)包寫入所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址中;發(fā)送第一指示消息,以使通信對端根據(jù)所述第一指示消息處理所述網(wǎng)絡(luò)包,其中,所述第一指示消息攜帶所述確定的所述網(wǎng)絡(luò)包在所述GPU的顯存中的物理地址。本發(fā)明適用于計(jì)算機(jī)領(lǐng)域。
文檔編號H04L29/08GK103200128SQ20131011233
公開日2013年7月10日 申請日期2013年4月1日 優(yōu)先權(quán)日2013年4月1日
發(fā)明者王繼海 申請人:華為技術(shù)有限公司