專利名稱:Tcam表項(xiàng)的壓縮方法
TCAM表項(xiàng)的壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種 TCAM(Ternary Content Addressable Memory,三態(tài)內(nèi)容尋址寄存器)表項(xiàng)的壓縮方法,屬于互聯(lián)網(wǎng)數(shù)據(jù)通信內(nèi)容壓縮領(lǐng)域。
背景技術(shù):
隨著互聯(lián)網(wǎng)的高速發(fā)展,網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)目大幅度增長,對路由器接口速率的要求也越來越高,例如支持IOG速率的路由器,單包轉(zhuǎn)發(fā)處理時(shí)間已經(jīng)要求小于50納秒,軟件路由查找機(jī)制顯然已不能滿足線速轉(zhuǎn)發(fā)要求。由于三態(tài)內(nèi)容可尋址寄存器(TCAM)查表速度快,且解決了 CIDR最長前綴匹配的問題,已成為業(yè)界目前常用的硬件解決方案。TCAM的每個(gè)單元位可以賦予3個(gè)邏輯態(tài)0、1或者X,其中χ代表一個(gè)不確定位, 可以起到掩碼的作用,這個(gè)掩碼使得TCAM可以存儲那些包含有通配符的規(guī)則。TCAM另外一個(gè)優(yōu)點(diǎn)是它所保存的表項(xiàng)可以實(shí)現(xiàn)長度靈活配置,結(jié)合掩碼的應(yīng)用可以在同一個(gè)TCAM芯片中保存任意長度的關(guān)鍵字表項(xiàng),因此,TCAM非常適用于最長前綴路由的查找。但是,由于TCAM對路由表項(xiàng)存放的有序性要求,使其表項(xiàng)管理較為復(fù)雜。若表項(xiàng)更新時(shí)間過長,必然影響查表速度,非常容易引起處理隊(duì)列阻塞甚至丟包,嚴(yán)重影響路由器的性能,也提高了路由器設(shè)計(jì)的難度,如對緩存容量提出更高的要求等。與本發(fā)明相關(guān)的現(xiàn)有技術(shù)請參閱2005年3月2日公告的中國發(fā)明專利第 CN1191520C號,該專利揭示了一種把都基于樹結(jié)構(gòu)的路由壓縮以及建立在把TCAM芯片內(nèi)的空間劃分為N個(gè)子空間的前綴鏈約束基礎(chǔ)上的前綴更新這兩個(gè)步驟前后合在一起的 TCAM高速更新方法,其中,判斷前綴是否需要更新的原則是該節(jié)點(diǎn)是否冗余,冗余則不更新,反之,則更新。然而,現(xiàn)有技術(shù)所揭示的方案適用于具有前綴的路由表項(xiàng)的壓縮,卻不適合于不具有前綴的非路由的普通TCAM表項(xiàng)的壓縮。例如,在虛擬私有局域網(wǎng)服務(wù)(VPLQ和虛擬專線服務(wù)(VPWQ應(yīng)用中,一個(gè)端口可以支持多個(gè)虛擬局域網(wǎng)(VLAN)的綁定。這種綁定方式稱為捆綁(bundle),它是MEF (Metro Ethernet Forum)城域以太網(wǎng)論壇定義的一種綁定方式。在此種應(yīng)用下,系統(tǒng)中存在大量的不具有前綴的表項(xiàng),它們的源端口相同,VLAN不同, 而處理相同。現(xiàn)有技術(shù)并不適合于此類表項(xiàng)的壓縮。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于提供一種能夠處理沒有前綴且只有一個(gè)變值元素的TCAM(Ternary Content Addressable Memory,三態(tài)內(nèi)容尋址寄存器)表項(xiàng)的壓縮方法。為解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案一種TCAM表項(xiàng)的壓縮方法,其特征在于包括如下步驟(1).首先把一組沒有前綴且只有一個(gè)變值元素的TCAM表項(xiàng),劃分為變值元素?cái)?shù)值連續(xù)的段;
(2).對于數(shù)值連續(xù)的段,系統(tǒng)先找出段內(nèi)可以馬上進(jìn)行掩碼壓縮的規(guī)則子段進(jìn)行直接壓縮;而對段內(nèi)不能立即壓縮的非規(guī)則子段,系統(tǒng)首先找出此類段公共數(shù)值,然后再進(jìn)行壓縮。作為本發(fā)明的進(jìn)一步改進(jìn),在添加新表項(xiàng)的步驟中,包括如下過程(a).確定元素值;(b).判斷該元素值是否不屬于任何段,如果屬于,結(jié)束;如果不屬于,進(jìn)行下一步; (c).判斷元素值是否在某段的邊緣,如果不在,就創(chuàng)建新段,其start和end分別為元素值; 如果在,進(jìn)行下一步;(d).判斷元素值是否在某兩段的邊緣,如果不在,把元素值合并入步驟(c)中的該某段,如果在,把該兩段合并成一段;(e).結(jié)束。作為本發(fā)明的進(jìn)一步改進(jìn),在刪除表項(xiàng)的步驟中,包括如下過程(a).確定刪除表項(xiàng)的元素值;(b).判斷元素值是否屬于某段,如果不屬于,結(jié)束;如果屬于,進(jìn)行下一步; (c).判斷元素值是否在某段的邊緣,如果不在,就創(chuàng)建兩個(gè)新段,范圍分別為start 元素值-1,元素值+1 end;如果在,進(jìn)行下一步;(d).更新步驟(c)中的該某段;(e).結(jié)束。作為本發(fā)明的進(jìn)一步改進(jìn),規(guī)則子段的壓縮包括如下過程(a).壓縮規(guī)則子段段 (start end) ; (b).保存公共數(shù)值;(c).得到規(guī)則子段壓縮后的數(shù)據(jù)和掩碼;(d).對新段 (start end)繼續(xù)壓縮。作為本發(fā)明的進(jìn)一步改進(jìn),非規(guī)則子段的壓縮包括如下過程(a).壓縮非規(guī)則子段段(start end) ; (b).保存公共數(shù)值;(c).得到規(guī)則子段壓縮后的數(shù)據(jù)和掩碼;(d).對新段(start end)繼續(xù)壓縮;(e).提取段公共數(shù)值,繼續(xù)壓縮,直至非規(guī)則子段不能壓縮為止。作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟(1)與步驟( 之間還包括一個(gè)通過采用添加新表項(xiàng)或者刪除表項(xiàng)的方式對段進(jìn)行維護(hù)的步驟。相較于現(xiàn)有技術(shù),經(jīng)驗(yàn)證,在VPWS、VPLS的捆綁應(yīng)用中,使用本發(fā)明,當(dāng)表項(xiàng)數(shù)目大于100時(shí),壓縮率平均在50%以上,且表項(xiàng)數(shù)目越多,數(shù)值越連續(xù),壓縮效率越高。
圖1是本發(fā)明壓縮方法中添加表項(xiàng)時(shí)的段劃分流程圖。圖2是本發(fā)明壓縮方法中刪除表項(xiàng)時(shí)的段劃分流程圖。
具體實(shí)施方式一組沒有前綴的 TCAM(Ternary Content Addressable Memory,三態(tài)內(nèi)容尋址寄存器)表項(xiàng),其中表項(xiàng)內(nèi)的其它元素?cái)?shù)值均相同,只有一項(xiàng)元素?cái)?shù)值不同,對這樣的元素, 稱為變值元素,本發(fā)明就是針對這種TCAM表項(xiàng),提供一種使用掩碼的壓縮方法。本發(fā)明壓縮方法的基本思想是首先把這樣的一組TCAM表項(xiàng),劃分為變值元素?cái)?shù)值連續(xù)的段,然后通過下述方法,對表項(xiàng)段進(jìn)行壓縮。圖1和圖2分別描述了在添加和刪除表項(xiàng)時(shí),TCAM如何維護(hù)表項(xiàng)段。請參圖1所示,(1).添加新表項(xiàng),元素值為a; (2).判斷元素值a是否不屬于任何段,如果屬于,結(jié)束; 如果不屬于,進(jìn)行下一步;(3).判斷元素值a是否在某段的邊緣,如果不在,就創(chuàng)建新段,其 start和end分別為a;如果在,進(jìn)行下一步;(4).判斷元素值a是否在某兩段的邊緣,如果不在,把元素值a合并入步驟(3)中的該某段,如果在,把該兩段合并成一段;( .結(jié)束。CN 102375820 A
說明書
3/4頁
請參圖2所示,(1).刪除表項(xiàng),元素值為a; (2).判斷元素值a是否屬于某段,如果不屬于,結(jié)束;如果屬于,進(jìn)行下一步;(3).判斷元素值a是否在某段的邊緣,如果不在, 就創(chuàng)建兩個(gè)新段,范圍分別為start a-1,a+1 end ;如果在,進(jìn)行下一步;(4).更新步驟(3)中的該某段;(5).結(jié)束。對于一個(gè)數(shù)值連續(xù)的段,本發(fā)明使用如下算法,壓縮表項(xiàng)段。首先,系統(tǒng)先找出段內(nèi)可以馬上進(jìn)行掩碼壓縮的子段。如子段G 7)可以直接壓縮,其壓縮后,data = 4,mask = 0x1100。這樣的段,特征在于 start = 2x,end = 2x+l-l, 并被稱之為規(guī)則子段。規(guī)則子段壓縮后,data = start, mask = “ (2χ-1)。對于不能立即壓縮的子段,被稱之為非規(guī)則子段。非規(guī)則字段也可以壓縮,系統(tǒng)首先找出此類段公共數(shù)值,再進(jìn)行壓縮。如段(6 7)不能直接壓縮,找出段公共數(shù)值為4,則新段成為0 ;3),段0 3)可以直接壓縮。壓縮后,data = 4+2,mask = 0x1110。此類段的公共數(shù)值為^,對于規(guī)則子段的壓縮算法偽碼如下compress_regular_segment (start, end) // 壓縮規(guī)則子段段(start end){common_value = 0 -J/ 保存公共數(shù)值While(I){χ = log2 (start);H立即得到規(guī)則子段壓縮后的數(shù)據(jù)和掩碼data = start+common_value ;mask = “ (2x_l);start = 2x+l ;continue -J/ 對新段(start end)繼續(xù)壓縮}}對于非規(guī)則子段的壓縮算法偽碼如下compress_unrelular_segment (start, end) // 壓縮非規(guī)則子段段(start end){common_value = 0 -J/ 保存公共數(shù)值While(I){χ = log2 (start);if (start == 2x){If (end >= 2x+l){//立即得到規(guī)則子段壓縮后的數(shù)據(jù)和掩碼data = start+common_value ;
5
mask = “ (2χ-1);start = 2x+l ;continue -J/ 對新段(start end)繼續(xù)壓縮}Else{common_value = common_value+2x ;start = start—common—value ;end = end-common_value ;continue ;//提取段公共數(shù)值common_value,繼續(xù)壓縮。}}else{common_value = common_value+2x ;start = start—common—value ;end = end-common_value ;continue ;//提取段公共數(shù)值common_value,繼續(xù)壓縮。}}}本發(fā)明的壓縮方法,先把表項(xiàng)分為數(shù)值連續(xù)的段,然后對段進(jìn)行壓縮。可以實(shí)現(xiàn)對沒有前綴且只有一個(gè)變值元素的TCAM表項(xiàng)進(jìn)行壓縮。經(jīng)驗(yàn)證,在VPWS、VPLS的捆綁應(yīng)用中,使用本發(fā)明,當(dāng)表項(xiàng)數(shù)目大于100時(shí),壓縮率平均在50 %以上,且表項(xiàng)數(shù)目越多,數(shù)值越連續(xù),壓縮效率越高。綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,不應(yīng)以此限制本發(fā)明的范圍,即凡是依本發(fā)明權(quán)利要求書及發(fā)明說明書內(nèi)容所作的簡單的等效變化與修飾,皆應(yīng)仍屬本發(fā)明專利涵蓋的范圍內(nèi)。
權(quán)利要求
1.一種TCAM表項(xiàng)的壓縮方法,其特征在于包括如下步驟(1).首先把一組沒有前綴且只有一個(gè)變值元素的TCAM(TernaryContentAddressable Memory,三態(tài)內(nèi)容尋址寄存器)表項(xiàng),劃分為變值元素?cái)?shù)值連續(xù)的段;(2).對于數(shù)值連續(xù)的段,系統(tǒng)先找出段內(nèi)可以馬上進(jìn)行掩碼壓縮的規(guī)則子段進(jìn)行直接壓縮;而對段內(nèi)不能立即壓縮的非規(guī)則子段,系統(tǒng)首先找出此類段公共數(shù)值,然后再進(jìn)行壓縮。
2.如權(quán)利要求1所述的壓縮方法,其特征在于在添加新表項(xiàng)的步驟中,包括如下過程(a).確定元素值;(b).判斷該元素值是否不屬于任何段,如果屬于,結(jié)束;如果不屬于, 進(jìn)行下一步;(c).判斷元素值是否在某段的邊緣,如果不在,就創(chuàng)建新段,其start和end 分別為元素值;如果在,進(jìn)行下一步;(d).判斷元素值是否在某兩段的邊緣,如果不在,把元素值合并入步驟(c)中的該某段,如果在,把該兩段合并成一段;(e).結(jié)束。
3.如權(quán)利要求1所述的壓縮方法,其特征在于在刪除表項(xiàng)的步驟中,包括如下過程 (a).確定刪除表項(xiàng)的元素值;(b).判斷元素值是否屬于某段,如果不屬于,結(jié)束;如果屬于,進(jìn)行下一步;(c).判斷元素值是否在某段的邊緣,如果不在,就創(chuàng)建兩個(gè)新段,范圍分別為start 元素值-1,元素值+1 end;如果在,進(jìn)行下一步;(d).更新步驟(c)中的該某段;(e).結(jié)束。
4.如權(quán)利要求1所述的壓縮方法,其特征在于規(guī)則子段的壓縮包括如下過程(a). 壓縮規(guī)則子段段(start end) ; (b).保存公共數(shù)值;(c).得到規(guī)則子段壓縮后的數(shù)據(jù)和掩碼;(d).對新段(start end)繼續(xù)壓縮。
5.如權(quán)利要求1所述的壓縮方法,其特征在于非規(guī)則子段的壓縮包括如下過程(a). 壓縮非規(guī)則子段段(start end) ; (b).保存公共數(shù)值;(c).得到規(guī)則子段壓縮后的數(shù)據(jù)和掩碼;(d).對新段(start end)繼續(xù)壓縮;(e).提取段公共數(shù)值,繼續(xù)壓縮,直至非規(guī)則子段不能壓縮為止。
6.如權(quán)利要求1所述的壓縮方法,其特征在于所述步驟(1)與步驟( 之間還包括一個(gè)通過采用添加新表項(xiàng)或者刪除表項(xiàng)的方式對段進(jìn)行維護(hù)的步驟。
全文摘要
本發(fā)明公開了一種TCAM(Ternary Content Addressable Memory,三態(tài)內(nèi)容尋址寄存器)表項(xiàng)的壓縮方法,包括如下步驟首先把一組沒有前綴且只有一個(gè)變值元素的TCAM表項(xiàng),劃分為變值元素?cái)?shù)值連續(xù)的段;通過采用添加新表項(xiàng)或者刪除表項(xiàng)的方式,對段進(jìn)行維護(hù);對于數(shù)值連續(xù)的段,系統(tǒng)先找出段內(nèi)可以馬上進(jìn)行掩碼壓縮的規(guī)則子段進(jìn)行直接壓縮,而對段內(nèi)不能立即壓縮的非規(guī)則子段,系統(tǒng)首先找出此類段公共數(shù)值,然后再進(jìn)行壓縮。經(jīng)驗(yàn)證,在VPWS、VPLS的捆綁應(yīng)用中,使用本發(fā)明,當(dāng)表項(xiàng)數(shù)目大于100時(shí),壓縮率平均在50%以上,且表項(xiàng)數(shù)目越多,數(shù)值越連續(xù),壓縮效率越高。
文檔編號H04L12/46GK102375820SQ20101025219
公開日2012年3月14日 申請日期2010年8月12日 優(yōu)先權(quán)日2010年8月12日
發(fā)明者陳玉強(qiáng) 申請人:盛科網(wǎng)絡(luò)(蘇州)有限公司