鍵值分組方法
【專利摘要】本發(fā)明公開了一種鍵值分組方法包括以下步驟:首先,將查找引擎從物理上劃分為不同的查找單元,在查找引擎進(jìn)行查找的時(shí)候,每個(gè)查找單元都可以獨(dú)立的輸出匹配優(yōu)先級(jí)最高的規(guī)則;其次,在將查找規(guī)則拆分成的鍵值寫入搜索引擎時(shí),將互相之間會(huì)發(fā)生多重匹配的拆分鍵值寫入不同的查找單元中,這樣在查找時(shí)即使發(fā)生了多重匹配,各個(gè)查找單元仍然可以保留這些發(fā)生了多重匹配的各個(gè)結(jié)果;最后,將保留的這些結(jié)果與其他拆分鍵值匹配的結(jié)果進(jìn)行合并及優(yōu)先級(jí)比較。
【專利說(shuō)明】鍵值分組方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,特別是涉及一種網(wǎng)絡(luò)查找中的鍵值分組方法。
【背景技術(shù)】
[0002]現(xiàn)有的基于查找引擎(例如TCAM)的網(wǎng)絡(luò)查找中,對(duì)于查找引擎里存儲(chǔ)規(guī)則中的重復(fù)出現(xiàn)部分,一直缺乏有效的方法實(shí)現(xiàn)對(duì)重復(fù)出現(xiàn)部分的復(fù)用,以節(jié)省查找引擎的存儲(chǔ)空間。另外,對(duì)于網(wǎng)絡(luò)中所要實(shí)現(xiàn)的超長(zhǎng)表項(xiàng)的查找,也同樣缺乏有效的對(duì)超長(zhǎng)表項(xiàng)的分解,以完成超長(zhǎng)表項(xiàng)的查找。
[0003]在網(wǎng)絡(luò)處理器(交換機(jī),路由器等對(duì)數(shù)據(jù)報(bào)文進(jìn)行處理的設(shè)備)對(duì)報(bào)文處理的過(guò)程中,需要用查找引擎以完成各種查找,查找引擎會(huì)返回查找到的規(guī)則表項(xiàng)地址以讀取關(guān)聯(lián)數(shù)據(jù)或者直接返回關(guān)聯(lián)數(shù)據(jù),然后網(wǎng)絡(luò)處理器會(huì)根據(jù)返回的關(guān)聯(lián)數(shù)據(jù)決定對(duì)該數(shù)據(jù)包文如何處理。
[0004]在查找引擎所存儲(chǔ)的規(guī)則表項(xiàng)中,存在著多個(gè)規(guī)則表項(xiàng)同時(shí)都包含了同樣的部分,如果不對(duì)該部分?jǐn)?shù)據(jù)進(jìn)行復(fù)用,查找引擎里要花費(fèi)很大的空間以完成對(duì)這些表項(xiàng)的存儲(chǔ),特別是隨著ipv6地址逐步取代ipv4地址,這個(gè)問題越來(lái)越突出。
[0005]另外,對(duì)于超長(zhǎng)的表項(xiàng)查找,目前也缺乏有效的表項(xiàng)拆分手段以完成拆分表項(xiàng)查找結(jié)果的合并。
[0006]如果規(guī)則表項(xiàng)中所重復(fù)的部分是完全精確匹配(要查找的)的,目前已有技術(shù)方案可以對(duì)該問題提供方法(Netlogic公司所申請(qǐng)的一項(xiàng)美國(guó)專利,專利號(hào):US7,694,068BI,專利名稱:RE-ENTRANT PROCESSING IN A CONTENT ADDRESSABLE MEMORY),該專利本來(lái)的目的是為了節(jié)省網(wǎng)絡(luò)處理器與查找引擎之間的帶寬,但客觀上也可用來(lái)提供精確匹配重復(fù)部分的重復(fù)利用。根據(jù)該專利所提供的方法,可以對(duì)表項(xiàng)進(jìn)行拆分,然后先對(duì)表項(xiàng)的重復(fù)出現(xiàn)部分進(jìn)行查找,再將查找返回的結(jié)果與后面要查找的部分重新組成一個(gè)新的表項(xiàng)以完成后續(xù)的查找。這樣查找引擎里只需要存儲(chǔ)一次該重復(fù)部分,就可以代表所有含有該重復(fù)部分的表項(xiàng)。另外,對(duì)于超長(zhǎng)查找表項(xiàng)中的重復(fù)出現(xiàn)部分,如果所重復(fù)部分是完全精確匹配的,也可以通過(guò)2次或多次查找完成。
[0007]現(xiàn)有技術(shù)只能完成對(duì)重復(fù)部分為精確匹配的重復(fù)部分表項(xiàng)共享,否則對(duì)重復(fù)部分的查找會(huì)遇到多重匹配的問題,例如:將規(guī)則A拆分為{a0,al},規(guī)則B拆分為{a0,bl},規(guī)則C拆分為{c0,cl},其中規(guī)則A和規(guī)則B中的a0部分復(fù)用,如果在進(jìn)行表項(xiàng)查找的時(shí)候a0, CO同時(shí)與查找鍵值的相應(yīng)部分匹配(由于a0,c0不為精確匹配,因此可能發(fā)生多重匹配),則初始查找到的結(jié)果為兩個(gè),無(wú)法只將一個(gè)結(jié)果返回以完成后續(xù)查找。這樣就無(wú)法完成查找引擎存儲(chǔ)空間上的節(jié)省。
[0008]同樣地,對(duì)于超長(zhǎng)表項(xiàng)的拆分仍然會(huì)遇到多重匹配從而無(wú)法完成后續(xù)查找的問題。
【發(fā)明內(nèi)容】
[0009]為了至少解決上述問題之一,本發(fā)明提出了一種查找引擎的把規(guī)則拆分后的鍵值分組方法,包括以下步驟:
[0010]首先,將查找引擎從物理上劃分為不同的查找單元,在查找引擎進(jìn)行查找的時(shí)候,每個(gè)查找單元都可以獨(dú)立的輸出匹配優(yōu)先級(jí)最高的規(guī)則;
[0011]其次,在將查找規(guī)則拆分成的鍵值寫入搜索引擎時(shí),將互相之間會(huì)發(fā)生多重匹配的拆分鍵值寫入不同的查找單元中,這樣在查找時(shí)即使發(fā)生了多重匹配,各個(gè)查找單元仍然可以保留這些發(fā)生了多重匹配的各個(gè)結(jié)果;
[0012]最后,將保留的這些結(jié)果與其他拆分鍵值匹配的結(jié)果進(jìn)行合并及優(yōu)先級(jí)比較。
[0013]優(yōu)選地,查找單元所存放的數(shù)據(jù)包括數(shù)據(jù)段,掩碼段,起始標(biāo)志位,組編號(hào)和后續(xù)標(biāo)志位,其中所述數(shù)據(jù)段和掩碼段共同表示被拆分后的鍵值,起始標(biāo)志位用于標(biāo)示該鍵值是否為起始鍵值,組編號(hào)用于標(biāo)示鍵值之間的關(guān)聯(lián),相同的組編號(hào)表示這兩條鍵值的關(guān)聯(lián),后續(xù)標(biāo)志位用于標(biāo)示該鍵值是否有后續(xù)鍵值。
[0014]優(yōu)選地,查找單元所存放的數(shù)據(jù)包括數(shù)據(jù)段,掩碼段,起始段和結(jié)束段,其中所述數(shù)據(jù)段和掩碼段共同表示被拆分后的鍵值,所述起始段為O時(shí)表示該段鍵值為起始鍵值,所述結(jié)束段為O時(shí)表示該段鍵值為結(jié)束鍵值,當(dāng)每個(gè)鍵值的起始段與上一鍵值的結(jié)束段相等表示他們屬于同一條規(guī)則拆分后的鍵值。
【專利附圖】
【附圖說(shuō)明】
[0015]本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解。
[0016]圖1本發(fā)明實(shí)施例的查找規(guī)則拆分示意圖;
[0017]圖2本發(fā)明實(shí)施例的鍵值匹配電路示意圖;
[0018]圖3本發(fā)明實(shí)施例的一種寫入查找單元的數(shù)據(jù)格式示意圖;
[0019]圖4本發(fā)明實(shí)施例的利用圖3的數(shù)據(jù)格式對(duì)拆分鍵值編組的關(guān)聯(lián)示意圖;
[0020]圖5本發(fā)明實(shí)施例的另一種寫入查找單元的數(shù)據(jù)格式示意圖;
[0021]圖6本發(fā)明實(shí)施例的利用圖5的數(shù)據(jù)格式對(duì)拆分鍵值編組的關(guān)聯(lián)示意圖;
[0022]圖7本發(fā)明實(shí)施例的軟件流程示意圖;
[0023]圖8本發(fā)明實(shí)施例的查找執(zhí)行過(guò)程示意圖;
[0024]圖9本發(fā)明實(shí)施例的哈希映射的硬件結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0025]下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。顯而易見的是,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例而非全部,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明的保護(hù)范圍。
[0026]本專利主要以其在查找引擎(包括TCAM等查找器件)中的方法和實(shí)現(xiàn)解釋,除此以外,對(duì)于集成了查找引擎的芯片和系統(tǒng)也可能采用本專利所述方法,因此也在本專利的保護(hù)范圍內(nèi)。
[0027]首先結(jié)合圖1闡明本專利要解決的問題一查找引擎存儲(chǔ)空間浪費(fèi)和超長(zhǎng)規(guī)則查找:在圖1中,規(guī)則集里的鍵值A(chǔ)、鍵值C、鍵值E里都包含共同的部分鍵值a0,鍵值B、鍵值D、鍵值F里都包含共同的部分鍵值bO。如果按照原始規(guī)則集里的鍵值存儲(chǔ)鍵值A(chǔ)-F,則沒有充分利用鍵值A(chǔ),C,E可以共享鍵值a0的特點(diǎn),造成查找引擎里存儲(chǔ)空間的浪費(fèi)。本專利的目的是希望將圖1中的整條要查找的鍵值A(chǔ)-F轉(zhuǎn)化為右圖分解后的鍵值,在鍵值aO,bO很長(zhǎng)的情況下就可以極大節(jié)省查找引擎的存儲(chǔ)空間。在網(wǎng)絡(luò)處理器發(fā)出查找指令的時(shí)候,則需要查找引擎將待查找鍵值拆分成與查找表O和查找表I對(duì)應(yīng)的待查找鍵值分別進(jìn)行查找,然后根據(jù)指定的拼接方法找出最終匹配的規(guī)則。
[0028]在處理超長(zhǎng)規(guī)則查找時(shí),在將一個(gè)超長(zhǎng)規(guī)則拆分成2個(gè)或多個(gè)查找引擎所能支持的較短鍵值后,則超長(zhǎng)規(guī)則查找仍然可以完成。
[0029]在具體解釋本專利提供的解決方案之前,首先結(jié)合圖1解釋下網(wǎng)絡(luò)中常常發(fā)生的多重匹配,也就是說(shuō)對(duì)應(yīng)同一條待查找鍵值,查找表里的鍵值a0和鍵值bO可能同時(shí)匹配。例如以查找表O存放的為ipv4地址為例,鍵值a0為192.168.x.X,鍵值bO為192.168.100.100,當(dāng)待查找鍵值為192.168.100.100的時(shí)候,a0和bO會(huì)同時(shí)匹配。此時(shí)無(wú)法根據(jù)原始的鍵值A(chǔ)-F的優(yōu)先級(jí)決定將保留鍵值a0還是鍵值bO以作為最終匹配的可能選項(xiàng),因?yàn)殒I值A(chǔ)-F中低優(yōu)先級(jí)對(duì)應(yīng)的規(guī)則有可能由于查找表I中對(duì)應(yīng)鍵值的匹配反而最終勝出為此次查找的匹配規(guī)則。因此不管是解決查找引擎存儲(chǔ)空間浪費(fèi),還是超長(zhǎng)規(guī)則查找,都需要解決多重匹配的問題。
[0030]為解決多重匹配問題,本專利提供了一種把規(guī)則拆分后的鍵值分組的方法解決上述的問題,其方法如下:
[0031]首先查找引擎需要從物理上可以劃分為不同的查找單元,在查找引擎進(jìn)行查找的時(shí)候,每個(gè)查找單元都可以獨(dú)立的輸出匹配優(yōu)先級(jí)最高的規(guī)則。在軟件將查找規(guī)則拆分成的鍵值寫入搜索引擎的時(shí)候,將互相之間會(huì)發(fā)生多重匹配的拆分鍵值寫入不同的查找單元中,這樣在查找的時(shí)候即使發(fā)生了多重匹配,各個(gè)查找單元仍然可以可以保留這些發(fā)生了多重匹配的各個(gè)結(jié)果,然后這些結(jié)果可以與其他拆分鍵值匹配的結(jié)果進(jìn)行合并以及優(yōu)先級(jí)比較。如圖2所示:
[0032]在圖2中,p0,pi分別代表待查找的鍵值按照鍵值A(chǔ)-F的拆分格式拆分后的鍵值,進(jìn)入查找引擎后,經(jīng)過(guò)鍵值拆分電路將其送入各自的查找單元中進(jìn)行查找,查找所匹配的結(jié)果將送入匹配結(jié)果合并電路,從而得到最終匹配的并且優(yōu)先級(jí)最高的結(jié)果。其中,查找單元中所存放的數(shù)據(jù)分別對(duì)應(yīng)于圖1中所拆分的各個(gè)鍵值,以a0_g,al_g為例,其格式如圖3所示。
[0033]其中,數(shù)據(jù)a0和a0對(duì)應(yīng)的掩碼共同表示被拆分后的a0鍵值,在數(shù)據(jù)a0之后的I比特?cái)?shù)據(jù)O表示a0是起始鍵值,gid用來(lái)表示組編號(hào),以便在后面的匹配結(jié)果合并電路里與鍵值al對(duì)應(yīng)的gid相等表不這兩條鍵值的關(guān)聯(lián),gid之后的I比特?cái)?shù)據(jù)I表不鍵值a0后面還有關(guān)聯(lián)數(shù)據(jù)。與此類同的,鍵值al后的I表示是后續(xù)鍵值,O表示鍵值al后再無(wú)關(guān)聯(lián)鍵值。圖4是利用該格式對(duì)拆分鍵值編組的一個(gè)關(guān)聯(lián)示意圖:a0和al的復(fù)用,則可以用圖5表示鍵值之間的關(guān)聯(lián)。
[0034]在上面的格式中,HeadG為O時(shí)表示該段鍵值為起始鍵值,TailG為O時(shí)表示到該段鍵值關(guān)聯(lián)結(jié)束。當(dāng)每個(gè)鍵值的HeadG與上一段數(shù)據(jù)的TailG數(shù)值相等,就標(biāo)明他們是屬于同一條規(guī)則拆分后的鍵值,這樣就可以靈活的實(shí)現(xiàn)鍵值組合后的共享。圖6是被圖5中的格式拆分鍵值之間的一個(gè)關(guān)聯(lián)示意圖。
[0035]綜上,利用本專利所提供的上述方法,即使在拆分鍵值之間可能發(fā)生多重匹配的情況下,也可以有效地實(shí)現(xiàn)重復(fù)鍵值共享,以及實(shí)現(xiàn)超長(zhǎng)規(guī)則查找。
[0036]具體的實(shí)現(xiàn)過(guò)程分為軟件部分和硬件部分,對(duì)于軟件部分來(lái)說(shuō),以單部分重復(fù)鍵值共享并用圖3中的關(guān)聯(lián)方法為例,其處理流程主要是:分析每一條待添加的規(guī)則,看其所拆分的鍵值是否已存在于對(duì)應(yīng)的已拆分鍵值數(shù)據(jù)庫(kù)中;如果已經(jīng)存在,則記住已經(jīng)存在鍵值的gid,并將該gid給剩余部分作為標(biāo)記,然后添加到其對(duì)應(yīng)的鍵值庫(kù)中,如果不存在,則取未使用的gid,并將兩部分都以該gid添加到對(duì)應(yīng)的拆分鍵值數(shù)據(jù)庫(kù)中。其流程圖如圖7所示。
[0037]硬件實(shí)現(xiàn)部分,也就是真正執(zhí)行的查找過(guò)程如下:首先將待查找的鍵值按預(yù)先設(shè)置的拆分規(guī)則分為兩部分,兩部分鍵值分別到各自對(duì)應(yīng)的鍵值庫(kù)中進(jìn)行查找;將兩部分鍵值匹配結(jié)果中的gid分別比較,若存在gid相等的情況,則表明這兩個(gè)拆分鍵值組合成功,可以參加最終的優(yōu)先級(jí)比較;最后進(jìn)行組合成功鍵值的優(yōu)先級(jí)比較,得到具有最高優(yōu)先級(jí)的查找規(guī)則。其流程圖如圖8所示。
[0038]在上述流程中的第3步,對(duì)兩組(多組)查找結(jié)果中的gid分別比對(duì)的時(shí)候,如果硬件電路采取直接比對(duì)的方式,將會(huì)產(chǎn)生數(shù)量很大的比較器,對(duì)硬件是一個(gè)非常大的耗費(fèi),因此可以選擇哈希映射的方法進(jìn)行比對(duì),其具體相關(guān)的硬件結(jié)構(gòu)如圖9所示。
[0039]上述電路結(jié)構(gòu)可以避免對(duì)gid的直接比較,對(duì)于其可能存在的哈希沖突問題可以采用多重哈希映射、采用備用比較電路等方式。除此以外,也可以采用軟件預(yù)設(shè)置等方式來(lái)避免哈希沖突所帶來(lái)的比較電路過(guò)多的問題。
[0040]本發(fā)明可以有效的解決重復(fù)鍵值復(fù)用以及超長(zhǎng)規(guī)則查找中的多重匹配問題?,F(xiàn)有技術(shù)則只能實(shí)現(xiàn)重復(fù)鍵值是精確匹配情況下的復(fù)用。
[0041]除此之外,利用HeadG和TailG對(duì)接的方法,本發(fā)明還可以實(shí)現(xiàn)多重共享。
[0042]除了能夠應(yīng)用于查找引擎(包括TCAM/CAM,以及其他用算法所實(shí)現(xiàn)的查找引擎),還可以在其他集成了查找引擎的芯片或系統(tǒng)中。
[0043]另外,對(duì)鍵值格式做一些簡(jiǎn)單替換也可以完成功能,但在方法上還是屬于本專利的范圍。
【權(quán)利要求】
1.一種鍵值分組方法,其特征在于,包括以下步驟: 首先,將查找引擎從物理上劃分為不同的查找單元,在查找引擎進(jìn)行查找的時(shí)候,每個(gè)查找單元都可以獨(dú)立的輸出匹配優(yōu)先級(jí)最高的規(guī)則; 其次,在將查找規(guī)則拆分成的鍵值寫入搜索引擎時(shí),將互相之間會(huì)發(fā)生多重匹配的拆分鍵值寫入不同的查找單元中,這樣在查找時(shí)即使發(fā)生了多重匹配,各個(gè)查找單元仍然可以保留這些發(fā)生了多重匹配的各個(gè)結(jié)果; 最后,將保留的這些結(jié)果與其他拆分鍵值匹配的結(jié)果進(jìn)行合并及優(yōu)先級(jí)比較。
2.根據(jù)權(quán)利要求1所述的鍵值分組方法,其特征在于,將互相之間會(huì)發(fā)生多重匹配的拆分鍵值寫入不同的查找單元時(shí),寫入查找單元的數(shù)據(jù)包括數(shù)據(jù)段,掩碼段,起始標(biāo)志位,組編號(hào)和后續(xù)標(biāo)志位,其中所述數(shù)據(jù)段和掩碼段共同表示被拆分后的鍵值,起始標(biāo)志位用于標(biāo)示該鍵值是否為起始鍵值,組編號(hào)用于標(biāo)示鍵值之間的關(guān)聯(lián),相同的組編號(hào)表示這兩條鍵值的關(guān)聯(lián),后續(xù)標(biāo)志位用于標(biāo)示該鍵值是否有后續(xù)鍵值。
3.根據(jù)權(quán)利要求1所述的鍵值分組方法,其特征在于,將互相之間會(huì)發(fā)生多重匹配的拆分鍵值寫入不同的查找單元時(shí),寫入查找單元的數(shù)據(jù)包括數(shù)據(jù)段,掩碼段,起始段和結(jié)束段,其中所述數(shù)據(jù)段和掩碼段共同表示被拆分后的鍵值,所述起始段為O時(shí)表示該段鍵值為起始鍵值,所述結(jié)束段為O時(shí)表示該段鍵值為結(jié)束鍵值,當(dāng)每個(gè)鍵值的起始段與上一鍵值的結(jié)束段相等表示他們屬于同一條規(guī)則拆分后的鍵值。
【文檔編號(hào)】G06F17/30GK103473237SQ201210187221
【公開日】2013年12月25日 申請(qǐng)日期:2012年6月8日 優(yōu)先權(quán)日:2012年6月8日
【發(fā)明者】林彥竹, 張建杰, 熊冰 申請(qǐng)人:蘇州雄立科技有限公司