一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備。
【背景技術(shù)】
[0002]在防火墻等網(wǎng)絡(luò)設(shè)備中,流量信息的處理一般以網(wǎng)絡(luò)會話(sess1n)為結(jié)點單位。一條網(wǎng)絡(luò)會話以五元組(源IP,目的IP,源端口,目的端口,協(xié)議)等要素作為標(biāo)識,記錄了與所述網(wǎng)絡(luò)會話相關(guān)的各種信息,如:會話何時超時、TCP(Transmiss1n Control Protocol傳輸控制協(xié)議)的當(dāng)前狀態(tài)等等。各個網(wǎng)絡(luò)會話的標(biāo)識以哈希表的形式組織起來,形成sess1n 表。
[0003]RSS(receive side scaling,接收端調(diào)節(jié))是一種網(wǎng)絡(luò)數(shù)據(jù)包分發(fā)機制。為了提升計算機的性能,現(xiàn)代計算機一般采用多核架構(gòu)處理數(shù)據(jù)。當(dāng)基于多核架構(gòu)的網(wǎng)絡(luò)設(shè)備接收到一個網(wǎng)絡(luò)數(shù)據(jù)包時,相關(guān)的網(wǎng)卡需要通過類似RSS的機制決定將這個數(shù)據(jù)包交由哪個CPU處理。當(dāng)其參數(shù)滿足一定條件時,RSS技術(shù)可以保證一條sess1n上兩個方向的數(shù)據(jù)包都映射到一個CPU核上。RSS技術(shù)應(yīng)用廣泛,尤其是在一些高性能的網(wǎng)絡(luò)硬件設(shè)備中,如Intel推出的基于8259910Gb以太網(wǎng)控制器的萬兆網(wǎng)卡就支持使用開發(fā)者給定的參數(shù)通過RSS來進行CPU的任務(wù)分配。
[0004]在多核系統(tǒng)中,sess1n—般是全局唯一的,各個CPU核均可訪問。當(dāng)某個CPU核通過RSS等機制收到數(shù)據(jù)包后,需要確定這個數(shù)據(jù)包是否有對應(yīng)的sess1n結(jié)點,如果有對應(yīng)的sess 1n結(jié)點但可能該sess1n并不是由該CPU核處理。因此,該CPU核首先訪問全局sess1n表,查看全局sess1n表上是否有記錄了該數(shù)據(jù)包信息的sess1n結(jié)點。如果沒有,則在全局sess1n表中添加該sess1n結(jié)點,并在該CPU核上處理該數(shù)據(jù)包;如果有,則通過查到的sess1n結(jié)點提取處理該數(shù)據(jù)包的CPU核的標(biāo)識信息即id號,并將該數(shù)據(jù)包轉(zhuǎn)移給該id號對應(yīng)的CPU核進行處理。
[0005]上述數(shù)據(jù)處理方式可以把各個數(shù)據(jù)分?jǐn)偟礁鱾€核上處理,但卻有著一個明顯的缺陷,即sess1n查詢的全局唯一"性。這種全局性使得多核系統(tǒng)在做sess1n相關(guān)的并發(fā)數(shù)據(jù)操作時,比如多個CPU頻繁訪問全局sess1n表以對sess1n相關(guān)信息進行讀寫操作時,不得不使用頻繁加解鎖操作,從而使相關(guān)網(wǎng)絡(luò)設(shè)備的吞吐量、新建連接數(shù)的性能指標(biāo)受到很大影響(加解鎖操作使得相關(guān)代碼的并發(fā)操作無法完成,對性能影響很大)。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明實施例的主要目的在于提供一種數(shù)據(jù)處理方法及網(wǎng)絡(luò)設(shè)備,以實現(xiàn)提高網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)吞吐量、新建連接數(shù)等的目的。
[0007]為實現(xiàn)上述目的,本發(fā)明實施例提供了一種數(shù)據(jù)處理方法,所述方法應(yīng)用于一種包括至少兩個(PU核的網(wǎng)絡(luò)設(shè)備,每個CPU核分別對應(yīng)有一個無鎖會話表,所述方法包括:
[0008]第一CPU核在接收到第一會話的一方發(fā)送的第一數(shù)據(jù)包后,在對應(yīng)的會話表中建立所述第一會話的會話節(jié)點,其中,所述第一數(shù)據(jù)包是所述第一會話的第一個數(shù)據(jù)包且是網(wǎng)卡通過接收端調(diào)節(jié)RSS算法映射到所述第一CPU核上的,所述RSS算法用于基于變化前的會話標(biāo)識信息使所述第一會話兩個方向上的數(shù)據(jù)包映射到所述第一 CHJ核上,所述會話標(biāo)識信息包括IP地址和/或端口號;
[0009]所述第一CPU核基于變化后的會話標(biāo)識信息,通過RSS算法預(yù)先確定出所述第一會話的另一方發(fā)送的數(shù)據(jù)包將被映射到第二 CHJ核上,將所述第一數(shù)據(jù)包發(fā)送至所述第二 CPU核;
[0010]所述第二CPU核在接收到所述第一數(shù)據(jù)包后,在對應(yīng)的會話表中建立所述第一會話的會話節(jié)點,并處理所述第一數(shù)據(jù)包;
[0011]當(dāng)所述第一CPU核接收到網(wǎng)卡通過RSS算法映射過來的所述第一會話的第二數(shù)據(jù)包時,若查詢到對應(yīng)的會話表中有所述第一會話的會話節(jié)點、且根據(jù)查詢到的會話節(jié)點確定所述第一會話由所述第二 (PU核處理,則將所述第二數(shù)據(jù)包交由所述第二 CPU核處理;
[0012]當(dāng)所述第二CPU核接收到網(wǎng)卡通過RSS算法映射過來的所述第一會話的第二數(shù)據(jù)包時,若查詢到對應(yīng)的會話表中有所述第一會話的會話節(jié)點、且根據(jù)查詢到的會話節(jié)點確定所述第一會話由自己處理,則處理所述第二數(shù)據(jù)包;
[0013]其中,所述第一CPU核和所述第二CPU核屬于所述網(wǎng)絡(luò)設(shè)備。
[0014]優(yōu)選地,在網(wǎng)絡(luò)地址轉(zhuǎn)換NAT的情況下,所述會話標(biāo)識信息為所述第一數(shù)據(jù)包的源IP地址或用戶指定的網(wǎng)絡(luò)端口地址轉(zhuǎn)換NAPT的轉(zhuǎn)換端口。
[0015]優(yōu)選地,所述網(wǎng)卡在非NAT或NAPT的情況下,通過所述RSS算法把同一會話兩個方向的數(shù)據(jù)映射到同一個CPU核上。
[0016]本發(fā)明實施例還提供了一種數(shù)據(jù)處理方法,所述方法應(yīng)用于一種包括至少兩個CHJ核的網(wǎng)絡(luò)設(shè)備,每個CPU核分別對應(yīng)有一個無鎖會話表,所述方法包括:
[0017]第一CPU核在接收到第一會話的一方發(fā)送的第一數(shù)據(jù)包后,在對應(yīng)的會話表中建立所述第一會話的會話節(jié)點,其中,所述第一數(shù)據(jù)包是所述第一會話的第一個數(shù)據(jù)包且是網(wǎng)卡通過接收端調(diào)節(jié)RSS算法映射到所述第一CPU核上的,所述RSS算法用于基于變化前的會話標(biāo)識信息使所述第一會話兩個方向上的數(shù)據(jù)包映射到所述第一 CHJ核上,所述會話標(biāo)識信息包括IP地址和/或端口號;
[0018]所述第一CPU核處理所述第一數(shù)據(jù)包,并基于變化后的會話標(biāo)識信息,通過RSS算法預(yù)先確定出所述第一會話的另一方發(fā)送的數(shù)據(jù)包將被映射到第二 CHJ核上,將所述第一數(shù)據(jù)包發(fā)送至所述第二 CPU核;
[0019]所述第二CPU核在接收到所述第一數(shù)據(jù)包后,在對應(yīng)的會話表中建立所述第一會話的會話節(jié)點;
[0020]當(dāng)所述第二CPU核接收到網(wǎng)卡通過RSS算法映射過來的所述第一會話的第二數(shù)據(jù)包時,若查詢到對應(yīng)的會話表中有所述第一會話的會話節(jié)點、且根據(jù)查詢到的會話節(jié)點確定所述第一會話由所述第一 (PU核處理,則將所述第二數(shù)據(jù)包交由所述第一 CPU核處理;
[0021 ]當(dāng)所述第一 CPU核接收到網(wǎng)卡通過RSS算法映射過來的所述第一會話的第二數(shù)據(jù)包時,若查詢到對應(yīng)的會話表中有所述第一會話的會話節(jié)點、且根據(jù)查詢到的會話節(jié)點確定所述第一會話由自己處理,則處理所述第二數(shù)據(jù)包;
[0022]其中,所述第一CPU核和所述第二CPU核屬于所述網(wǎng)絡(luò)設(shè)備。
[0023]優(yōu)選地,在網(wǎng)絡(luò)地址轉(zhuǎn)換NAT的情況下,所述會話標(biāo)識信息為所述第一數(shù)據(jù)包的源IP地址或用戶指定的網(wǎng)絡(luò)端口地址轉(zhuǎn)換NAPT的轉(zhuǎn)換端口。
[0024]優(yōu)選地,所述網(wǎng)卡在非NAT或NAPT的情況下,通過所述RSS算法把同一會話兩個方向的數(shù)據(jù)映射到同一個CPU核上。
[0025]本發(fā)明實施例還提供了一種網(wǎng)絡(luò)設(shè)備,所述網(wǎng)絡(luò)設(shè)備包括至少兩個CHJ核,每個CHJ核分別對應(yīng)有一個無鎖會話表;
[0026]第一CPU核,用于在接收到第一會話的一方發(fā)送的第一數(shù)據(jù)包后,在對應(yīng)的會話表中建立所述第一會話的會話節(jié)點,其中,所述第一數(shù)據(jù)包是所述第一會話的第一個數(shù)據(jù)包且是網(wǎng)卡通過接收端調(diào)節(jié)RSS算法映射到所述第一CPU核上的,所述RSS算法用于基于變化前的會話標(biāo)識信息使所述第一會話兩個方向上的數(shù)據(jù)包映射到所述第一 CPU核上,所述會話標(biāo)識信息包括IP地址和/或端口號;基于變化后的會話標(biāo)識信息,通過RSS算法預(yù)先確定出所述第一會話的另一方發(fā)送的數(shù)據(jù)包將被映射到第二 CPU核上,將所述第一數(shù)據(jù)包發(fā)送至所述第二 (PU核;
[0027]所述第二CPU核,用于在接收到所述第一數(shù)據(jù)包后,在對應(yīng)的會話表中建立所述第一會話的會話節(jié)點,并處理所述第一數(shù)據(jù)包;
[0028]所述第一CPU核,還用于當(dāng)接收到網(wǎng)卡通過RSS算法映射過來的所述第一會話的第二數(shù)據(jù)包時,若查詢到對應(yīng)的會話表中有所述第一會話的會話節(jié)點、且根據(jù)查詢到的會話節(jié)點確定所述第一會話由所述第二 CHJ核處理,則將所述第二數(shù)據(jù)包交由所述第二 CPU核處理;
[0029]所述第