一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法、裝置和網(wǎng)絡(luò)處理設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息處理技術(shù)領(lǐng)域,特別是涉及一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法、裝置和網(wǎng)絡(luò)處理設(shè)備。
【背景技術(shù)】
[0002]隨著硬件技術(shù)的發(fā)展,目前多核CPU的使用已經(jīng)非常普遍,尤其是在網(wǎng)絡(luò)處理服務(wù)器方面。但是,如果沒有良好的軟件架構(gòu)設(shè)計(jì),系統(tǒng)總的CPU使用率只能維持在較低的水平,這就存在較大資源浪費(fèi)。為了處理高速網(wǎng)絡(luò)流量(比如lGbps、10Gbps,甚至更高),對當(dāng)前軟件架構(gòu)進(jìn)行改進(jìn)可以充分發(fā)揮多核CPU的優(yōu)勢。
[0003]為提高整個(gè)系統(tǒng)的CPU使用效率,常見有兩種方法:多線程和多進(jìn)程。多線程方式可以較好發(fā)揮多核CPU的性能,但是為了避免線程間競爭,需要使到線程鎖,而線程鎖的開銷可能會占到CPU總開銷的30%,這是一個(gè)不小的資源浪費(fèi),而且多線程實(shí)現(xiàn)方式對于代碼編寫還提出了更高要求。在多進(jìn)程處理方式中,多個(gè)進(jìn)程都需要從網(wǎng)卡收包,而包捕獲是一項(xiàng)消耗CPU資源的工作,這對CPU資源造成了極大浪費(fèi),甚至?xí)虼嗽斐蓙G包。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施方式提出一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法和處理裝置,以降低CPU資源浪費(fèi)。
[0005]本發(fā)明實(shí)施方式還提出一種網(wǎng)絡(luò)處理設(shè)備,以降低CPU資源浪費(fèi)。
[0006]本發(fā)明實(shí)施方式的技術(shù)方案如下:
[0007]一種網(wǎng)絡(luò)數(shù)據(jù)包處理方法,包括:
[0008]經(jīng)由網(wǎng)絡(luò)接收數(shù)據(jù)包,并將接收的數(shù)據(jù)包存儲到預(yù)定緩存空間;
[0009]并行處理所述預(yù)定緩存空間中的所述數(shù)據(jù)包。
[0010]所述預(yù)定緩存空間包括一數(shù)據(jù)包緩存隊(duì)列環(huán);該方法包括:
[0011]基于該數(shù)據(jù)包的接收編號以及所述數(shù)據(jù)包緩存隊(duì)列環(huán)包含的存儲單元總數(shù),確定該數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置。
[0012]所述預(yù)定緩存空間還包括一數(shù)據(jù)包獲取隊(duì)列環(huán),所述數(shù)據(jù)包獲取隊(duì)列環(huán)中保存有該數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置。
[0013]所述數(shù)據(jù)包獲取隊(duì)列環(huán)還保存有與該存儲位置關(guān)聯(lián)的該數(shù)據(jù)包接收編號和數(shù)據(jù)包長度。
[0014]所述預(yù)定緩存空間還包括一指向該數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置的指針。
[0015]該方法包括:
[0016]在所述數(shù)據(jù)包獲取隊(duì)列環(huán)中確定一目標(biāo)數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置;
[0017]從所確定的存儲位置處獲取并處理該目標(biāo)數(shù)據(jù)包。
[0018]該方法包括:
[0019]從該數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置開始,按照節(jié)點(diǎn)遞減順序查找接收編號小于或等于該目標(biāo)數(shù)據(jù)包接收編號的匹配節(jié)點(diǎn),當(dāng)找到匹配節(jié)點(diǎn)時(shí),獲取該匹配節(jié)點(diǎn)與數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置之間所有節(jié)點(diǎn)各自保存的存儲位置,并利用所述存儲位置從所述數(shù)據(jù)包緩存隊(duì)列環(huán)中獲取并處理該目標(biāo)數(shù)據(jù)包。
[0020]該方法還包括,
[0021]當(dāng)遞減到所述數(shù)據(jù)包獲取隊(duì)列環(huán)的第一節(jié)點(diǎn)還找不到匹配節(jié)點(diǎn)時(shí),從所述數(shù)據(jù)包獲取隊(duì)列環(huán)的最末節(jié)點(diǎn)開始按照節(jié)點(diǎn)遞減順序查找接收編號小于或等于該目標(biāo)數(shù)據(jù)包的接收編號的匹配節(jié)點(diǎn),一直查找到該數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置;其中在該查找過程中,當(dāng)找到匹配節(jié)點(diǎn)時(shí),獲取該匹配節(jié)點(diǎn)與數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置之間所有節(jié)點(diǎn)各自保存的存儲位置,并利用所述存儲位置從所述數(shù)據(jù)包緩存隊(duì)列環(huán)中獲取并處理該目標(biāo)數(shù)據(jù)包。
[0022]所述節(jié)點(diǎn)遞減順序?yàn)橹鹨贿f減、按照固定值遞減或無規(guī)律遞減。
[0023]該方法還包括:
[0024]緩存之前所處理數(shù)據(jù)包在數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置;
[0025]繼續(xù)從所述數(shù)據(jù)包緩存隊(duì)列環(huán)獲取并處理該存儲位置之后的數(shù)據(jù)包。
[0026]該方法還包括:
[0027]計(jì)算之前所處理數(shù)據(jù)包在數(shù)據(jù)包獲取隊(duì)列環(huán)的對應(yīng)位置與該數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置之間的差值,當(dāng)所述差值與該數(shù)據(jù)包獲取隊(duì)列環(huán)長度之比低于預(yù)先設(shè)定的門限值時(shí),停止處理所述預(yù)定緩存空間中的所述數(shù)據(jù)包。
[0028]一種網(wǎng)絡(luò)數(shù)據(jù)包處理裝置,包括:
[0029]接收單元,用于經(jīng)由網(wǎng)絡(luò)接收數(shù)據(jù)包,并將接收的數(shù)據(jù)包存儲到預(yù)定緩存空間;
[0030]處理單元,用于并行處理所述預(yù)定緩存空間中的所述數(shù)據(jù)包。
[0031]所述預(yù)定緩存空間包括一數(shù)據(jù)包緩存隊(duì)列環(huán);
[0032]該接收單元,用于基于該數(shù)據(jù)包的接收編號以及所述數(shù)據(jù)包緩存隊(duì)列環(huán)包含的存儲單元總數(shù),確定該數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置。
[0033]所述預(yù)定緩存空間還包括一數(shù)據(jù)包獲取隊(duì)列環(huán),所述數(shù)據(jù)包獲取隊(duì)列環(huán)中保存有該數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置。
[0034]所述數(shù)據(jù)包獲取隊(duì)列環(huán)還保存與該存儲位置關(guān)聯(lián)的該數(shù)據(jù)包接收編號和數(shù)據(jù)包長度。
[0035]該處理單元,用于在所述數(shù)據(jù)包獲取隊(duì)列環(huán)中確定一目標(biāo)數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置,并從所確定的存儲位置處獲取并處理該目標(biāo)數(shù)據(jù)包。
[0036]該接收單元包括一個(gè)接收進(jìn)程;該處理單元包括多個(gè)處理進(jìn)程。
[0037]所述數(shù)據(jù)包獲取隊(duì)列環(huán)的數(shù)目為至少兩個(gè),每個(gè)數(shù)據(jù)包獲取隊(duì)列環(huán)與各自處理進(jìn)程相對應(yīng);
[0038]每個(gè)數(shù)據(jù)包獲取隊(duì)列環(huán)保存有相對應(yīng)處理進(jìn)程的數(shù)據(jù)包在所述數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置;
[0039]該處理單元,用于使所述多個(gè)處理進(jìn)程并行從各自對應(yīng)的數(shù)據(jù)包獲取隊(duì)列環(huán)獲取數(shù)據(jù)包存儲位置,還并行處理對應(yīng)于各自存儲位置的數(shù)據(jù)包。
[0040]該處理單元,還用于計(jì)算之前所處理數(shù)據(jù)包在數(shù)據(jù)包獲取隊(duì)列環(huán)的對應(yīng)位置與該數(shù)據(jù)包獲取隊(duì)列環(huán)當(dāng)前位置之間的差值,當(dāng)所述差值與該數(shù)據(jù)包獲取隊(duì)列環(huán)長度之比低于預(yù)先設(shè)定的門限值時(shí),停止處理所述預(yù)定緩存空間中的所述數(shù)據(jù)包。
[0041]一種網(wǎng)絡(luò)處理設(shè)備,包括如上任一項(xiàng)的網(wǎng)絡(luò)數(shù)據(jù)包處理裝置
[0042]從上述技術(shù)方案可以看出,本發(fā)明實(shí)施方式提出一種基于共享緩存空間的多進(jìn)程包處理方式,將數(shù)據(jù)包接收工作和包處理工作分離,各個(gè)處理進(jìn)程并行處理數(shù)據(jù)包,可以充分發(fā)揮多核CPU的優(yōu)勢,降低CPU資源浪費(fèi)。
[0043]而且,本發(fā)明實(shí)施方式通過對多核CPU設(shè)備的軟件架構(gòu)進(jìn)行調(diào)整,基于共享緩存結(jié)構(gòu)將收包和處理包工作進(jìn)行了分離,可以顯著提高設(shè)備的包處理性能,進(jìn)而減少總項(xiàng)目的成本。而且,本發(fā)明實(shí)施方式通過處理進(jìn)程和深度處理進(jìn)程池的設(shè)置,對流量進(jìn)行分流處理,對CPU消耗類工作并行處理,可以明顯降低系統(tǒng)的丟包率。還有,在本發(fā)明實(shí)施方式中,不同的處理進(jìn)程可以拿到同樣的流量,并完成不同類型的處理工作。另外,本發(fā)明實(shí)施方式依靠數(shù)據(jù)包序列號處理機(jī)制可以獲知處理進(jìn)程丟包情況,實(shí)施簡單,可以使用較廉價(jià)的服務(wù)器完成專業(yè)網(wǎng)絡(luò)處理器的工作。
【附圖說明】
[0044]圖1為根據(jù)本發(fā)明實(shí)施方式網(wǎng)絡(luò)數(shù)據(jù)包處理方法流程圖。
[0045]圖2為根據(jù)本發(fā)明實(shí)施方式網(wǎng)絡(luò)數(shù)據(jù)包處理裝置示意圖。
[0046]圖3為根據(jù)本發(fā)明實(shí)施方式的共享緩存空間數(shù)據(jù)結(jié)構(gòu)示意圖。
[0047]圖4為根據(jù)本發(fā)明實(shí)施方式的共享緩存空間工作原理第一示意圖。
[0048]圖5為根據(jù)本發(fā)明實(shí)施方式的共享緩存空間工作原理第二示意圖。
[0049]圖6為根據(jù)本發(fā)明實(shí)施方式的惡意軟件掃描系統(tǒng)結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0050]為了使本發(fā)明的技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施方式,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的【具體實(shí)施方式】僅僅用以闡述性說明本發(fā)明,并不用于限定本發(fā)明的保護(hù)范圍。
[0051]為了描述上的簡潔和直觀,下文通過描述若干代表性的實(shí)施方式來對本發(fā)明的方案進(jìn)行闡述。實(shí)施方式中大量的細(xì)節(jié)僅用于幫助理解本發(fā)明的方案。但是很明顯,本發(fā)明的技術(shù)方案實(shí)現(xiàn)時(shí)可以不局限于這些細(xì)節(jié)。為了避免不必要地模糊了本發(fā)明的方案,一些實(shí)施方式?jīng)]有進(jìn)行細(xì)致地描述,而是僅給出了框架。下文中,“包括”是指“包括但不限于”,“根據(jù)……”是指“至少根據(jù)……,但不限于僅根據(jù)……”。由于漢語的語言習(xí)慣,下文中沒有特別指出一個(gè)成分的數(shù)量時(shí),意味著該成分可以是一個(gè)也可以是多個(gè),或可理解為至少一個(gè)。
[0052]在本發(fā)明實(shí)施方式中,提出一種基于共享緩存空間的多進(jìn)程包處理方式,將收包工作和包處理工作分離,各個(gè)處理進(jìn)程并行處理數(shù)據(jù)包,可以充分發(fā)揮多核CPU的優(yōu)勢,明顯提高設(shè)備的網(wǎng)絡(luò)吞吐量。
[0053]圖1為根據(jù)本發(fā)明實(shí)施方式網(wǎng)絡(luò)數(shù)據(jù)包處理方法流程圖。
[0054]如圖1所示,該方法包括:
[0055]步驟SlOl:經(jīng)由網(wǎng)絡(luò)接收數(shù)據(jù)包,并將接收的數(shù)據(jù)包存儲到預(yù)定緩存空間。
[0056]在這里,可以經(jīng)由諸如有線網(wǎng)、光纖網(wǎng)、無線網(wǎng)、局域網(wǎng)、城域網(wǎng)、廣域網(wǎng)等各種類型的網(wǎng)絡(luò)接收數(shù)據(jù)包。比如,可以通過一或多個(gè)以太網(wǎng)卡從網(wǎng)絡(luò)接收數(shù)據(jù)包。
[0057]預(yù)定緩存空間可以包括利用線性數(shù)組建立的數(shù)據(jù)包緩存隊(duì)列環(huán)。在數(shù)據(jù)包緩存隊(duì)列環(huán)中具有多個(gè)存儲單元,每個(gè)存儲單元的存儲空間可以相同,也可以各不相同。當(dāng)經(jīng)由網(wǎng)絡(luò)接收到數(shù)據(jù)包之后,各個(gè)數(shù)據(jù)包具有各自的接收編號。比如,網(wǎng)卡可以基于數(shù)據(jù)包接收時(shí)間順序,為各個(gè)數(shù)據(jù)包分配相應(yīng)的接收編號。
[0058]在一個(gè)實(shí)施方式中,可以基于該數(shù)據(jù)包的接收編號以及數(shù)據(jù)包緩存隊(duì)列環(huán)包含的存儲單元總數(shù),確定該數(shù)據(jù)包在數(shù)據(jù)包緩存隊(duì)列環(huán)中的存儲位置。
[0059]比如,對于接