一種面向tcp會話的對稱性rss電路的制作方法
【專利摘要】一種面向TCP會話的對稱性RSS電路,包括TCP/IP頭提取模塊、Hash函數(shù)計(jì)算模塊、Hash結(jié)果重組模塊、間接表查詢模塊和用于存儲配置信息的RSS寄存器模塊;TCP/IP頭提取模塊連接有MAC模塊,間接表查詢模塊連接有RQP模塊;本發(fā)明通過主動地計(jì)算反向提取內(nèi)容的Hash結(jié)果,使用由正向提取內(nèi)容和反向提取內(nèi)容的Hash結(jié)果產(chǎn)生的最終結(jié)果作為CPU核的判決依據(jù)。因?yàn)槭褂迷摲椒ê?,TCP會話中的上行數(shù)據(jù)和下行數(shù)據(jù)得到的Hash結(jié)果相同,因此會指向同一個CPU核,即實(shí)現(xiàn)了將不同方向但卻屬于同一個TCP/IP鏈接的報(bào)文分配到相同的CPU核上進(jìn)行處理,實(shí)現(xiàn)了對現(xiàn)有RSS的兼容。
【專利說明】
一種面向TCP會話的對稱性RSS電路
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域,涉及一種網(wǎng)絡(luò)控制器中的接收端調(diào)控機(jī)構(gòu),尤其適用于網(wǎng)絡(luò)安全領(lǐng)域的對TCP會話敏感的高性能網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng),如網(wǎng)絡(luò)入侵檢測系統(tǒng)和硬件防火墻系統(tǒng)等,具體涉及一種面向TCP會話的對稱性RSS電路。
【背景技術(shù)】
[0002]目前在主流的以太網(wǎng)控制器中,都使用了Receive-sideScaling(RSS,接收端調(diào)控)技術(shù)。RSS技術(shù)通過對接收到的數(shù)據(jù)報(bào)文進(jìn)行分析處理,將屬于同一個TCP/IP流的數(shù)據(jù)分配到相同的CPU核上處理,從而在多處理器(多核)系統(tǒng)之間平衡了網(wǎng)絡(luò)數(shù)據(jù)吞吐,同時(shí)也提高了 CPU對網(wǎng)絡(luò)數(shù)據(jù)的處理能力。
[0003]然而在網(wǎng)絡(luò)安全領(lǐng)域,如網(wǎng)絡(luò)入侵檢測系統(tǒng)和硬件防火墻系統(tǒng)中,為了確保網(wǎng)絡(luò)的安全和可靠,都需要對整個網(wǎng)絡(luò)的數(shù)據(jù)進(jìn)行監(jiān)測和分析。因?yàn)門CP會話是雙向的,因此網(wǎng)絡(luò)入侵檢測系統(tǒng)和硬件防火墻系統(tǒng)會接收到雙向的TCP/IP報(bào)文。這就需要其對TCP會話具有非常高的處理能力,但是現(xiàn)有的RSS不能夠保證屬于同一個TCP會話的上行數(shù)據(jù)和下行數(shù)據(jù)都在同一個CPU核中處理,這樣一來就會產(chǎn)生多核之間跨線程訪問等問題,從而增大了(PU的開銷,降低了系統(tǒng)的性能。
[0004]—種通過修改RSS算法中的Key值來實(shí)現(xiàn)對稱的RSS方法(Shinae Woo , ScalableTCP Sess1n Monitoring with Symmetric Receive-side Scaling),通過對RSS中米用的Toeplitz Hash算法的研究,發(fā)現(xiàn)當(dāng)Hash類型為帶有TCP頭的IPv4情況時(shí),只要Hash Key為16位循環(huán)的方式,那么對于同一個TCP/IP會話,無論其是上行數(shù)據(jù)還是下行數(shù)據(jù),最終計(jì)算出的Hash結(jié)果是相同的,這也就意味著將會由一個CPU核來處理雙向的數(shù)據(jù)。該方法實(shí)現(xiàn)起來簡單,只需要將Hash Key配成16位循環(huán)的方式即可,但是其還是存在以下缺陷:1、存在邊界條件(corner cases),當(dāng)Hash Key全為I或全為O時(shí),該方法將失效;2、適用性不強(qiáng)。該方法只針對一種Hash類型,對于其它三種Hash類型并不適用。3、存在潛在的風(fēng)險(xiǎn)。修改HashKey使該方法成為了Toeplitz Hash算法的子集,不能保證Hash結(jié)果的唯一"性。
[0005]—種面向多核處理器系統(tǒng)的傳輸友好的網(wǎng)卡,(Wenji Wu1Phil DeMar1ATransport-Friendly NIC for Multicore/Multiprocessor Systems,2012),通過操作系統(tǒng)軟件和網(wǎng)卡硬件電路的配合,在原有的RSS電路基礎(chǔ)上,由軟件來計(jì)算和維護(hù)間接表,從而得到數(shù)據(jù)流-CPU核的對應(yīng)關(guān)系,實(shí)現(xiàn)對雙向TCP/IP數(shù)據(jù)的同核處理。該架構(gòu)存在的主要缺陷是:1、硬件設(shè)計(jì)相對傳統(tǒng)的RSS較為復(fù)雜,且需要大量的memory來存儲數(shù)據(jù)流-CPU核的對應(yīng)關(guān)系;2、需要操作系統(tǒng)的支持,需要對操作系統(tǒng)進(jìn)行一定的修改,風(fēng)險(xiǎn)較高,可移植性較差。
[0006]一種Ethernet Flow Director技術(shù)的提出,雖然能夠保證屬于同一個TCP會話的上行數(shù)據(jù)和下行數(shù)據(jù)都在同一個CHJ核中處理,但是其存在TCP報(bào)文重排序的問題,無法保障QoS。因此,RSS仍然被廣泛地應(yīng)用在網(wǎng)絡(luò)控制器設(shè)計(jì)中。這主要是因?yàn)镽SS技術(shù)相對來說較成熟,且具有很好的軟件兼容性。
【發(fā)明內(nèi)容】
[0007]本發(fā)明為了有效解決在對TCP會話敏感的處理系統(tǒng)中TCP上行和下行數(shù)據(jù)不在同一個CPU核中處理的問題,目的在于提出一種面向TCP會話的對稱性RSS電路,有效解決雙向TCP報(bào)文與CPU核的唯一綁定問題,且與現(xiàn)有的RSS兼容,無需軟件層面做任何的修改,同時(shí)實(shí)現(xiàn)了將不同方向但卻屬于同一個TCP/IP鏈接的報(bào)文分配到相同的CPU核上進(jìn)行處理。
[0008]為實(shí)現(xiàn)上述目的,本發(fā)明采用如下的技術(shù)方案來實(shí)現(xiàn):
[0009]一種面向TCP會話的對稱性RSS電路,包括TCP/IP頭提取模塊、Hash函數(shù)計(jì)算模塊、Hash結(jié)果重組模塊、間接表查詢模塊和用于存儲配置信息的RSS寄存器模塊;TCP/IP頭提取模塊連接有MAC模塊,間接表查詢模塊連接有RQP模塊;
[0010]TCP/IP頭提取模塊用于根據(jù)RSS寄存器模塊中Hash類型寄存器的配置,對從MAC模塊接收到的數(shù)據(jù)幀分別進(jìn)行TCP/IP頭和反向的TCP/IP頭的提取,并將提取結(jié)果分別發(fā)送到Hash函數(shù)計(jì)算模塊;
[0011 ] Hash函數(shù)計(jì)算模塊用于完成對接收到的TCP/IP頭提取模塊I的提取結(jié)果的Hash結(jié)果計(jì)算,包括對正向提取內(nèi)容的計(jì)算和反向提取內(nèi)容的計(jì)算;并將計(jì)算結(jié)果發(fā)送到Ha s h結(jié)果重組模塊;
[0012]Hash結(jié)果重組模塊用于接收到正向提取內(nèi)容和反向提取內(nèi)容的Hash結(jié)果,并對兩個結(jié)果進(jìn)行重組,重組的方式為:對兩個結(jié)果做算術(shù)加法運(yùn)算,取運(yùn)算結(jié)果的低7位作為重組后的輸出結(jié)果,并發(fā)送到間接表查詢模塊;
[0013]間接表查詢模塊用于根據(jù)接收到的Hash結(jié)果重組模塊輸出的結(jié)果決定由哪個CPU核來對該報(bào)文進(jìn)行處理。
[0014]本發(fā)明進(jìn)一步的改進(jìn)在于,RSS寄存器模塊存儲的配置信息包括Hash類型、HashKey和間接表。
[0015]本發(fā)明進(jìn)一步的改進(jìn)在于,反向的TCP/IP頭的提取的規(guī)則是將源IP地址和目的IP地址以及源端口地址和目的端口地址分別進(jìn)行交換。
[0016]本發(fā)明進(jìn)一步的改進(jìn)在于,針對4種Hash類型,具體的提取方式如下:
[0017](I)帶TCP 頭的 IPv4 幀
[0018]正向提取內(nèi)容={源IPv4地址,目的IPv4地址,源端口地址,目的端口地址};
[0019]反向提取內(nèi)容={目的IPv4地址,源IPv4地址,目的端口地址,源端口地址};
[0020](2)IPv4 幀
[0021]正向提取內(nèi)容={源IPv4地址,目的IPv4地址};
[0022]反向提取內(nèi)容={目的IPv4地址,源IPv4地址};
[0023](3)帶 TCP 頭的 IPv6 幀
[0024]正向提取內(nèi)容={源IPv6地址,目的IPv6地址,源端口地址,目的端口地址};
[0025]反向提取內(nèi)容={目的IPv6地址,源IPv6地址,目的端口地址,源端口地址};
[0026](4)IPv6幀
[0027]正向提取內(nèi)容={源IPv6地址,目的IPv6地址};
[0028]反向提取內(nèi)容={目的IPv6地址,源IPv6地址};
[0029]對于帶TCP頭的IPv4的數(shù)據(jù)幀和IPv4的數(shù)據(jù)幀,其提取內(nèi)容長度分別為12bytes和Sbytes ;對于帶TCP頭的IPv6數(shù)據(jù)幀和IPv6數(shù)據(jù)幀的提取內(nèi)容長度分別為36bytes和32bytes0
[OO3O]本發(fā)明進(jìn)一步的改進(jìn)在于,Hash函數(shù)計(jì)算模塊由兩套功能相同的計(jì)算結(jié)構(gòu)組成,分別對TCP/IP頭提取模塊送來的正向提取內(nèi)容和反向提取內(nèi)容進(jìn)行Hash結(jié)果計(jì)算,每套計(jì)算結(jié)構(gòu)包括由I個提取內(nèi)容分割模塊、I個Key值分割模塊、字節(jié)Hash計(jì)算模塊以及I個結(jié)果輸出模塊構(gòu)成;
[0031 ]提取內(nèi)容分割模塊根據(jù)RSS寄存器模塊中Hash類型寄存器的配置,判斷出接收到的提取內(nèi)容的長度,接著對接收到的提取內(nèi)容進(jìn)行分割;
[0032]Key值分割模塊根據(jù)RSS寄存器模塊中Hash Key寄存器的配置,獲得相應(yīng)的Key值,并對Key值進(jìn)行分割;
[0033]提取內(nèi)容分割模塊和Key值分割模塊分別將分割后的結(jié)果按照一一對應(yīng)的關(guān)系送入字節(jié)Hash計(jì)算模塊8,完成一個字節(jié)的Hash結(jié)果計(jì)算;字節(jié)Hash計(jì)算模塊共有36個,按照Toeplitz函數(shù)的算法完成對8位提取內(nèi)容的計(jì)算,完成計(jì)算后將32位計(jì)算結(jié)果輸送給結(jié)果輸出模塊;
[0034]結(jié)果輸出模塊接收來自36個字節(jié)Hash計(jì)算模塊的計(jì)算結(jié)果,并對36組32位的結(jié)果進(jìn)行異或運(yùn)算,輸出32位的最終結(jié)果。
[0035]本發(fā)明進(jìn)一步的改進(jìn)在于,提取內(nèi)容分割模塊分割的方式為按照從數(shù)據(jù)最高位到最低位的方向,從數(shù)據(jù)的最高位開始,每連續(xù)8位分為一組,然后將分好的各組數(shù)據(jù)并行輸出;對于帶TCP頭的IPv4數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為12組;對于IPv4數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為8組;對于帶TCP頭的IPv6數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為36組;對于IPv6數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為32組。
[0036]本發(fā)明進(jìn)一步的改進(jìn)在于,提取內(nèi)容分割模塊最多支持36組數(shù)據(jù)的并行輸出,對于分割組數(shù)不到36組的情況,指定剩余的組的輸出值為全零。
[0037]本發(fā)明進(jìn)一步的改進(jìn)在于,Key值分割模塊分割的方式為按照從Key值最高位到最低位的方向,從Key值的最高位開始,每間隔8位向后取40位Key值組成一組,然后將分好的各組Key值并行輸出。
[0038]本發(fā)明進(jìn)一步的改進(jìn)在于,間接表查詢模塊根據(jù)接收到的Hash結(jié)果重組模塊輸出的結(jié)果決定由哪個CHJ核來對該報(bào)文進(jìn)行處理的具體的工作過程是:間接表查詢模塊根據(jù)輸入的7位結(jié)果,進(jìn)行相應(yīng)的地址轉(zhuǎn)換,然后用轉(zhuǎn)換后的地址從RSS寄存器模塊5中讀出間接表信息并輸出給RQP模塊;從間接表中讀出的信息是一組4位的數(shù)據(jù),其值分別對應(yīng)CPUO?CPU15,RQP模塊根據(jù)4位數(shù)據(jù)的結(jié)果將數(shù)據(jù)幀分配給對應(yīng)的CPU核處理。
[0039]與現(xiàn)有技術(shù)相比,本發(fā)明具有的有益效果:本發(fā)明通過主動地計(jì)算反向提取內(nèi)容的Hash結(jié)果,使用由正向提取內(nèi)容和反向提取內(nèi)容的Hash結(jié)果產(chǎn)生的最終結(jié)果來作為CPU核的判決依據(jù)。因?yàn)槭褂迷摲椒ê螅琓CP會話中的上行數(shù)據(jù)和下行數(shù)據(jù)得到的Hash結(jié)果相同,因此會指向同一個CPU核,即實(shí)現(xiàn)了將不同方向但卻屬于同一個TCP/IP鏈接的報(bào)文分配到相同的(PU核上進(jìn)行處理,克服了現(xiàn)有RSS技術(shù)的不足,實(shí)現(xiàn)了對現(xiàn)有RSS的兼容。
[0040]本發(fā)明有效解決了雙向TCP報(bào)文與CPU核的唯一綁定問題,即實(shí)現(xiàn)了將不同方向但卻屬于同一個TCP/IP鏈接的報(bào)文分配到相同的CPU核上進(jìn)行處理,從而提高了 CPU對網(wǎng)絡(luò)數(shù)據(jù)的處理能力,避免了多核之間跨線程訪問的問題,動態(tài)地調(diào)節(jié)了數(shù)據(jù)接收時(shí)的性能,使網(wǎng)絡(luò)吞吐達(dá)到最尚狀態(tài)。
[0041]通過對該發(fā)明進(jìn)行功能仿真,并與現(xiàn)有的RSS方法進(jìn)行比較。在測試環(huán)境中,隨機(jī)產(chǎn)生1000組雙向的TCP報(bào)文,并分別采用現(xiàn)有的RSS電路和該發(fā)明提出的對稱性RSS電路對這些報(bào)文進(jìn)行Hash值的計(jì)算。其中,Hash類型、Hash Key以及間接表信息均相同。仿真結(jié)果表明,對稱性RSS電路對于同一個TCP鏈接,無論方向如何,計(jì)算出的Hash結(jié)果值均相同。同時(shí),為了與現(xiàn)有RSS比較,對兩種電路的計(jì)算結(jié)果分別計(jì)算了變化系數(shù)。變化系數(shù)越接近零就表明CPU核間的負(fù)載越平衡。分別在CPU核數(shù)為4、8、12、16的情況下對Hash計(jì)算結(jié)果進(jìn)行了變化系數(shù)的計(jì)算。計(jì)算結(jié)果表明,在CPU核數(shù)為4、12、16的情況下,對稱性RSS的變化系數(shù)均略高于現(xiàn)有RSS的變化系數(shù);在CPU核數(shù)為8的情況下,對稱性RSS的變化系數(shù)均低于現(xiàn)有RSS的變化系數(shù)。但在四種情況下,對稱性RSS的變化系數(shù)和現(xiàn)有RSS的變化系數(shù)均低于0.008,屬于同一個數(shù)量級。因此,對稱性RSS可以保持與現(xiàn)有RSS相同數(shù)量級的負(fù)載平衡。
【附圖說明】
[0042]圖1為對稱性RSS電路總體結(jié)構(gòu)框圖。
[0043]圖2為Hash函數(shù)計(jì)算模塊的結(jié)構(gòu)框圖。
[0044]圖中,I為TCP/IP頭提取模塊,2為Hash函數(shù)計(jì)算模塊,3為Hash結(jié)果重組模塊,4為間接表查詢模塊,5為RSS寄存器模塊,6為提取內(nèi)容分割模塊,7為Key值分割模塊,8為字節(jié)Hash計(jì)算模塊,9為結(jié)果輸出模塊。
【具體實(shí)施方式】
[0045]下面結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)說明。
[0046]本發(fā)明的總體結(jié)構(gòu)框圖如圖1所示。其中,虛線內(nèi)部結(jié)構(gòu)為本發(fā)明所提出的對稱性RSS電路結(jié)構(gòu),虛線外部為與其連接的網(wǎng)絡(luò)控制器中的其它模塊,其中MAC模塊為媒體接入控制模塊,負(fù)責(zé)完成數(shù)據(jù)幀的封裝、解封、發(fā)送和接收功能,RQP(Receive QueuePlacement)模塊為接收隊(duì)列分配模塊,將數(shù)據(jù)幀分配到不同的接收隊(duì)列中,并由不同的CPU核對其進(jìn)行處理。
[0047]參見圖1,包括TCP/IP頭提取模塊l、Hash函數(shù)計(jì)算模塊2、Hash結(jié)果重組模塊3、間接表查詢模塊4和用于存儲配置信息的RSS寄存器模塊5; TCP/IP頭提取模塊I連接有MAC模塊10,間接表查詢模塊4連接有RQP模塊11;
[0048]TCP/IP頭提取模塊I主要功能是根據(jù)RSS寄存器模塊5中Hash類型寄存器的配置,對從MAC接收到的數(shù)據(jù)幀分別進(jìn)行TCP/IP頭和反向的TCP/IP頭的提取,并將提取結(jié)果分別發(fā)送到Hash函數(shù)計(jì)算模塊。與現(xiàn)有RSS技術(shù)一致,該模塊支持4種Hash類型的TCP/IP頭提取,分別為IPv4、帶TCP頭的IPv4、IPv6以及帶TCP頭的IPv6。不同之處是該模塊除了對數(shù)據(jù)幀的TCP/IP頭進(jìn)行提取,還需要對反向的TCP/IP頭進(jìn)行提取。反向提取的規(guī)則是將源IP地址和目的IP地址以及源端口地址和目的端口地址分別進(jìn)行交換。針對支持的4種Hash類型,下面給出具體的提取方式:
[0049](I)帶TCP 頭的 IPv4 幀
[0050]正向提取內(nèi)容={源IPv4地址,目的IPv4地址,源端口地址,目的端口地址};
[0051 ] 反向提取內(nèi)容={目的IPv4地址,源IPv4地址,目的端口地址,源端口地址}。
[0052](2)IPv4 幀
[0053]正向提取內(nèi)容={源IPv4地址,目的IPv4地址};
[0054]反向提取內(nèi)容={目的IPv4地址,源IPv4地址}。
[0055](3)帶TCP 頭的 IPv6幀
[0056]正向提取內(nèi)容={源IPv6地址,目的IPv6地址,源端口地址,目的端口地址};反向提取內(nèi)
[0057]容={目的IPv6地址,源IPv6地址,目的端口地址,源端口地址}。
[0058](4)IPv6幀
[0059]正向提取內(nèi)容={源IPv6地址,目的IPv6地址};
[0060]反向提取內(nèi)容={目的IPv6地址,源IPv6地址}。
[0061 ] 因?yàn)镮Pv4地址為32位,IPv6地址為128位,而端口地址均為16位,所以針對4種不同的Hash類型,其提取內(nèi)容長度也不相同。具體說來,對于帶TCP頭的IPv4的數(shù)據(jù)幀和IPv4的數(shù)據(jù)幀,其提取內(nèi)容長度分別為12bytes和8bytes;對于帶TCP頭的IPv6數(shù)據(jù)幀和IPv6數(shù)據(jù)幀的提取內(nèi)容長度分別為36bytes和32bytes。
[0062]參見圖2,Hash函數(shù)計(jì)算模塊2主要功能是完成對提取內(nèi)容的Hash結(jié)果計(jì)算,包括對正向提取內(nèi)容的計(jì)算和反向提取內(nèi)容的計(jì)算。該模塊主要由2個提取內(nèi)容分割模塊、2個Key值分割模塊、72個字節(jié)Hash計(jì)算模塊以及2個結(jié)果輸出模塊構(gòu)成,其結(jié)構(gòu)框圖如圖2所不O
[0063]該模塊由兩套功能相同的計(jì)算結(jié)構(gòu)組成,分別對TCP/IP頭提取模塊送來的正向提取內(nèi)容和反向提取內(nèi)容進(jìn)行Hash結(jié)果計(jì)算。RSS技術(shù)中的Hash計(jì)算采用Toeplitz函數(shù)。下面詳細(xì)地介紹該模塊中的一套計(jì)算結(jié)構(gòu)是如何實(shí)現(xiàn)Hash計(jì)算的。
[0064]首先,提取內(nèi)容分割模塊6根據(jù)RSS寄存器模塊5中Hash類型寄存器的配置,判斷出接收到的提取內(nèi)容的長度,接著對接收到的提取內(nèi)容進(jìn)行分割。分割的方式為按照從數(shù)據(jù)最高位到最低位的方向,從數(shù)據(jù)的最高位開始,每連續(xù)8位分為一組,然后將分好的各組數(shù)據(jù)并行輸出。因?yàn)?種類型的提取內(nèi)容長度不同,所以分組數(shù)也不相同。具體說來,對于帶TCP頭的IPv4數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為12組;對于IPv4數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為8組;對于帶TCP頭的IPv6數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為36組;對于IPv6數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為32組。
[0065]提取內(nèi)容分割模塊6最多支持36組數(shù)據(jù)的并行輸出,對于分割組數(shù)不到36組的情況,指定剩余的組的輸出值為全零。
[0066]同時(shí),Key值分割模塊7根據(jù)RSS寄存器模塊中HashKey寄存器的配置,獲得相應(yīng)的Key值,并對Key值進(jìn)行分割。分割的方式為按照從Key值最高位到最低位的方向,從Key值的最高位開始,每間隔8位向后取40位Key值組成一組,然后將分好的各組Key值并行輸出。
[0067]為了更準(zhǔn)確、更清楚的描述Key值的分割方法和思想,下面以Key值為320位為例給出分割結(jié)果。當(dāng)Key值為320位時(shí)(最高位在最左邊),其各組分割結(jié)果為Key[319:279],Key[311:271],Key [303:263] ,Key [295: 255],……,Key[48:8],Key[40:0]。對于帶TCP頭的IPv6數(shù)據(jù)幀,Key值有320位,對于帶TCP頭的IPv4數(shù)據(jù)幀,Key值有128位。因此Key值分割模塊也需要根據(jù)Hash類型寄存器的配置,讀取出相應(yīng)的Key值。Key值分割模塊最多支持36組分割結(jié)果的并行輸出。對于IPv6的320位Key值來說,按照上述分割方法,正好分割為36組;然而對于IPv4的128位的Key值,按照上述分割方法只能分割出11組。因此,對于分割組數(shù)不到36組的情況,指定剩余組的輸出值為全零。
[0068]提取內(nèi)容分割模塊6和Key值分割模塊7分別將分割后的結(jié)果按照一一對應(yīng)的關(guān)系送入字節(jié)Hash計(jì)算模塊8,完成一個字節(jié)的Hash結(jié)果計(jì)算。一套計(jì)算結(jié)構(gòu)中字節(jié)Hash計(jì)算模塊8共有36個,按照Toeplitz函數(shù)的算法完成對8位提取內(nèi)容的計(jì)算。該模塊由純硬件電路實(shí)現(xiàn),完成計(jì)算后將32位計(jì)算結(jié)果輸送給結(jié)果輸出模塊9。
[0069]結(jié)果輸出模塊9接收來自36個字節(jié)Hash計(jì)算模塊的計(jì)算結(jié)果,并對36組32位的結(jié)果進(jìn)行異或運(yùn)算,輸出32位的最終結(jié)果。
[°07°] 至此,Hash結(jié)果計(jì)算過程結(jié)束。
[°071 ] Hash函數(shù)計(jì)算模塊2通過硬件實(shí)現(xiàn)了Toeplitz函數(shù)的算法,并且通過對算法的分析,采用分割計(jì)算的方式,實(shí)現(xiàn)了并行的處理,提高了計(jì)算的速率。除此之外,對于分割組數(shù)不到36組的情況,指定剩余組的輸出值為全零,有效的避免了設(shè)計(jì)中使能信號的產(chǎn)生,因?yàn)槠溆?jì)算結(jié)果必定為全零,因此在結(jié)果輸出模塊中,該結(jié)果對最終的結(jié)果沒有產(chǎn)生任何影響。
[0072]Hash結(jié)果重組模塊3主要功能是完成對正向和反向提取內(nèi)容的Hash結(jié)果的再次計(jì)算,并輸出重組后的結(jié)果。Hash結(jié)果重組模塊會分別接收到正向提取內(nèi)容和反向提取內(nèi)容的Hash結(jié)果,對兩個結(jié)果進(jìn)行重組的方式為:對兩個結(jié)果做算術(shù)加法運(yùn)算,取運(yùn)算結(jié)果的低7位作為重組后的輸出結(jié)果。
[0073]間接表查詢模塊4主要功能是根據(jù)輸入的7位結(jié)果決定由哪個CPU核來對該報(bào)文進(jìn)行處理。
[0074]具體的工作過程是:間接表查詢模塊根據(jù)輸入的7位結(jié)果,進(jìn)行相應(yīng)的地址轉(zhuǎn)換,然后用轉(zhuǎn)換后的地址從RSS寄存器模塊中讀出間接表信息并輸出給RQP(ReCeive QueuePlacement)模塊。從間接表中讀出的信息是一組4位的數(shù)據(jù),其值分別對應(yīng)CPUO?CPU15,因此該RSS電路最多支持16個CPU核的系統(tǒng)。RQP模塊根據(jù)4位數(shù)據(jù)的結(jié)果將數(shù)據(jù)幀分配給對應(yīng)的CPU核處理。
[0075]RSS寄存器模塊5主要存儲整個對稱性RSS電路的配置信息。主要的配置信息包括Hash類型、Hash Key和間接表。該模塊上電后由主機(jī)驅(qū)動程序進(jìn)行配置,并且在實(shí)時(shí)工作中,驅(qū)動程序也可以根據(jù)需求動態(tài)地修改相應(yīng)的寄存器信息,從而達(dá)到動態(tài)的負(fù)載平衡。
[0076]本發(fā)明的核心思想是通過主動地計(jì)算反向提取內(nèi)容的Hash結(jié)果,使用由正向和反向的Hash結(jié)果產(chǎn)生的最終結(jié)果來作為CPU核的判決依據(jù)。因?yàn)槭褂迷摲椒ê螅琓CP會話中的上行數(shù)據(jù)和下行數(shù)據(jù)得到的結(jié)果相同,因此會指向同一個CHJ核,即實(shí)現(xiàn)了將不同方向但卻屬于同一個TCP/IP鏈接的報(bào)文分配到相同的CPU核上進(jìn)行處理。
[0077]下面對圖1中模塊進(jìn)行詳細(xì)說明。
[0078]TCP/IP頭提取模塊I,其數(shù)量為I,主要功能是根據(jù)RSS寄存器模塊中Hash類型寄存器的配置,對從MAC接收到的數(shù)據(jù)幀分別進(jìn)行TCP/IP頭和反向的TCP/IP頭的提取,并將提取結(jié)果分別發(fā)送到Hash函數(shù)計(jì)算模塊。
[0079]Hash函數(shù)計(jì)算模塊2,其數(shù)量為I,主要功能是完成對提取內(nèi)容的Hash結(jié)果計(jì)算,包括對正向提取內(nèi)容的計(jì)算和反向提取內(nèi)容的計(jì)算。
[0080]Hash結(jié)果重組模塊3,其數(shù)量為I,主要功能是完成對正向和反向提取內(nèi)容的Hash結(jié)果的再次計(jì)算,并輸出重組后的結(jié)果。[0081 ]間接表查詢模塊4,其數(shù)量為I,主要功能是根據(jù)輸入的7位結(jié)果決定由哪個CPU核來對該報(bào)文進(jìn)行處理。
[0082]RSS寄存器模塊5,其數(shù)量為I,主要存儲整個對稱性RSS電路的配置信息。
[0083]圖2為Hash函數(shù)計(jì)算模塊的結(jié)構(gòu)框圖。
[0084]下面對圖2中模塊進(jìn)行詳細(xì)說明。
[0085]提取內(nèi)容分割模塊6,其數(shù)量為2,主要功能是根據(jù)RSS寄存器模塊中Hash類型寄存器的配置,判斷出接收到的提取內(nèi)容的長度,接著對接收到的提取內(nèi)容進(jìn)行分割。
[0086]Key值分割模塊7,其數(shù)量為2,主要功能是根據(jù)RSS寄存器模塊中Hash Key寄存器的配置,獲得相應(yīng)的Key值,并對Key值進(jìn)行分割。
[0087]字節(jié)Hash計(jì)算模塊8,其數(shù)量為72,主要功能是完成一個字節(jié)的Hash結(jié)果計(jì)算。
[0088]結(jié)果輸出模塊9,其數(shù)量為2,主要功能是接收來自36個字節(jié)Hash計(jì)算模塊的計(jì)算結(jié)果,并對36組32位的結(jié)果進(jìn)行異或運(yùn)算,輸出32位的最終結(jié)果。
[0089]本發(fā)明可用于具有RSS功能的網(wǎng)絡(luò)控制器中,特別適用于對TCP會話敏感的、高性能網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)中。
[0090]在網(wǎng)絡(luò)安全領(lǐng)域,如網(wǎng)絡(luò)入侵檢測系統(tǒng)和硬件防火墻系統(tǒng)中,為了確保網(wǎng)絡(luò)的安全和可靠,都需要對整個網(wǎng)絡(luò)的數(shù)據(jù)進(jìn)行監(jiān)測和分析。因?yàn)門CP會話是雙向的,因此網(wǎng)絡(luò)入侵檢測系統(tǒng)和硬件防火墻系統(tǒng)會接收到雙向的TCP/IP報(bào)文。這就需要其對TCP會話具有非常高的處理能力,但是現(xiàn)有的RSS不能夠保證屬于同一個TCP會話的上行數(shù)據(jù)和下行數(shù)據(jù)都在同一個CPU核中處理,這樣一來就會產(chǎn)生多核之間跨線程訪問等問題,從而增大了 CPU的開銷,降低了系統(tǒng)的性能。
[0091 ]采用本發(fā)明提出的對稱性RSS電路,可對現(xiàn)有的RSS技術(shù)做完全的兼容,在網(wǎng)絡(luò)控制器的設(shè)計(jì)中可以完整地替代現(xiàn)有的RSS電路,同時(shí)實(shí)現(xiàn)將不同方向但卻屬于同一個TCP/IP鏈接的報(bào)文分配到相同的(PU核上進(jìn)行處理的功能。
[0092]根據(jù)上述方案,用Verilog語言對本發(fā)明中各個模塊的邏輯設(shè)計(jì)進(jìn)行描述,并將其與網(wǎng)絡(luò)控制器中的其它模塊集成在一起,進(jìn)行系統(tǒng)級的驗(yàn)證。驗(yàn)證結(jié)果表明,本發(fā)明實(shí)現(xiàn)了設(shè)計(jì)功能,且性能滿足預(yù)期。
[0093]通過對該發(fā)明進(jìn)行功能仿真,并與現(xiàn)有的RSS方法進(jìn)行比較。在測試環(huán)境中,隨機(jī)產(chǎn)生1000組雙向的TCP報(bào)文,并分別采用現(xiàn)有的RSS電路和該發(fā)明提出的對稱性RSS電路對這些報(bào)文進(jìn)行Hash值的計(jì)算。其中,Hash類型、Hash Key以及間接表信息均相同。仿真結(jié)果表明,對稱性RSS電路對于同一個TCP鏈接,無論方向如何,計(jì)算出的Hash結(jié)果值均相同。同時(shí),為了與現(xiàn)有RSS比較,對兩種電路的計(jì)算結(jié)果分別計(jì)算了變化系數(shù)。變化系數(shù)越接近零就表明CPU核間的負(fù)載越平衡。分別在CPU核數(shù)為4、8、12、16的情況下對Hash計(jì)算結(jié)果進(jìn)行了變化系數(shù)的計(jì)算。計(jì)算結(jié)果表明,在CPU核數(shù)為4、12、16的情況下,對稱性RSS的變化系數(shù)均略高于現(xiàn)有RSS的變化系數(shù);在CPU核數(shù)為8的情況下,對稱性RSS的變化系數(shù)均低于現(xiàn)有RSS的變化系數(shù)。但在四種情況下,對稱性RSS的變化系數(shù)和現(xiàn)有RSS的變化系數(shù)均低于
0.008,屬于同一個數(shù)量級。因此,對稱性RSS可以保持與現(xiàn)有RSS相同數(shù)量級的負(fù)載平衡。
【主權(quán)項(xiàng)】
1.一種面向TCP會話的對稱性RSS電路,其特征在于,包括TCP/IP頭提取模塊(I),Hash函數(shù)計(jì)算模塊(2)、Hash結(jié)果重組模塊(3)、間接表查詢模塊(4)和用于存儲配置信息的RSS寄存器模塊(5); TCP/IP頭提取模塊(I)連接有MAC模塊(1),間接表查詢模塊(4)連接有RQP豐旲塊(11); TCP/IP頭提取模塊(I)用于根據(jù)RSS寄存器模塊(5)中Hash類型寄存器的配置,對從MAC模塊接收到的數(shù)據(jù)幀分別進(jìn)行TCP/IP頭和反向的TCP/IP頭的提取,并將提取結(jié)果分別發(fā)送到Hash函數(shù)計(jì)算模塊(2); Hash函數(shù)計(jì)算模塊(2)用于完成對接收到的TCP/IP頭提取模塊I的提取結(jié)果的Hash結(jié)果計(jì)算,包括對正向提取內(nèi)容的計(jì)算和反向提取內(nèi)容的計(jì)算;并將計(jì)算結(jié)果發(fā)送到Ha s h結(jié)果重組模塊(3); Hash結(jié)果重組模塊(3)用于接收到正向提取內(nèi)容和反向提取內(nèi)容的Hash結(jié)果,并對兩個結(jié)果進(jìn)行重組,重組的方式為:對兩個結(jié)果做算術(shù)加法運(yùn)算,取運(yùn)算結(jié)果的低7位作為重組后的輸出結(jié)果,并發(fā)送到間接表查詢模塊(4); 間接表查詢模塊(4)用于根據(jù)接收到的Hash結(jié)果重組模塊(3)輸出的結(jié)果決定由哪個(PU核來對該報(bào)文進(jìn)行處理。2.根據(jù)權(quán)利要求1所述的一種面向TCP會話的對稱性RSS電路,其特征在于,RSS寄存器模塊(5)存儲的配置信息包括Hash類型、Hash Key和間接表。3.根據(jù)權(quán)利要求1所述的一種面向TCP會話的對稱性RSS電路,其特征在于,反向的TCP/IP頭的提取的規(guī)則是將源IP地址和目的IP地址以及源端口地址和目的端口地址分別進(jìn)行交換。4.根據(jù)權(quán)利要求3所述的一種面向TCP會話的對稱性RSS電路,其特征在于,針對4種Hash類型,具體的提取方式如下: (1)帶TCP頭的IPv4幀 正向提取內(nèi)容={源IPv4地址,目的IPv4地址,源端口地址,目的端口地址}; 反向提取內(nèi)容={目的IPv4地址,源IPv4地址,目的端口地址,源端口地址}; (2)IPv4幀 正向提取內(nèi)容={源IPv4地址,目的IPv4地址}; 反向提取內(nèi)容={目的IPv4地址,源IPv4地址}; (3)帶TCP頭的IPv6幀 正向提取內(nèi)容={源IPv6地址,目的IPv6地址,源端口地址,目的端口地址}; 反向提取內(nèi)容={目的IPv6地址,源IPv6地址,目的端口地址,源端口地址}; (4)IPv6幀 正向提取內(nèi)容={源IPv6地址,目的IPv6地址}; 反向提取內(nèi)容={目的IPv6地址,源IPv6地址}; 對于帶TCP頭的IPv4的數(shù)據(jù)幀和IPv4的數(shù)據(jù)幀,其提取內(nèi)容長度分別為12bytes和8bytes;對于帶TCP頭的IPv6數(shù)據(jù)幀和IPv6數(shù)據(jù)幀的提取內(nèi)容長度分別為36bytes和32bytes05.根據(jù)權(quán)利要求1所述的一種面向TCP會話的對稱性RSS電路,其特征在于,Hash函數(shù)計(jì)算模塊(2)由兩套功能相同的計(jì)算結(jié)構(gòu)組成,分別對TCP/IP頭提取模塊送來的正向提取內(nèi)容和反向提取內(nèi)容進(jìn)行Hash結(jié)果計(jì)算,每套計(jì)算結(jié)構(gòu)包括由I個提取內(nèi)容分割模塊(6)、1個Key值分割模塊(7)、字節(jié)Hash計(jì)算模塊(8)以及I個結(jié)果輸出模塊(9)構(gòu)成; 提取內(nèi)容分割模塊(6)根據(jù)RSS寄存器模塊(5)中Hash類型寄存器的配置,判斷出接收到的提取內(nèi)容的長度,接著對接收到的提取內(nèi)容進(jìn)行分割; Key值分割模塊(7)根據(jù)RSS寄存器模塊(5)中Hash Key寄存器的配置,獲得相應(yīng)的Key值,并對Key值進(jìn)行分割; 提取內(nèi)容分割模塊(6)和Key值分割模塊(7)分別將分割后的結(jié)果按照一一對應(yīng)的關(guān)系送入字節(jié)Hash計(jì)算模塊8,完成一個字節(jié)的Hash結(jié)果計(jì)算;字節(jié)Hash計(jì)算模塊(8)共有36個,按照Toeplitz函數(shù)的算法完成對8位提取內(nèi)容的計(jì)算,完成計(jì)算后將32位計(jì)算結(jié)果輸送給結(jié)果輸出模塊(9); 結(jié)果輸出模塊(9)接收來自36個字節(jié)Hash計(jì)算模塊(8)的計(jì)算結(jié)果,并對36組32位的結(jié)果進(jìn)行異或運(yùn)算,輸出32位的最終結(jié)果。6.根據(jù)權(quán)利要求5所述的一種面向TCP會話的對稱性RSS電路,其特征在于,提取內(nèi)容分割模塊(6)分割的方式為按照從數(shù)據(jù)最高位到最低位的方向,從數(shù)據(jù)的最高位開始,每連續(xù)8位分為一組,然后將分好的各組數(shù)據(jù)并行輸出;對于帶TCP頭的IPv4數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為12組;對于IPv4數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為8組;對于帶TCP頭的IPv6數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為36組;對于IPv6數(shù)據(jù)幀的提取內(nèi)容,其分組數(shù)為32組。7.根據(jù)權(quán)利要求6所述的一種面向TCP會話的對稱性RSS電路,其特征在于,提取內(nèi)容分割模塊(6)最多支持36組數(shù)據(jù)的并行輸出,對于分割組數(shù)不到36組的情況,指定剩余的組的輸出值為全零。8.根據(jù)權(quán)利要求5所述的一種面向TCP會話的對稱性RSS電路,其特征在于,Key值分割模塊(7)分割的方式為按照從Key值最高位到最低位的方向,從Key值的最高位開始,每間隔8位向后取40位Key值組成一組,然后將分好的各組Key值并行輸出。9.根據(jù)權(quán)利要求1所述的一種面向TCP會話的對稱性RSS電路,其特征在于,間接表查詢模塊(4)根據(jù)接收到的Hash結(jié)果重組模塊(3)輸出的結(jié)果決定由哪個CPU核來對該報(bào)文進(jìn)行處理的具體的工作過程是:間接表查詢模塊(4)根據(jù)輸入的7位結(jié)果,進(jìn)行相應(yīng)的地址轉(zhuǎn)換,然后用轉(zhuǎn)換后的地址從RSS寄存器模塊5中讀出間接表信息并輸出給RQP模塊;從間接表中讀出的信息是一組4位的數(shù)據(jù),其值分別對應(yīng)CPUO?CPU15,RQP模塊根據(jù)4位數(shù)據(jù)的結(jié)果將數(shù)據(jù)幀分配給對應(yīng)的CHJ核處理。
【文檔編號】H04L12/801GK105915462SQ201610394135
【公開日】2016年8月31日
【申請日】2016年6月3日
【發(fā)明人】李龍飛, 賀占莊, 王劍峰, 史陽春, 馮海強(qiáng)
【申請人】中國航天科技集團(tuán)公司第九研究院第七七研究所, 中國航天科技集團(tuán)公司第九研究院第七七一研究所