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