一種網(wǎng)絡(luò)數(shù)據(jù)分發(fā)方法及網(wǎng)絡(luò)設(shè)備的制造方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
,尤其涉及一種網(wǎng)絡(luò)數(shù)據(jù)分發(fā)方法及網(wǎng)絡(luò)設(shè)備?!?br>背景技術(shù):
】[0002]為了提升計(jì)算機(jī)的性能,現(xiàn)代計(jì)算機(jī)一般采用多核架構(gòu)處理數(shù)據(jù)。對(duì)于基于多核架構(gòu)的網(wǎng)絡(luò)設(shè)備而言,當(dāng)它接收到一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包時(shí),相關(guān)的網(wǎng)卡需要通過(guò)一種機(jī)制決定將這個(gè)數(shù)據(jù)包交給哪個(gè)CPU處理,RSS(receivesidescaling)就是這樣一種機(jī)制。RSS應(yīng)用廣泛,尤其是在一些高性能的網(wǎng)絡(luò)硬件設(shè)備中,如Intel推出的基于8259910Gb以太網(wǎng)控制器的萬(wàn)兆網(wǎng)卡就支持使用開(kāi)發(fā)者給定的參數(shù)通過(guò)RSS來(lái)進(jìn)行CPU的任務(wù)分配。[0003]除了用硬件實(shí)現(xiàn)RSS算法外,RSS算法的軟件實(shí)現(xiàn)也具有重要意義。一方面,隨著虛擬化技術(shù)的發(fā)展,用軟件模擬硬件行為已經(jīng)成為重要的發(fā)展方向,另一方面,通過(guò)軟件實(shí)現(xiàn)RSS算法,可以及時(shí)地預(yù)測(cè)RSS網(wǎng)卡硬件的行為,進(jìn)而實(shí)現(xiàn)程序開(kāi)發(fā)上的優(yōu)化。例如,在實(shí)際的應(yīng)用場(chǎng)景中,如NAPT(NetworkAddressPortTranslation,網(wǎng)絡(luò)端口地址轉(zhuǎn)換),為了提升計(jì)算機(jī)系統(tǒng)的使用效能,網(wǎng)絡(luò)會(huì)話(session)信息的記錄往往是與特定的CPU綁定的。因此,常常希望一條會(huì)話兩個(gè)方向上的數(shù)據(jù)包在RSS作用下均能分配到同一個(gè)CPU核上,為了保證這一點(diǎn),就需要在數(shù)據(jù)包做NAPT時(shí)進(jìn)行相應(yīng)的RSS軟件計(jì)算。[0004]如圖1所示的RSS處理流程示意圖,可簡(jiǎn)要表述為如下幾個(gè)步驟:[0005]步驟1、確定入?yún)?。入?yún)ㄒ粋€(gè)40字節(jié)(320比特)的關(guān)鍵字key和一個(gè)長(zhǎng)度為128的數(shù)組分配表redirectiontable。一般情況下,這兩個(gè)入?yún)⒖梢杂砷_(kāi)發(fā)者指定,以滿(mǎn)足特定場(chǎng)景下的計(jì)算需求。Key用于計(jì)算hash(哈希)值,redirectiontable則用于將hash值映射到各個(gè)CPU(即各個(gè)發(fā)送隊(duì)列的id)上。[0006]步驟2、根據(jù)key和輸入的網(wǎng)絡(luò)數(shù)據(jù)信息input(input從已解析的接收數(shù)據(jù)包中獲?。┩ㄟ^(guò)給定的hash算法計(jì)算出一個(gè)32位的hash值。其中,Input的選取一般有兩種形式,一種是取源IP與目的IP二元組連接成的數(shù)據(jù)段,另一種是取源IP、目的IP、源端口、目的端口四元組連接成的數(shù)據(jù)段。在計(jì)算TCP(TransmissionControlProtocol,傳輸控制協(xié)議)、UDP(UserDatagramProtocol,用戶(hù)數(shù)據(jù)報(bào)協(xié)議)等常用數(shù)據(jù)包時(shí),一般都采用后一種即四元組的數(shù)據(jù)形式作為input,四元組形式下input共包含12個(gè)字節(jié),它作為一串96(8*12=96)位的0/1數(shù)字參與如下計(jì)算。關(guān)于采用hash算法計(jì)算出的32位hash值,由如下方式產(chǎn)生:[0007](1)、先將32位hash值(采用result表示)的初值置為0;[0008](2)、如果input最左端的一位為1,則將result更新為result自身與key最左端32位的異或值。否則,保持result不變。[0009](3)將input與key均左移一位。[0010](4)如果input各個(gè)位均為0,則將當(dāng)前得到的result作為輸出結(jié)果。否則,重復(fù)⑵⑶⑷。[0011]步驟3、取出作為輸出結(jié)果的result的7位最低有效位(LSB,即32位二進(jìn)制hash值的最右側(cè)7位),找出redirectiontable中下標(biāo)與所述7位最低有效位數(shù)值相同的數(shù)組。[0012]步驟4、讀取步驟3中找出數(shù)組對(duì)應(yīng)的id值。[0013]根據(jù)上述RSS處理流程可知,RSS算法的hash值是一系列異或運(yùn)算的組合,當(dāng)用軟件方法模擬RSS分發(fā)數(shù)據(jù)包時(shí),每次運(yùn)算的計(jì)算量與輸入數(shù)據(jù)input有關(guān),即,通過(guò)判斷input中96個(gè)比特的每一位是否為1來(lái)確定異或運(yùn)算的內(nèi)容。在最壞的情況下,一次RSS運(yùn)算需要96次的判斷與96次異或運(yùn)算,在平均情況下,一次運(yùn)算需要96次的判斷與48次異或運(yùn)算,但是,這樣的計(jì)算量顯然過(guò)大,其計(jì)算性能無(wú)法讓人滿(mǎn)意。【
發(fā)明內(nèi)容】[0014]有鑒于此,本發(fā)明實(shí)施例的主要目的在于提供一種網(wǎng)絡(luò)數(shù)據(jù)分發(fā)方法及網(wǎng)絡(luò)設(shè)備,以實(shí)現(xiàn)提高網(wǎng)絡(luò)數(shù)據(jù)分發(fā)速度的目的。[0015]為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)數(shù)據(jù)分發(fā)方法,包括:[0016]網(wǎng)絡(luò)設(shè)備獲取第一參數(shù),所述第一參數(shù)包含了當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)的流向信息,所述第一參數(shù)為二進(jìn)制數(shù)且所述第一參數(shù)的比特位數(shù)為A的倍數(shù);[0017]獲取預(yù)設(shè)的關(guān)鍵字,所述關(guān)鍵字的比特位數(shù)為A的倍數(shù)且每組A個(gè)比特位周期性相同;[0018]從所述A個(gè)比特位中提取比特位為1或0的各個(gè)比特位;[0019]在所述各個(gè)比特位中,確定每一比特位在所述第一參數(shù)中的影響區(qū)間,所述影響區(qū)間包括B個(gè)比特位;[0020]將所有影響區(qū)間按位進(jìn)行異或運(yùn)算,得到比特位數(shù)為B的第二參數(shù);[0021]若所述A個(gè)比特位中比特位為1的位數(shù)不超過(guò)A/2或所述第一參數(shù)中比特位為1的位數(shù)為奇數(shù),則將所述第二參數(shù)取逆序并取反后得到第三參數(shù),若所述A個(gè)比特位中比特位為1的位數(shù)超過(guò)A/2且所述第一參數(shù)中比特位為1的位數(shù)為偶數(shù),則將所述第二參數(shù)取逆序后得到第三參數(shù);[0022]根據(jù)所述第三參數(shù)讀取預(yù)設(shè)的數(shù)組分配表中的身份標(biāo)識(shí)號(hào)碼,并將所述當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)分配給所述身份標(biāo)識(shí)號(hào)碼對(duì)應(yīng)的CPU核處理;[0023]其中,A、B為大于0的自然數(shù),A大于或等于B。[0024]優(yōu)選地,所述獲取第一參數(shù),包括:[0025]從輸入數(shù)據(jù)流中提取當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)的流向信息,所述流向信息包括源IP地址、目的IP地址、源端口號(hào)及目的端口號(hào);[0026]利用所述流向信息形成比特位數(shù)為C的流向參數(shù),所述流向參數(shù)從左到右依次為:比特位數(shù)為D的源IP地址、比特位數(shù)為E的目的IP地址、比特位數(shù)為F的源端口號(hào)及比特位數(shù)為G的目的端口號(hào),其中,D+E+F+G=C;[0027]將所述流向參數(shù)拆分成H塊,且每塊中的比特位數(shù)為A的倍數(shù);[0028]將每塊參數(shù)的比特位按位進(jìn)行異或運(yùn)算,得到第一參數(shù)。[0029]優(yōu)選地,所述從所述A個(gè)比特位中提取比特位為1或0的各個(gè)比特位,包括:[0030]確定所述A個(gè)比特位中比特位為1的個(gè)數(shù)nk;[0031]若叫小于或等于A/2,則提取所述A個(gè)比特位中比特位為1的各個(gè)比特位;[0032]若nk大于A/2,則提取所述A個(gè)比特位中比特位為0的各個(gè)比特位。[0033]優(yōu)選地,所述在所述各個(gè)比特位中,確定每一比特位在所述第一參數(shù)中的影響區(qū)間,包括:[0034]根據(jù)所述各個(gè)比特位中每一比特位的序列號(hào)b,計(jì)算每一比特位在所述第一參數(shù)中的影響區(qū)間,所述影響區(qū)間為[((b%A)+l),(((b+6)%A)+l)]。[0035]優(yōu)選地,A=16,B=7,C=96,D=E=32,F=G=16。[0036]本發(fā)明實(shí)施例還提供了一種網(wǎng)絡(luò)設(shè)備,包括:[0037]第一參數(shù)獲取單元,用于獲取第一參數(shù),所述第一參數(shù)包含了當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)的流向信息,所述第一參數(shù)為二進(jìn)制數(shù)且所述第一參數(shù)的比特位數(shù)為A的倍數(shù);[0038]關(guān)鍵字獲取單元,用于獲取預(yù)設(shè)的關(guān)鍵字,所述關(guān)鍵字的比特位數(shù)為A的倍數(shù)且每組A個(gè)比特位周期性相同;[0039]比特位提取單元,用于從所述關(guān)鍵字獲取單元獲取的關(guān)鍵字中的A個(gè)比特位中提取比特位為1或0的各個(gè)比特位;[0040]影響區(qū)間確定單元,用于在所述比特位提取單元提取的各個(gè)比特位中,確定每一比特位在所述第一參數(shù)獲取單元獲取的第一參數(shù)中的影響區(qū)間,所述影響區(qū)間包括B個(gè)比特位;[0041]第二參數(shù)計(jì)算單元,用于將所述影響區(qū)間確定單元確定的所有影響區(qū)間按位進(jìn)行異或運(yùn)算,得到比特位數(shù)為B的第二參數(shù);[0042]第三參數(shù)計(jì)算單元,用于若所述關(guān)鍵字獲取單元獲取的關(guān)鍵字中的A個(gè)比特位中比特位為1的位數(shù)不超過(guò)A/2或所述第一參數(shù)獲取單元獲取的第一參數(shù)中比特位為1的位數(shù)為奇數(shù),則將所述第二參數(shù)計(jì)算單元計(jì)算得到的第二參數(shù)取逆序并取反后得到第三參數(shù),若所述所述關(guān)鍵字獲取單元獲取的關(guān)鍵字中的A個(gè)比特位中比特位為1的位數(shù)超過(guò)A/2且所述第一參數(shù)獲取單元獲取的第一參數(shù)中比特位為1的位數(shù)為偶數(shù),則將所述第二參數(shù)計(jì)算單元計(jì)算得到的第二參數(shù)取逆序后得到第三參數(shù);[0043]網(wǎng)絡(luò)數(shù)據(jù)分發(fā)單元,用于根據(jù)所述第三參數(shù)計(jì)算單元計(jì)算得到的第三參數(shù)讀取預(yù)設(shè)的數(shù)組分配表中的身份標(biāo)識(shí)號(hào)碼,并將所述當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)分配給所述身份標(biāo)識(shí)號(hào)碼對(duì)應(yīng)的CPU核處理;[0044]其中,A、B為大于0的自然數(shù),A大于或等于B。[0045]優(yōu)選地,所述第一參數(shù)獲取單元,包括:[0046]信息提取模塊,用于從輸入數(shù)據(jù)流中提取當(dāng)前網(wǎng)絡(luò)數(shù)據(jù)的流向信息,所述流向信息包括源IP地址、目的IP地址、源端口號(hào)及目的端口號(hào);[0047]參數(shù)形成模塊,用于利用所述信息提取模塊提取的流向信息形成比特位數(shù)為C的流向參數(shù),所述流向參數(shù)從左到右依次為:比特位數(shù)為D的源IP地址、比特位數(shù)為E的目的IP地址、比特位數(shù)為F的源端口號(hào)及比特位數(shù)為G的目的端口號(hào),其中,D+E+F+G=C;[0048]參數(shù)拆分模塊,用于將所述參數(shù)形成模塊形成的流向參數(shù)拆分成H塊,且每塊中的比特位數(shù)為A的倍數(shù);[0049]參數(shù)計(jì)算模塊,用于將所述參數(shù)拆分模塊拆分的每塊參數(shù)的比特位按位進(jìn)行異或運(yùn)算,得到第一參數(shù)。[0050]優(yōu)選地,所述比特位提取單元,包括:[0051]個(gè)數(shù)確定模塊,用于確定所述A個(gè)比特位中比特位為1的個(gè)數(shù)nk;[0052]第一提取模塊,用于若所述個(gè)數(shù)確定模塊確定的nk小于或等于A/2,則提取所述A個(gè)比特位中比特位為1的各個(gè)比特位;[0053]第二提取模塊,用于若所述個(gè)數(shù)確定模塊確定的nk大于A/2,則提取所述A個(gè)比特位中比特位為0的各個(gè)比特位。[0054]優(yōu)選地,所述影響區(qū)間確定單元,具體用于根據(jù)所述各個(gè)比特位中每一比特位的序列號(hào)b,計(jì)算每一比特位在所述第一參數(shù)中的影響區(qū)間,所述影響區(qū)間為[((b%A)+l),(((b+6)%A)+l)]〇[0055]優(yōu)選地,A=16,B=7,C=96,D=E=當(dāng)前第1頁(yè)1 2 3 4 5