本發(fā)明涉及計算機(jī)的技術(shù)領(lǐng)域,尤其是涉及一種數(shù)據(jù)包的并行處理方法及裝置。
背景技術(shù):
網(wǎng)絡(luò)流量分析技術(shù)一直廣泛應(yīng)用于網(wǎng)絡(luò)管理、防火墻、負(fù)載均衡、流量控制、網(wǎng)絡(luò)審計等領(lǐng)域。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)鏈路帶寬激增,互聯(lián)網(wǎng)應(yīng)用也越來越多樣化,給高性能網(wǎng)絡(luò)數(shù)據(jù)包處理帶來了極大的挑戰(zhàn),同時也制約了網(wǎng)絡(luò)流量分析的應(yīng)用發(fā)展。
為了提高基于純軟件方案的數(shù)據(jù)包處理性能,近年來提出的一種數(shù)據(jù)平面開發(fā)工具集dpdk,提供了一個用戶空間小的高效數(shù)據(jù)包處理庫函數(shù),通過環(huán)境抽象層旁路內(nèi)核協(xié)議棧、輪詢模式的數(shù)據(jù)包無中斷收發(fā)、優(yōu)化內(nèi)存/緩沖區(qū)/隊(duì)列管理、基于網(wǎng)卡多隊(duì)列和流識別的負(fù)載均衡等多項(xiàng)技術(shù),實(shí)現(xiàn)了x86處理器架構(gòu)下的高性能數(shù)據(jù)包處理。
但是由于網(wǎng)絡(luò)業(yè)務(wù)的多樣化,使得網(wǎng)絡(luò)流量分析本身除了2-3層的網(wǎng)絡(luò)轉(zhuǎn)發(fā)處理需求之外,更多的需要滿足上千種協(xié)議的dpi識別、tcp重組還原以及上百種應(yīng)用協(xié)議的解析。通常情況下,單個數(shù)據(jù)包的超長處理過程是串行進(jìn)行的,每個數(shù)據(jù)包需要經(jīng)歷一長串的協(xié)議處理過程,業(yè)務(wù)種類比較多的情況下,數(shù)據(jù)包的處理過程超過上千種協(xié)議,指令過程不計其數(shù),具體處理過程如圖1所示。因此,在復(fù)雜網(wǎng)絡(luò)流量分析的情況下,這種處理方式使得cpu指令集緩存miss的概率極高,額外增加了指令切換的開銷,也極大影響了數(shù)據(jù)包處理性能。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種數(shù)據(jù)包的并行處理方法及裝置,以緩解了現(xiàn)有的數(shù)據(jù)包處理方法處理效率較慢的技術(shù)問題。
第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)包的并行處理方法,包括:讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;對所述第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將所述第二數(shù)據(jù)包進(jìn)行緩存,以在所述下一時刻對所述第二組數(shù)據(jù)包進(jìn)行分析;其中,所述第一組數(shù)據(jù)包為第一數(shù)組中初始時刻待處理的多個相鄰的數(shù)據(jù)包或者前一時刻在所述第一數(shù)組中預(yù)提取的多個相鄰數(shù)據(jù)包,所述第二組數(shù)據(jù)包為所述第一數(shù)組中位于所述第一組數(shù)據(jù)包之后的數(shù)據(jù)包。
進(jìn)一步地,在讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包之前,所述方法還包括:獲取待處理的所述第一數(shù)組,其中,所述第一數(shù)組中包括待處理的數(shù)據(jù)包的指針;將所述第一數(shù)組的指針添加至協(xié)議分組模塊中待處理的指針數(shù)組中,其中,所述協(xié)議分組模塊包括以下至少之一:ip協(xié)議分組模塊,tcp協(xié)議分組模塊,應(yīng)用識別分組模塊。
進(jìn)一步地,讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包包括:在第一時刻,調(diào)用所述ip協(xié)議分組模塊,以使所述ip協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;在第二時刻,調(diào)用所述tcp協(xié)議分組模塊,以使所述tcp協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第二時刻為所述第一時刻之后的時刻;在第三時刻,調(diào)用所述應(yīng)用識別分組模塊,以使所述應(yīng)用識別分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第三時刻為所述第二時刻之后的時刻。
進(jìn)一步地,所述ip協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包包括:所述ip協(xié)議分組模塊判斷緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述ip協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在ip指針數(shù)組中報文數(shù)量不為零的情況下,所述ip協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
進(jìn)一步地,所述tcp協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包包括:在所述ip協(xié)議分組模塊對所述第一數(shù)組中的數(shù)據(jù)包分析完成之后,判斷緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述tcp協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在tcp指針數(shù)組中報文數(shù)量不為零的情況下,所述tcp協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
進(jìn)一步地,所述應(yīng)用識別分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包包括:在所述tcp協(xié)議分組模塊對所述第一數(shù)組中的數(shù)據(jù)包分析完成之后,判斷緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述應(yīng)用識別分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在應(yīng)用識別指針數(shù)組中報文數(shù)量不為零的情況下,所述應(yīng)用識別分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
第二方面,本發(fā)明實(shí)施例還提供一種數(shù)據(jù)包的并行處理裝置,包括:讀取單元,用于讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;分析單元,用于對所述第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將所述第二數(shù)據(jù)包進(jìn)行緩存,以在所述下一時刻對所述第二組數(shù)據(jù)包進(jìn)行分析;其中,所述第一組數(shù)據(jù)包為第一數(shù)組中初始時刻待處理的多個相鄰的數(shù)據(jù)包或者前一時刻在所述第一數(shù)組中預(yù)提取的多個相鄰數(shù)據(jù)包,所述第二組數(shù)據(jù)包為所述第一數(shù)組中位于所述第一組數(shù)據(jù)包之后的數(shù)據(jù)包。
進(jìn)一步地,所述裝置還包括:獲取單元,用于在讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包之前,獲取待處理的所述第一數(shù)組,其中,所述第一數(shù)組中包括待處理的數(shù)據(jù)包的指針;添加單元,用于將所述第一數(shù)組的指針添加至協(xié)議分組模塊中待處理的指針數(shù)組中,其中,所述協(xié)議分組模塊包括以下至少之一:ip協(xié)議分組模塊,tcp協(xié)議分組模塊,應(yīng)用識別分組模塊。
進(jìn)一步地,所述讀取單元包括:第一讀取模塊,用于在第一時刻,調(diào)用所述ip協(xié)議分組模塊,以使所述ip協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;第二讀取模塊,用于在第二時刻,調(diào)用所述tcp協(xié)議分組模塊,以使所述tcp協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第二時刻為所述第一時刻之后的時刻;第三讀取模塊,用于在第三時刻,調(diào)用所述應(yīng)用識別分組模塊,以使所述應(yīng)用識別分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第三時刻為所述第二時刻之后的時刻。
進(jìn)一步地,所述第一讀取模塊用于:所述ip協(xié)議分組模塊判斷緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述ip協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在ip指針數(shù)組中報文數(shù)量不為零的情況下,所述ip協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
在本發(fā)明實(shí)施例中,首先讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;然后,對第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將第二組數(shù)據(jù)包進(jìn)行緩存,以在下一時刻對第二組數(shù)據(jù)包進(jìn)行分析。在本發(fā)明實(shí)施例中,提出了一種高效并行數(shù)據(jù)包處理方法,通過該并行處理方法能夠減少數(shù)據(jù)包處理過程中的指令緩存丟失的概率,進(jìn)一步提高純軟件和模式網(wǎng)絡(luò)數(shù)據(jù)包處理的性能,進(jìn)而緩解了現(xiàn)有的數(shù)據(jù)包處理方法處理效率較慢的技術(shù)問題,從而實(shí)現(xiàn)了提高了數(shù)據(jù)包的數(shù)據(jù)效率的技術(shù)效果。
本發(fā)明的其他特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說明如下。
附圖說明
為了更清楚地說明本發(fā)明具體實(shí)施方式或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對具體實(shí)施方式或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施方式,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是現(xiàn)有技術(shù)中的一種數(shù)據(jù)包的處理方法的示意圖;
圖2是根據(jù)本發(fā)明實(shí)施例的一種數(shù)據(jù)包的并行處理方法的流程圖;
圖3是根據(jù)本發(fā)明實(shí)施例的一種數(shù)據(jù)包的并行處理方法的示意圖;
圖4是根據(jù)本發(fā)明實(shí)施例的一種ip協(xié)議分組模塊的處理流程的示意圖;
圖5是根據(jù)本發(fā)明實(shí)施例的一種數(shù)據(jù)包的并行處理裝置的示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一:
根據(jù)本發(fā)明實(shí)施例,提供了一種數(shù)據(jù)包的并行處理方法的實(shí)施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機(jī)可執(zhí)行指令的計算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖2是根據(jù)本發(fā)明實(shí)施例的一種數(shù)據(jù)包的并行處理方法的流程圖,如圖2所示,該方法包括如下步驟:
步驟s102,讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;
步驟s104,對所述第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將所述第二數(shù)據(jù)包進(jìn)行緩存,以在所述下一時刻對所述第二組數(shù)據(jù)包進(jìn)行分析;
其中,所述第一組數(shù)據(jù)包為第一數(shù)組中初始時刻待處理的多個相鄰的數(shù)據(jù)包或者前一時刻在所述第一數(shù)組中預(yù)提取的多個相鄰數(shù)據(jù)包,所述第二組數(shù)據(jù)包為所述第一數(shù)組中位于所述第一組數(shù)據(jù)包之后的數(shù)據(jù)包。
眾所周知,指令與數(shù)據(jù)是程序運(yùn)行的基本要素,現(xiàn)代cpu運(yùn)行時要從cpu緩存加載指令和數(shù)據(jù),cpu緩存器(cachememory)是位于cpu與內(nèi)存之間的臨時存儲器,它的容量比內(nèi)存小的多但是交換速度卻比內(nèi)存要快得多。高速緩存的出現(xiàn)主要是為了解決cpu運(yùn)算速度與內(nèi)存讀寫速度不匹配的矛盾,當(dāng)cpu調(diào)用大量數(shù)據(jù)時,就可先緩存中調(diào)用,從而加快讀取速度。
在本發(fā)明實(shí)施例中,具體程序處理單元中一次調(diào)用時多次重復(fù)同樣指令,多個數(shù)據(jù)包循環(huán)使用同一個處理單元,高效利用指令緩存。通過預(yù)測要處理的組內(nèi)數(shù)據(jù)包,并預(yù)取幾個數(shù)據(jù)包到緩存,其中,預(yù)取的數(shù)據(jù)包個數(shù)與并行的處理指令個數(shù)及處理單元的復(fù)雜度相關(guān)。該處理單元指令周期總和大于等于預(yù)取完成的花費(fèi)時間,從而在下一次處理時,cpu要處理數(shù)據(jù)已經(jīng)在緩存中就緒,從而達(dá)到數(shù)據(jù)的快速讀取。綜上所述,該方案減少數(shù)據(jù)包處理過程中的指令緩存miss的概率,通過處理的數(shù)據(jù)預(yù)測并預(yù)取,從而加速網(wǎng)絡(luò)數(shù)據(jù)包的處理。
在本發(fā)明實(shí)施例中,首先讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;然后,對第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將第二組數(shù)據(jù)包進(jìn)行緩存,以在下一時刻對第二組數(shù)據(jù)包進(jìn)行分析。在本發(fā)明實(shí)施例中,提出了一種高效并行數(shù)據(jù)包處理方法,通過該并行處理方法能夠減少數(shù)據(jù)包處理過程中的指令緩存丟失的概率,進(jìn)一步提高純軟件和模式網(wǎng)絡(luò)數(shù)據(jù)包處理的性能,進(jìn)而緩解了現(xiàn)有的數(shù)據(jù)包處理方法處理效率較慢的技術(shù)問題,從而實(shí)現(xiàn)了提高了數(shù)據(jù)包的數(shù)據(jù)效率的技術(shù)效果。
在一個可選實(shí)施方式中,在讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包之前,該方法還包括如下步驟:
步驟s1,獲取待處理的所述第一數(shù)組,其中,所述第一數(shù)組中包括待處理的數(shù)據(jù)包的指針;
步驟s2,將所述第一數(shù)組的指針添加至協(xié)議分組模塊中待處理的指針數(shù)組中,其中,所述協(xié)議分組模塊包括以下至少之一:ip協(xié)議分組模塊,tcp協(xié)議分組模塊,應(yīng)用識別分組模塊。
在本發(fā)明實(shí)施例中,在讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包之前,需要獲取待處理的數(shù)據(jù)包,首先,需要在每個cpu上建立任務(wù)線程,該線程調(diào)用dpdkpoll收包函數(shù),該收包函數(shù)一直輪詢網(wǎng)卡的收包隊(duì)列。當(dāng)收到100個數(shù)據(jù)包后或者經(jīng)過t0時間后,把收到的數(shù)據(jù)包的指針編進(jìn)一個100個元素的數(shù)組(如圖3中數(shù)據(jù)緩沖區(qū)所示的指針),然后,通過該指針遍歷數(shù)組,執(zhí)行讀取數(shù)據(jù)包的過程,并預(yù)提取下一組數(shù)據(jù)包,并執(zhí)行協(xié)議分組工作任務(wù),該協(xié)議分組工作任務(wù)是初始化報文描述結(jié)構(gòu),其中,報文描述結(jié)構(gòu)包含當(dāng)前報文長度,報文內(nèi)容的起始位置,收到該數(shù)據(jù)包的網(wǎng)卡索引及隊(duì)列序號,二層頭開始位置等信息。
任務(wù)線程在t1時間段調(diào)用ethernet協(xié)議分組模塊,執(zhí)行讀取數(shù)據(jù)包,預(yù)取下一組數(shù)據(jù)包,處理多播及廣播,vlan,qinq等信息,并根據(jù)數(shù)據(jù)包的下一層協(xié)議標(biāo)識,把該數(shù)據(jù)包的指針添加到該協(xié)議要處理的數(shù)據(jù)包指針數(shù)組中,例如,ip指針數(shù)組,tcp指針數(shù)組,應(yīng)用識別指針數(shù)組。如圖3所示,將該數(shù)據(jù)包的指針添加至ip協(xié)議要處理的ip指針分組中,將該數(shù)據(jù)包的指針添加至tcp協(xié)議要處理的tcp指針分組中。
之后,就可以執(zhí)行上述步驟s102,即,讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,該步驟s102的具體過程描述如下:
首先,在第一時刻,調(diào)用所述ip協(xié)議分組模塊,以使所述ip協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;
然后,在第二時刻,調(diào)用所述tcp協(xié)議分組模塊,以使所述tcp協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第二時刻為所述第一時刻之后的時刻;
最后,在第三時刻,調(diào)用所述應(yīng)用識別分組模塊,以使所述應(yīng)用識別分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第三時刻為所述第二時刻之后的時刻。
具體地,如圖3所示,在t2時刻(即,上述第一時刻)調(diào)用ip協(xié)議分組模塊,執(zhí)行讀取數(shù)據(jù)包(即,第一組數(shù)據(jù)包),預(yù)取下一組數(shù)據(jù)包(即,第二組數(shù)據(jù)包)的操作,并該模塊內(nèi)建立連接跟蹤表,維護(hù)系統(tǒng)內(nèi)的連接數(shù)量,連接數(shù)據(jù)統(tǒng)計。接下來,在t3時刻(即,上述第二時刻)調(diào)用tcp協(xié)議分組模塊,執(zhí)行讀取數(shù)據(jù)包(即,第一組數(shù)據(jù)包),預(yù)取下一組數(shù)據(jù)包(即,第二組數(shù)據(jù)包)的操作,產(chǎn)生tcp性能數(shù)據(jù)。在t4時刻(即,上述第三時刻)調(diào)用應(yīng)用識別分組模塊,執(zhí)行讀取數(shù)據(jù)包(即,第一組數(shù)據(jù)包),預(yù)取下一組數(shù)據(jù)包(即,第二組數(shù)據(jù)包)的操作,執(zhí)行統(tǒng)計策略,統(tǒng)計數(shù)據(jù),應(yīng)用性能分析。在t5時刻調(diào)用統(tǒng)計輸出處理模塊。
在一個可選的實(shí)施方式中,所述ip協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包包括如下步驟:
步驟s11,所述ip協(xié)議分組模塊判斷所述緩存器中是否包含預(yù)提取的數(shù)據(jù)包;
步驟s12,在判斷出是的情況下,所述ip協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;
步驟s13,在ip指針數(shù)組中報文數(shù)量不為零的情況下,所述ip協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
在本發(fā)明實(shí)施例中,各協(xié)議分組模塊遍歷有100個數(shù)據(jù)包指針的數(shù)組(即,第一數(shù)組)的同時對每個數(shù)組元素執(zhí)行數(shù)據(jù)處理。首先,定義k為數(shù)組元素的索引,令k=0,讀取2個報文v(k),v(k+1),一次處理2個報文,保證單次循環(huán)處理中的時間大于預(yù)取下一組數(shù)據(jù)包的時間。再預(yù)取v(k+2),v(k+3)數(shù)據(jù)包到緩存器中,內(nèi)存中數(shù)據(jù)包預(yù)取到緩存是慢速過程,對cpu將要操作的數(shù)據(jù)提前就緒,預(yù)取數(shù)據(jù)是異步過程,避免cpu等待,當(dāng)單次循環(huán)程序執(zhí)行完成,預(yù)取的數(shù)據(jù)已經(jīng)就位。依據(jù)v(k),v(k+1)的報文內(nèi)容,執(zhí)行協(xié)議分組工作任務(wù),然后,把報文的指針推進(jìn)到下一層協(xié)議分組模塊的數(shù)組里,以備下一級協(xié)議處理單元使用,然后k增加1,這時v(k+2),v(k+3)已經(jīng)在高速緩存了,再讀取即v(k+2)和v(k+3),重復(fù)以上步驟,直到數(shù)組內(nèi)的所有數(shù)據(jù)包都處理完成。
具體處理過程如圖4所示,ip協(xié)議分組模塊首先判斷ip指針數(shù)組中的報文數(shù)是否為零,其中,如果為零,則表示ip指針數(shù)組中不包含待處理數(shù)據(jù)包,如果不為零,則表示ip指針數(shù)組中還包含待處理的數(shù)據(jù)包。
如圖4所示,如果判斷出ip指針數(shù)組中報文數(shù)不為零,則獲取報文v(k)和報文v(k+1)所對應(yīng)的數(shù)據(jù)包(即,第一組數(shù)據(jù)包),并預(yù)提取v(k+2)所對應(yīng)的數(shù)據(jù)包和v(k+3)所對應(yīng)的數(shù)據(jù)包(即,第二組數(shù)據(jù)包)。并在獲取到第一組數(shù)據(jù)包之后,對第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果。在對其進(jìn)行分析之后,還可以執(zhí)行其他處理過程,具體處理過程對此不做具體限定。
如圖4所示,在對第一組數(shù)據(jù)包進(jìn)行分析之后,還可以解析報文v(k)和報文v(k+1)的下一層協(xié)議,并執(zhí)行v(k)分發(fā)下一層協(xié)議分組處理緩沖區(qū)(即,將報文的指針推進(jìn)到下一層協(xié)議分組模塊的數(shù)組里),以及,v(k+1)分發(fā)下一層協(xié)議分組處理緩沖區(qū)的步驟(即,將報文的指針推進(jìn)到下一層協(xié)議分組模塊的數(shù)組里)。并在執(zhí)行該步驟之后,讀取v(k+2)所對應(yīng)的數(shù)據(jù)包和v(k+3)所對應(yīng)的數(shù)據(jù)包。
具體地,ip協(xié)議分組模塊在讀取第一組數(shù)據(jù)包時,首先判斷緩存器中是否包含預(yù)提取的數(shù)據(jù)包,如果是的話,ip協(xié)議分組模塊從緩存器中提取預(yù)提取的數(shù)據(jù)包作為第一組數(shù)據(jù)包,并在ip指針數(shù)組中報文數(shù)量不為零的情況下,所述ip協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器;如果否的話,表明數(shù)據(jù)包還未開始處理,或者,數(shù)據(jù)包已經(jīng)處理完,其中,如果還未開始處理,則開始讀取第一個數(shù)據(jù)包和第二個數(shù)據(jù)包,并將第三個數(shù)據(jù)包和第四個數(shù)據(jù)包緩存至緩存器中,并依此通過上述流程對下述數(shù)據(jù)包執(zhí)行相應(yīng)的處理。
在一個可選的實(shí)施方式中,所述tcp協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包如下步驟:
步驟s21,在所述ip協(xié)議分組模塊對所述第一數(shù)組中的數(shù)據(jù)包分析完成之后,判斷所述緩存器中是否包含預(yù)提取的數(shù)據(jù)包;
步驟s22,在判斷出是的情況下,所述tcp協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;
步驟s23,在tcp指針數(shù)組中報文數(shù)量不為零的情況下,所述tcp協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
需要說明的是,在本發(fā)明實(shí)施例中,tcp協(xié)議分組模塊的處理流程與ip協(xié)議分組模塊的處理流程相同,此處不再贅述。
在一個可選的實(shí)施方式中,所述應(yīng)用識別分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包如下步驟:
步驟s31,在所述tcp協(xié)議分組模塊對所述第一數(shù)組中的數(shù)據(jù)包分析完成之后,判斷所述緩存器中是否包含預(yù)提取的數(shù)據(jù)包;
步驟s32,在判斷出是的情況下,所述應(yīng)用識別分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;
步驟s33,在應(yīng)用識別指針數(shù)組中報文數(shù)量不為零的情況下,所述應(yīng)用識別分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
需要說明的是,在本發(fā)明實(shí)施例中,應(yīng)用識別分組模塊的處理流程與ip協(xié)議分組模塊的處理流程相同,此處不再贅述。
綜上所述,在本發(fā)明實(shí)施例中,具體程序處理單元中一次調(diào)用時多次重復(fù)同樣指令,多個數(shù)據(jù)包循環(huán)使用同一個處理單元,高效利用指令緩存。通過預(yù)測要處理的組內(nèi)數(shù)據(jù)包,并預(yù)取幾個數(shù)據(jù)包到緩存,其中,預(yù)取的數(shù)據(jù)包個數(shù)與并行的處理指令個數(shù)及處理單元的復(fù)雜度相關(guān)。該處理單元指令周期總和大于等于預(yù)取完成的花費(fèi)時間,從而在下一次處理時,cpu要處理數(shù)據(jù)已經(jīng)在緩存中就緒,從而達(dá)到數(shù)據(jù)的快速讀取。綜上所述,該方案減少數(shù)據(jù)包處理過程中的指令緩存miss的概率,通過處理的數(shù)據(jù)預(yù)測并預(yù)取,從而加速網(wǎng)絡(luò)數(shù)據(jù)包的處理。
實(shí)施例二:
本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)包的并行處理裝置,該數(shù)據(jù)包的并行處理裝置主要用于執(zhí)行本發(fā)明實(shí)施例上述內(nèi)容所提供的數(shù)據(jù)包的并行處理方法,以下對本發(fā)明實(shí)施例提供的數(shù)據(jù)包的并行處理裝置做具體介紹。
圖5是根據(jù)本發(fā)明實(shí)施例的一種數(shù)據(jù)包的并行處理裝置的示意圖,如圖5所示,該數(shù)據(jù)包的并行處理裝置主要包括:讀取單元51和分析單元52,其中:
讀取單元,用于讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;
分析單元,用于對所述第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將所述第二數(shù)據(jù)包進(jìn)行緩存,以在所述下一時刻對所述第二組數(shù)據(jù)包進(jìn)行分析;
其中,所述第一組數(shù)據(jù)包為第一數(shù)組中初始時刻待處理的多個相鄰的數(shù)據(jù)包或者前一時刻在所述第一數(shù)組中預(yù)提取的多個相鄰數(shù)據(jù)包,所述第二組數(shù)據(jù)包為所述第一數(shù)組中位于所述第一組數(shù)據(jù)包之后的數(shù)據(jù)包。
在本發(fā)明實(shí)施例中,首先讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;然后,對第一組數(shù)據(jù)包進(jìn)行分析,得到分析結(jié)果,并將第二組數(shù)據(jù)包進(jìn)行緩存,以在下一時刻對第二組數(shù)據(jù)包進(jìn)行分析。在本發(fā)明實(shí)施例中,提出了一種高效并行數(shù)據(jù)包處理方法,通過該并行處理方法能夠減少數(shù)據(jù)包處理過程中的指令緩存丟失的概率,進(jìn)一步提高純軟件和模式網(wǎng)絡(luò)數(shù)據(jù)包處理的性能,進(jìn)而緩解了現(xiàn)有的數(shù)據(jù)包處理方法處理效率較慢的技術(shù)問題,從而實(shí)現(xiàn)了提高了數(shù)據(jù)包的數(shù)據(jù)效率的技術(shù)效果。
可選地,所述裝置還包括:獲取單元,用于在讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包之前,獲取待處理的所述第一數(shù)組,其中,所述第一數(shù)組中包括待處理的數(shù)據(jù)包的指針;添加單元,用于將所述第一數(shù)組的指針添加至協(xié)議分組模塊中待處理的指針數(shù)組中,其中,所述協(xié)議分組模塊包括以下至少之一:ip協(xié)議分組模塊,tcp協(xié)議分組模塊,應(yīng)用識別分組模塊。
可選地,所述讀取單元包括:第一讀取模塊,用于在第一時刻,調(diào)用所述ip協(xié)議分組模塊,以使所述ip協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包;第二讀取模塊,用于在第二時刻,調(diào)用所述tcp協(xié)議分組模塊,以使所述tcp協(xié)議分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第二時刻為所述第一時刻之后的時刻;第三讀取模塊,用于在第三時刻,調(diào)用所述應(yīng)用識別分組模塊,以使所述應(yīng)用識別分組模塊讀取當(dāng)前時刻待處理的第一組數(shù)據(jù)包,并預(yù)提取下一時刻待處理的第二組數(shù)據(jù)包,所述第三時刻為所述第二時刻之后的時刻。
可選地,所述第一讀取模塊用于:所述ip協(xié)議分組模塊判斷所述緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述ip協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在ip指針數(shù)組中報文數(shù)量不為零的情況下,所述ip協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
可選地,所述第二讀取模塊用于:在所述ip協(xié)議分組模塊對所述第一數(shù)組中的數(shù)據(jù)包分析完成之后,判斷所述緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述tcp協(xié)議分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在tcp指針數(shù)組中報文數(shù)量不為零的情況下,所述tcp協(xié)議分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
可選地,所述第三讀取模塊用于:在所述tcp協(xié)議分組模塊對所述第一數(shù)組中的數(shù)據(jù)包分析完成之后,判斷所述緩存器中是否包含預(yù)提取的數(shù)據(jù)包;在判斷出是的情況下,所述應(yīng)用識別分組模塊從所述緩存器中提取所述預(yù)提取的數(shù)據(jù)包,并將所述預(yù)提取的數(shù)據(jù)包作為所述第一組數(shù)據(jù)包;在應(yīng)用識別指針數(shù)組中報文數(shù)量不為零的情況下,所述應(yīng)用識別分組模塊基于添加的指針預(yù)提取所述第二組數(shù)據(jù)包,并將所述第二組數(shù)據(jù)包緩存至所述緩存器。
另外,在本發(fā)明實(shí)施例的描述中,除非另有明確的規(guī)定和限定,術(shù)語“安裝”、“相連”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連,可以是兩個元件內(nèi)部的連通。對于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明中的具體含義。
在本發(fā)明的描述中,需要說明的是,術(shù)語“中心”、“上”、“下”、“左”、“右”、“豎直”、“水平”、“內(nèi)”、“外”等指示的方位或位置關(guān)系為基于附圖所示的方位或位置關(guān)系,僅是為了便于描述本發(fā)明和簡化描述,而不是指示或暗示所指的裝置或元件必須具有特定的方位、以特定的方位構(gòu)造和操作,因此不能理解為對本發(fā)明的限制。此外,術(shù)語“第一”、“第二”、“第三”僅用于描述目的,而不能理解為指示或暗示相對重要性。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實(shí)現(xiàn)。以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時可以有另外的劃分方式,又例如,多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個實(shí)施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨(dú)物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,可以存儲在一個處理器可執(zhí)行的非易失的計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機(jī)存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上所述實(shí)施例,僅為本發(fā)明的具體實(shí)施方式,用以說明本發(fā)明的技術(shù)方案,而非對其限制,本發(fā)明的保護(hù)范圍并不局限于此,盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),其依然可以對前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改或可輕易想到變化,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改、變化或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例技術(shù)方案的精神和范圍,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。