本發(fā)明涉及FPGA(Field-Programmable Gate Array,現(xiàn)場(chǎng)可編程門(mén)陣列)、有線數(shù)字通信和網(wǎng)絡(luò)數(shù)據(jù)流管理領(lǐng)域,尤其涉及一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的裝置及方法。
背景技術(shù):
網(wǎng)絡(luò)流表是實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)流管理的一種方式。網(wǎng)絡(luò)中含有相同五元組(源ip地址、目的ip地址、源端口號(hào)、目的端口號(hào)和協(xié)議類型)的數(shù)據(jù)包組成了一條數(shù)據(jù)流,通過(guò)對(duì)每條數(shù)據(jù)流建立表項(xiàng)的方式,對(duì)數(shù)據(jù)流的所有數(shù)據(jù)包進(jìn)行統(tǒng)一處理。例如,對(duì)某條數(shù)據(jù)流的數(shù)據(jù)包個(gè)數(shù)進(jìn)行統(tǒng)計(jì),或?qū)δ硹l數(shù)據(jù)流的所有數(shù)據(jù)包統(tǒng)一轉(zhuǎn)發(fā)到某一個(gè)端口。
現(xiàn)在網(wǎng)絡(luò)中的每條10G光纖線路所包含的數(shù)據(jù)流數(shù)量是千萬(wàn)級(jí)的。要實(shí)現(xiàn)對(duì)如此大規(guī)模的數(shù)據(jù)流建流表需要使用大容量存儲(chǔ)器,即動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)。查找方式采用hash方式,如圖1所示,即對(duì)五元組進(jìn)行hash計(jì)算,hash值作為地址在DRAM中查找表項(xiàng),如果表項(xiàng)中的五元組與被查找五元組一致,則說(shuō)明查找正確,再按流表內(nèi)容對(duì)數(shù)據(jù)包進(jìn)行處理,對(duì)流表內(nèi)容進(jìn)行更新;如果流表中的五元組與被查找五元組不一致,則表示hash沖突,需要再建立一條表項(xiàng)(即建流)。
目前大多采用CPU或FPGA查找流表,查完一個(gè)數(shù)據(jù)包的五元組才能查下一個(gè),如圖2所示。對(duì)DRAM的讀寫(xiě)比較隨機(jī),沒(méi)有規(guī)律。由于DRAM的讀寫(xiě)操作之間有延遲,隨機(jī)查找會(huì)大幅度降低DRAM的讀取效率,在DRAM控制器數(shù)量有限的情況下,使單板處理能力降低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的裝置及方法,用FPGA內(nèi)部可編程邏輯器件的現(xiàn)有資源實(shí)現(xiàn)一種硬件裝置,該裝置提高了DRAM的讀取速率,從而提高網(wǎng)絡(luò)流表的查找效率。
為達(dá)到上述目的,本發(fā)明采用的技術(shù)方案為:
一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的裝置,包括內(nèi)存控制器、分組模塊、索引處理模塊、查找模塊、更新模塊;
所述內(nèi)存控制器用于控制查找及返回hash索引、查找及返回hash節(jié)點(diǎn)信息、更新流表中的hash節(jié)點(diǎn);
所述分組模塊用于將輸入數(shù)據(jù)包的五元組進(jìn)行第一次hash計(jì)算,根據(jù)產(chǎn)生的8bit hash值分成256組數(shù)據(jù)包,其中每一組數(shù)據(jù)包的hash值相同;
所述索引處理模塊用于從256組數(shù)據(jù)包中各提取一個(gè)數(shù)據(jù)包五元組進(jìn)行第二次hash計(jì)算,得到固定寬度為29bit的DRAM讀地址,并緩存各五元組信息以及按順序通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找并接收hash索引;
所述查找模塊用于將有效索引地址通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找并接收流表中hash節(jié)點(diǎn)的內(nèi)容;
所述更新模塊用于對(duì)流表中hash節(jié)點(diǎn)進(jìn)行更新操作。
進(jìn)一步地,所述查找hash索引是以hash值作為地址,查找存儲(chǔ)在內(nèi)存中的hash節(jié)點(diǎn)地址的索引表。
進(jìn)一步地,所述有效索引為hash索引表中的有效bit位為1,即內(nèi)存中已有hash節(jié)點(diǎn)。
進(jìn)一步地,所述索引處理模塊包括查找索引模塊、先入先出模塊、接收索引模塊;
所述查找索引模塊從256組數(shù)據(jù)包中各提取一個(gè)數(shù)據(jù)包五元組進(jìn)行第二次hash計(jì)算,得到固定寬度為29bit的DRAM讀地址,并按順序通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找hash索引;
所述先入先出模塊用于緩存各五元組信息;
所述接收索引模塊接收內(nèi)存返回的hash索引結(jié)果。
進(jìn)一步地,所述查找模塊包括查找節(jié)點(diǎn)模塊、先入先出模塊、接收節(jié)點(diǎn)模塊;
所述查找節(jié)點(diǎn)模塊根據(jù)索引地址,通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找流表中hash節(jié)點(diǎn)的內(nèi)容;
所述先入先出模塊用于緩存各流表中hash節(jié)點(diǎn)的五元組信息;
所述接收節(jié)點(diǎn)模塊接收內(nèi)存返回的流表中hash節(jié)點(diǎn)的內(nèi)容。
一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的方法,其步驟包括:
1)將輸入數(shù)據(jù)包的五元組進(jìn)行第一次hash計(jì)算,根據(jù)產(chǎn)生的8bit hash值分成256組數(shù)據(jù)包并存儲(chǔ);
2)從256組數(shù)據(jù)包中各提取一個(gè)數(shù)據(jù)包五元組進(jìn)行第二次hash計(jì)算,得到固定寬度為29bit的DRAM讀地址;
3)按順序通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找hash索引,并緩存各五元組信息;
4)從內(nèi)存中得到hash索引,將有效索引地址作為讀地址通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,并在內(nèi)存中查找hash節(jié)點(diǎn);
5)若hash節(jié)點(diǎn)中的五元組與上述五元組信息一致,則查找正確;
6)更新流表中的hash節(jié)點(diǎn)并輸出結(jié)果。
進(jìn)一步地,步驟3)中所述查找hash索引是以hash值作為地址,查找存儲(chǔ)在內(nèi)存中的hash節(jié)點(diǎn)地址的索引表。
進(jìn)一步地,步驟4)中所述有效索引為hash索引表中的有效bit位為1,即內(nèi)存中已有hash節(jié)點(diǎn);若有效bit位為0,說(shuō)明hash索引無(wú)效,則進(jìn)行建流操作。
進(jìn)一步地,步驟5)中如果信息不一致,則確認(rèn)是否有hash沖突,如果有hash沖突則繼續(xù)查找下一個(gè)hash節(jié)點(diǎn),否則進(jìn)行建流操作。
更進(jìn)一步地,所述建流操作就是建立一個(gè)hash節(jié)點(diǎn)。
本發(fā)明的有益效果在于:本發(fā)明提供一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的裝置及方法,在對(duì)原有系統(tǒng)硬件不做任何改變的情況下,應(yīng)用FPGA可編程邏輯器件的現(xiàn)有資源實(shí)現(xiàn)一種硬件裝置,完成對(duì)網(wǎng)絡(luò)流表查找效率的提高。本發(fā)明通過(guò)采用對(duì)五元組計(jì)算hash值的方式,將輸入數(shù)據(jù)包的五元組根據(jù)第一次hash計(jì)算得到的8bit hash值分成256組數(shù)據(jù)包,每次對(duì)256個(gè)不同hash值的數(shù)據(jù)包進(jìn)行統(tǒng)一查找流表的操作,如圖3所示。當(dāng)256個(gè)數(shù)據(jù)包都處理完后,再發(fā)起下一次256個(gè)數(shù)據(jù)包的流表查找。這樣每次流表查找就進(jìn)行一次讀寫(xiě)切換,讀寫(xiě)延遲將被分?jǐn)偟?56個(gè)數(shù)據(jù)包,平均到每個(gè)數(shù)據(jù)包上的延遲時(shí)間就減小為原來(lái)的1/256,大幅度提高了網(wǎng)絡(luò)流表的查找效率。
附圖說(shuō)明
圖1為采用hash方式查找流表的數(shù)據(jù)流程圖。
圖2為現(xiàn)有的查找流表操作順序示意圖。
圖3為本發(fā)明的查找流表操作順序示意圖。
圖4為本發(fā)明一實(shí)施例的裝置結(jié)構(gòu)示意圖。
圖5為未使用本發(fā)明裝置結(jié)構(gòu)的示意圖。
圖6為使用本發(fā)明裝置結(jié)構(gòu)的示意圖。
圖7為本發(fā)明一實(shí)施例的方法流程圖。
圖8為圖6中Prepare模塊的結(jié)構(gòu)示意圖。
圖9為圖6中Prepare模塊的寫(xiě)入流程圖。
圖10為圖6中Prepare模塊的讀出流程圖。
具體實(shí)施方式
為使本發(fā)明的上述特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉實(shí)施例,并配合所附圖作詳細(xì)說(shuō)明如下。
本發(fā)明提供一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的裝置,如圖4所示,該裝置包括一內(nèi)存控制器,如圖中的Sdram_controller模塊;一分組模塊,如圖中的Prepare模塊;一索引處理模塊,其包括查找索引模塊、先入先出模塊、接收索引模塊,分別如圖中的Lup_index模塊、Fifo模塊、Wait_index模塊;一查找模塊,其包括查找節(jié)點(diǎn)模塊、先入先出模塊、接收節(jié)點(diǎn)模塊,分別如圖中的Lup_node模塊、Fifo模塊、Wait_node模塊;一更新模塊,如圖中的Write_node模塊;
所述Sdram_controller模塊用于控制查找及返回hash索引、查找及返回hash節(jié)點(diǎn)信息、更新流表中的hash節(jié)點(diǎn);
所述Prepare模塊將輸入數(shù)據(jù)包的五元組進(jìn)行第一次hash計(jì)算,根據(jù)得到的8bit hash值分成256組數(shù)據(jù)包(即256條數(shù)據(jù)流)進(jìn)行存儲(chǔ),并按組號(hào)的順序讀出五元組,發(fā)送給下游模塊進(jìn)行查找,所述每個(gè)數(shù)據(jù)包的hash值相同;
所述Lup_index模塊對(duì)從256組數(shù)據(jù)包中各提取的一個(gè)數(shù)據(jù)包五元組進(jìn)行第二次hash計(jì)算得到固定寬度為29bit的DRAM讀地址,并通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找hash索引,所述查找hash索引是以hash值作為地址,查找存儲(chǔ)在內(nèi)存中的hash節(jié)點(diǎn)地址的索引表;
所述Fifo模塊用于緩存各五元組信息;
所述Wait_index模塊用于接收內(nèi)存返回的hash索引結(jié)果;
所述Lup_node模塊根據(jù)索引地址,通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找流表中hash節(jié)點(diǎn)的內(nèi)容;
所述Wait_node模塊用于接收內(nèi)存返回的流表中hash節(jié)點(diǎn)的內(nèi)容;
所述Write_node模塊用于對(duì)流表中hash節(jié)點(diǎn)進(jìn)行更新操作。
本發(fā)明使用的hash計(jì)算,是指計(jì)算結(jié)果為統(tǒng)一位寬的數(shù)值。
請(qǐng)參考圖5與圖6,圖5和圖6分別為未使用本發(fā)明裝置結(jié)構(gòu)的示意圖與使用本發(fā)明裝置結(jié)構(gòu)的示意圖。從圖5與圖6中可以看出,在對(duì)原有系統(tǒng)硬件不做任何改變的情況下,應(yīng)用FPGA可編程邏輯器件的現(xiàn)有資源(即在可編程邏輯器件中增加本發(fā)明裝置),完成了對(duì)網(wǎng)絡(luò)流表查找效率的提高。
本發(fā)明還提供一種提高大規(guī)模網(wǎng)絡(luò)流表查找效率的方法,如圖7所示,該方法步驟包括:
1)在Prepare模塊對(duì)輸入數(shù)據(jù)包的五元組進(jìn)行第一次hash計(jì)算,根據(jù)得到的8bit hash值分成256組數(shù)據(jù)包并存儲(chǔ),在下游模塊空閑的情況下,按組的順序?qū)⒕彺娴?56個(gè)hash值不同的五元組發(fā)給下游Lup_index模塊;
2)Lup_index模塊將256個(gè)五元組進(jìn)行第二次hash計(jì)算得到固定寬度為29bit的DRAM讀地址,按順序通過(guò)內(nèi)存控制器向內(nèi)存發(fā)出讀指令,查找hash索引,再將五元組放入Fifo模塊中緩存,所述查找hash索引是以hash值作為地址,查找存儲(chǔ)在內(nèi)存中的hash節(jié)點(diǎn)地址的索引表;
3)在Wait_index模塊判斷從內(nèi)存中得到的hash索引是否有效,有效則將索引地址和Fifo模塊中的五元組發(fā)送給Lup_node模塊;所述hash索引有效為hash索引表中的有效bit位為1,即內(nèi)存中已有hash節(jié)點(diǎn);若有效bit位為0,說(shuō)明hash索引無(wú)效,則進(jìn)行建流操作,即建立一個(gè)hash節(jié)點(diǎn);
4)Lup_node模塊將索引地址作為讀地址,通過(guò)內(nèi)存控制器向內(nèi)存發(fā)送讀指令,將五元組存入Fifo模塊中;
5)Wait_node模塊將內(nèi)存返回的hash節(jié)點(diǎn)中的五元組與Fifo模塊中的五元組進(jìn)行比較,如果一致,則說(shuō)明查找正確,將hash節(jié)點(diǎn)地址和內(nèi)容發(fā)送給Write_node模塊,進(jìn)行更新流表中hash節(jié)點(diǎn)的操作并輸出結(jié)果;如果查找不正確則確認(rèn)是否有hash沖突,如果有hash沖突則繼續(xù)查找下一個(gè)hash節(jié)點(diǎn),如果沒(méi)有則進(jìn)行建流操作,即建立一個(gè)hash節(jié)點(diǎn)。
請(qǐng)參考圖8,該圖為圖6中Prepare模塊的結(jié)構(gòu)示意圖,Prepare模塊由多個(gè)子功能模塊構(gòu)成,其包括:
Ram:可編程邏輯器件內(nèi)部雙端口ram;
HashX_waddr:hash值對(duì)應(yīng)的部分ram寫(xiě)地址寄存器;
HashX_raddr:hash值對(duì)應(yīng)的部分ram讀地址寄存器;
Cnt:累加計(jì)數(shù)器;
Ram_wr_addr:整個(gè)ram的寫(xiě)地址;
Ram_rd_addr:整個(gè)ram的讀地址。
請(qǐng)參考圖9,該圖為圖6中Prepare模塊的寫(xiě)入流程圖,首先對(duì)五元組進(jìn)行8bit的hash計(jì)算;其次將得到的hash值與hash值對(duì)應(yīng)的寫(xiě)地址寄存器組合成為ram的寫(xiě)地址;最后將五元組寫(xiě)入ram,并將與hash值對(duì)應(yīng)的寫(xiě)地址寄存器做加1操作。
請(qǐng)參考圖10,該圖為圖6中Prepare模塊的讀出流程圖,在下游模塊為空閑的情況下,將累加計(jì)數(shù)器cnt的值和累加計(jì)數(shù)器對(duì)應(yīng)的部分ram讀地址寄存器組合成為ram的讀地址,判斷ram中是否有五元組數(shù)據(jù),如果有數(shù)據(jù),則輸出數(shù)據(jù),并將cnt對(duì)應(yīng)的部分ram的讀地址寄存器加1,累加計(jì)數(shù)器cnt累加;如果沒(méi)有數(shù)據(jù),則只進(jìn)行累加計(jì)數(shù)器cnt累加。當(dāng)累加計(jì)數(shù)器達(dá)到256時(shí)停止此輪操作。
表1.未使用本發(fā)明設(shè)備與使用本發(fā)明設(shè)備處理能力對(duì)比表
通過(guò)網(wǎng)絡(luò)測(cè)試儀對(duì)是否采用快速流表查找方法的設(shè)備進(jìn)行發(fā)包測(cè)試作為對(duì)照,來(lái)評(píng)估本發(fā)明的效果。評(píng)價(jià)指標(biāo)采用最大處理能力,即不丟包情況下的最大可處理輸入帶寬。測(cè)試儀發(fā)送給使用本發(fā)明設(shè)備和未使用本發(fā)明設(shè)備的數(shù)據(jù)包完全一致,設(shè)備最大輸入帶寬為100Gbps,結(jié)果如表1所示。實(shí)驗(yàn)結(jié)果表明,在各種流量環(huán)境下,采用本發(fā)明提出的快速流表查找裝置的設(shè)備有很好的性能提升,可以提高流表的查找速率。
以上實(shí)施僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,本領(lǐng)域的普通技術(shù)人員可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求書(shū)所述為準(zhǔn)。