專利名稱:支持路由壓縮的tcam高速更新方法
技術(shù)領(lǐng)域:
支持路由壓縮的TCAM(三態(tài)內(nèi)容可尋址存儲器)高速更新方法屬于互聯(lián)網(wǎng)中高速IP地址查找領(lǐng)域。
Internet網(wǎng)絡(luò)中,拓撲是動態(tài)變化的,路由也是動態(tài)改變的。路由器為了保證分組的轉(zhuǎn)發(fā)正確,必須快速的對路由改變做出反映,及時的把新路由加入到路由表,并把過期路由從路由表中刪除。路由更新的處理速度成為路由查找方案的一個重要評價指標(biāo)。低效率的路由更新會大大影響TCAM的路由查找性能,增加路由查找的延遲。
對于TCAM技術(shù)的三個缺點,研究者提出了相應(yīng)的解決方案。對于缺點1、2,可以通過壓縮路由表的方法來解決。壓縮后的路由表對TCAM存儲空間的需求減少,使用較小容量的TCAM芯片就可滿足存儲要求,這就減少了TCAM技術(shù)的成本,同時使用小容量的TCAM芯片也減少了芯片內(nèi)部的功耗以及散熱。Liu基于Prunning(刪減)和Mask Extension(掩碼擴展)技術(shù),提出一種TCAM的路由表壓縮算法。該算法對Internet網(wǎng)絡(luò)中實際路由表,可達到40%左右的壓縮比。但算法的更新過程復(fù)雜,更新速度很慢,難以滿足Internet網(wǎng)絡(luò)中路由更新的速度。
對于缺點3,Shah基于TCAM中前綴鏈約束的路由排序方式(Tries樹結(jié)構(gòu)中,從根結(jié)點到葉子結(jié)點的路徑稱為鏈,前綴鏈約束是指鏈上出現(xiàn)的路由前綴應(yīng)按照越靠近葉子的前綴存儲在越低的地址的規(guī)則在TCAM中存儲),提出CAO_OPT路由更新算法。最差情況下,CAO_OPT算法的更新復(fù)雜度為O(D/2)(D為Tries樹中最大鏈長度),平均情況下,CAO_OPT的更新復(fù)雜度可達O(AD/2)(AD為Tries樹中所有鏈的平均長度)。當(dāng)路由表中路由前綴比較少時,AD值也比較小,CAO_OPT算法性能很好。但隨著路由前綴的增加,Tries樹結(jié)點分布越來越密集,AD值也隨之增加,CAO_OPT算法性能相應(yīng)下降。尤其對IPv6協(xié)議,地址長度從32Bits擴展為128Bits,路由表中的路由前綴數(shù)目大大增加,CAO_OPT算法的性能會下降很多。
本發(fā)明提出的查找方法的特征在于,它是一種把都基于樹結(jié)構(gòu)的路由壓縮和建立在把TCAM(三態(tài)內(nèi)容可尋址存儲器)芯片內(nèi)的空間劃分為N個子空間的前綴鏈約束基礎(chǔ)之上的前綴更新這兩個步驟前后合在一起的TCAM高速更新方法,它依次含有以下步驟(1)在樹結(jié)構(gòu)中,找到代表更新路由的結(jié)點fn,更新路由是指增加路由或刪除路由;(2)判斷fn的前綴是否需要更新至TCAM中若需要更新,則執(zhí)行步驟(3);若無需更新,則執(zhí)行步驟(4);(3)把fn的前綴更新至TCAM;(4)判斷fn的子結(jié)點是否需要更新至TCAM中若需要更新,則執(zhí)行步驟(5);若無需更新,則執(zhí)行步驟(6);(5)把fn子結(jié)點的前綴更新至TCAM;(6)更新結(jié)點fn的數(shù)據(jù)成員;其中,所述的步驟(3)把fn的前綴更新至TCAM,它依次含有以下步驟3.1利用評價函數(shù)Tmin(W,N)把TCAM空間劃分為N子空間,其中Tmin(W,N)=Mini=NtoW(Tmin(i-1,N-1)+F(i,W))]]>W表示IP地址長度,也是最大路由前綴長度;N表示劃分子空間的個數(shù);Tmin(W,N)表示
長度區(qū)間的前綴,在N子空間劃分下,移動操作和寫入操作總和的最小值;Tmin(i-1,N-1)表示
長度區(qū)間的前綴,在N-1子空間劃分下,移動操作和寫入操作總和的最小值;F(i,W)表示在區(qū)間[i,W]內(nèi)的前綴,在一個子空間內(nèi)更新所需操作的數(shù)目。
3.2根據(jù)前綴的長度找到TCAM中對應(yīng)的前綴子空間Lk=[lk-1+1,lk];3.3在子空間Lk內(nèi),按照前綴鏈約束,對樹鏈上的路由前綴進行移動操作;3.4把fn的前綴更新至TCAM中;所述的步驟(2),判斷fn的前綴是否需要更新至TCAM中的原則是,此路由前綴是否冗余,即此路由前綴若和其父結(jié)點具有相同的下一跳地址和出端口,也就是說,它們的轉(zhuǎn)發(fā)結(jié)果是一樣的,則此路由前綴在路由表中是冗余的,則不更新至TCAM;否則,就需要更新至TCAM中。
使用證明它有以下特點支持高速的路由更新,支持有效的路由表壓縮,對IPv6協(xié)議具有很好的擴展性。
圖2.刪除前綴時路由更新的程序流程框圖。
圖3.TCAM前綴增加的程序流程框圖(hcld->prefixlenhcld結(jié)點前綴的前綴長度)。
圖4.TCAM前綴刪除的程序流程框圖(P0子空間最靠近空閑區(qū)域的前綴結(jié)點)。
圖5.TCAM內(nèi)N子空間劃分。
圖6.子空間內(nèi)增加前綴示意圖。
圖7.子空間內(nèi)刪除前綴示意圖。
基于Tries樹的路由表結(jié)構(gòu)中,如果路由前綴P1為路由前綴P2的父結(jié)點,同時P1具有和P2相同的下一跳地址和出端口,那么路由查找結(jié)果為P1和P2,它們的轉(zhuǎn)發(fā)結(jié)果是一樣的。這時,P2在路由表中是冗余,我們可以對P2可以實行刪減,不把P2的路由前綴寫入到TCAM芯片中。基于這樣的思想我們進行路由壓縮。為了支持壓縮,我們需要對Tries結(jié)點增加一個標(biāo)記prun_flag,如果prun_flag為1則表示該結(jié)點代表的路由前綴是可刪減的,不用更新至TCAM芯片中,如果prun_flag為0則表示此結(jié)點代表的路由前綴是不可刪減的,應(yīng)更新至TCAM中。
路由壓縮在增加路由和刪除路由時,都需要進行。
圖1,圖2為增加路由和刪除路由時,路由壓縮過程的流程圖。圖中,tcam_add為圖3所示的TCAM增加前綴過程;tcam_delete為圖4所示的TCAM刪除前綴過程;parent為結(jié)點的父結(jié)點指針。
為了保證TCAM芯片可進行最長匹配查找,TCAM內(nèi)的路由前綴采用前綴鏈約束順序進行組織。前綴鏈約束基于Tries樹結(jié)構(gòu),我們維護一個Tries樹結(jié)構(gòu)輔助TCAM的路由前綴更新。
我們把TCAM內(nèi)的空間劃分為N個子空間,分別為{S1,S2,S3,...,SN-1,SN};每個子空間關(guān)聯(lián)一個前綴區(qū)間,分別為{L1=
,L2=[l1+1,l2],...,LN-1=[lN-2+1,lN-1],LN=[lN-1+1,W]},其中l(wèi)1,l2,..,lN-1為
的整數(shù),并且滿足l1<l2<...<lN-1;這些區(qū)間把路由前綴長度區(qū)間
分成了連續(xù)的N段。(W為IP地址長度,也是最大路由前綴長度)。如果某個前綴它的前綴長度屬于前綴區(qū)間Lk,則該前綴在TCAM內(nèi)應(yīng)存儲在Sk子空間中。圖5為TCAM內(nèi)子空間劃分的示意圖。圖中灰色條框表示TCAM內(nèi)的一個地址單元。虛線表示前綴在Tries樹中的鏈關(guān)系。
子空間內(nèi)空閑的空間位于低地址端,這與把空閑空間放在高地址端相比,可以有效減少更新時移動的次數(shù)。鏈中越靠近葉子的結(jié)點,結(jié)點的密度越大,如果空閑空間放在高地址端,添加靠近葉子結(jié)點時,它們的父結(jié)點需要頻繁的進行移動操作,這大大增加了更新的開銷。進行前綴更新時,首先根據(jù)前綴的長度判斷前綴所屬的子空間,然后在對應(yīng)的子空間內(nèi)進行對該前綴進行添加和刪除操作。下面對子空間內(nèi)前綴的添加和刪除做進一步說明?!褡涌臻g內(nèi)前綴增加圖6為子空間內(nèi)前綴增加示意圖。為了基于鏈完成前綴更新,我們需要為每個前綴結(jié)點p在Tries樹結(jié)點增加兩個變量tcam_index、hcld。tcam_indx為p結(jié)點前綴在TCAM芯片中的位置。hcld為指針,它指向p結(jié)點多個前綴子結(jié)點中,在TCAM中存儲位置最低的子結(jié)點。圖6中p為新加入的前綴結(jié)點。按照圖中箭頭所示,首先把hcld(hcld(p))的前綴移至空閑空間,然后hcld(p)的前綴移至hcld(hcld(p))所在位置,最后把p結(jié)點寫入hcld(p)所在位置。
圖3為在TCAM內(nèi)進行前綴增加整個過程的流程圖。對流程圖的步驟解釋如下1.設(shè)fn為增加的前綴結(jié)點,置當(dāng)前結(jié)點pn=fn,找到結(jié)點fn對應(yīng)的前綴子空間Lk;2.如果pn->hcld的前綴屬于Lk子空間,跳至3;否則跳至4;3.把pn->hcld加入到hcld_array數(shù)組中,置pn=pn->hcld,至2;4.按照圖6所示的方法,順序移動hcld_array數(shù)組中的結(jié)點前綴;圖3中的變量i,為臨時計數(shù)變量?!褡涌臻g內(nèi)前綴刪除圖7子空間內(nèi)前綴刪除的示意圖。為了基于鏈進行前綴的刪除,我們需要為Tries樹中每個結(jié)點p增加一個變量parent。它為指針,指向p結(jié)點的Tries樹中的前綴父結(jié)點,同時我們還需要記錄子空間中最靠近空閑空間的前綴結(jié)點。如圖4所示,結(jié)點p為要刪除的結(jié)點,q0為最靠近空閑空間的結(jié)點,parent(q0)的位置低于結(jié)點p,parent(parent(q0))的位置高于p。我們按照下面的步驟刪除結(jié)點p首先把parent(q0)的前綴移至p結(jié)點位置,然后把q0的前綴移至parent(q0)的位置,最后釋放q0所占的TCAM空間。
圖4為在TCAM內(nèi)進行前綴刪除整個過程的流程圖。對流程圖的步驟解釋如下1.設(shè)fn為刪除的前綴結(jié)點,所屬子空間為Lk,p0為Lk中最靠近空閑空間的結(jié)點,置當(dāng)前結(jié)點pn=p0;2.如果pn->parent的前綴位置低于fn結(jié)點,跳至3;否則跳至4;3.把pn->parent加入到parent_array數(shù)組中,置pn=pn->parent,跳至2;
4.按照圖7所示方法,順序移動parent_array數(shù)組中的結(jié)點;假設(shè)Tries樹中最大鏈長為D,最好情況下,更新算法的復(fù)雜度為(D/N);最差情況下,更新復(fù)雜度為D。如果我們把子空間的空閑區(qū)間放在中間,更新算法的性能會近一步提高,最好情況下為D/2N,最差情況下為D/2。
N個子空間前綴區(qū)間的劃分直接影響著TCAM的更新性能,不合適的劃分將導(dǎo)致TCAM更新性能的下降。為了量化影響,我們用子空間劃分評價函數(shù)T(W,N)對劃分進行評價。T(W,N)表示給定一個路由表,在劃分N情況下,更新前綴長度在
之間的路由,TCAM芯片內(nèi)移動操作和寫入操作的總數(shù)目。當(dāng)T(W,N)達到最小時,我們認(rèn)為此時劃分N是最優(yōu)的。
為了計算T(W,N),我們采用遞規(guī)的思想。假設(shè)N個子空間中第N個子空間的前綴區(qū)間為LN=(i,W),把
區(qū)間的前綴更新,分為兩個部分
區(qū)間和[i,W]區(qū)間。[i,W]區(qū)間前綴在子空間LN內(nèi)更新,
區(qū)間的前綴在L1到LN-1N-1個子空間內(nèi)更新。由此我們可以得到T(W,N)的遞規(guī)表達式。
T(W,N)=T(i-1,N-1)+F(i,W) (1)當(dāng)T(W,N)最小時,我們會進一步得到(2)式Tmin(W,N)=Mini=NtoW(Tmin(i-1,N-1)+F(i,W))---(2)]]>式(1)和(2)中,F(xiàn)(i,W)表示在區(qū)間[i,W]內(nèi)的前綴,在LN子空間內(nèi)更新所需操作的數(shù)目。T(i-1,N-1)表示在區(qū)間
內(nèi)的前綴,在L1到LN-1(N-1)個子空間內(nèi)更新時所需的操作。Tmin(W,N)為T(W,N)的最小值,Tmin(i-1,N-1)為T(i-1,N-1)的最小值。
對于(2)式,我們可以推廣得到更一般的表達式(3)Tmin(y,x)=Mini=xtoy(Tmin(i-1,x-1)+F(i,y))]]>式(3)中,y屬于區(qū)間[1,W],x屬于區(qū)間[1,N]。Tmin(y,x)表示對給定的路由表,在劃分x情況下,更新前綴長度在
之間的路由,TCAM芯片內(nèi)所需的最小移動和寫入操作數(shù)。Tmin(i-1,x-1)表示在區(qū)間
內(nèi)的前綴,在L1到Lx-1(x-1)個子空間內(nèi)更新時所需的操作。F(i,y)表示在區(qū)間[i,y]內(nèi)的前綴,在Lx子空間內(nèi)更新所需操作的數(shù)目。
實際計算過程中,為了避免遞規(guī),我們可以先計算初始值Tmin(k1,1)(k1=1 to W),然后再利用(2)式計算Tmin(k2,2)(k2=2 to W),依次類推,最后計算Tmin(W,N),計算過程共需要計算((2*W-N+2)×(N-1)/2+1)個T值。
對F(i,W)值的計算除了考慮路由前綴在Trie樹中位置之外,還要考慮路由前綴插入的順序。比如Tries樹中某條鏈上有兩個路由前綴,如果先加入靠近根節(jié)點的前綴,再加入遠離根節(jié)點的前綴則不需要移動操作,只需要寫入操作,所用操作數(shù)為2;如果先加入遠離根結(jié)點的前綴,再加入靠近根結(jié)點的前綴則需要1次移動操作,所用總操作數(shù)為3。為了方便計算,F(xiàn)(i,W)為左子結(jié)點鏈中可能的最大操作數(shù)。所謂左子結(jié)點鏈?zhǔn)侵赣上旅娼Y(jié)點組成的鏈某個結(jié)點fn,fn的左子結(jié)點fn->l_child,fn->l_child的左子結(jié)點fn->l_child->l_child,...,依次類推,鏈中最后-個結(jié)點為fn的最左葉子結(jié)點。
計算得到Tmin(W,N)同時,我們也可以得到N個子空間的前綴區(qū)間。計算Tmin(W,N)以及確定最佳K子空間劃分的算法偽碼,表示如下<pre listing-type="program-listing">N_Partition(){ 初始化T[W+1][N+1]數(shù)組;∥劃分評價函數(shù)Tmin(y,x) 初始化bound[W+1][N+1]數(shù)組;∥前綴區(qū)間的邊界 for(i=1;i<=W;i++) 計算T[i][1]; for(x=2;x<=N;x++)∥x循環(huán) { for(y=x;y<=W;y++)∥y循環(huán) { ∥利用遞推公式(3)計算T[y][x] for(i=x;i<=y(tǒng);i++) { tempT=T[i-1][x-1]+F(i,y);∥tempT和tempBound為臨時變量 tempBound=i; if(tempT<T[y][x])∥判斷T[y][x]是否達到最小 { bound[y][x]=tempBound; T[y][x]=tempT; } }}∥得到N個子空間的前綴區(qū)間劃分N_Bound[N-1]=bound[W][N];∥N_Bound數(shù)組為子空間前綴區(qū)間的邊界for(i=N-2;i<=1;i--){N_Bound[i]=bound[N_Bound[i+1]][i+1];}}∥RT為已知路由表的Tries結(jié)構(gòu)的根結(jié)點F(i,j){fn=RT;count=0;∥所有操作計數(shù)while(fn?。絅ULL){if(fn的前綴長度>=i&amp;&amp;fn的前綴長度<=j(luò))∥判斷fn的前綴是否在[i,j]區(qū)間{ ∥按照左子結(jié)點鏈計算操作數(shù)目 child=fn->l_child;∥l_child為fn的左子結(jié)點 while(child?。絅ULL) { if(child的前綴長度<=j(luò))∥判斷child是否在區(qū)間[i,j]內(nèi) count++;∥一次移動操作 child=child->l_child;<!-- SIPO <DP n="6"> --><dp n="d6"/> } count++;∥一次寫入操作 } fn=fn的下一個結(jié)點;∥利用fn的下一個結(jié)點遍歷整個Tries樹結(jié)構(gòu)}}</pre>函數(shù)F(i,j)表示長度在區(qū)間[i,j]內(nèi)的路由前綴,在TCAM中更新時所用操作的數(shù)目。T數(shù)組中的T[W+1][K+1]元素為最后的Tmin(W,K)值,N_bound[i](i=1到N-1)為N個子空間的N-1個邊界。
得到N個子空間的劃分后,為了保證空間的充分利用,N的子空間大小的分配可以依據(jù)各自空間內(nèi)部路由前綴數(shù)目的多少來進行分配。
路由壓縮部分也是基于Tries結(jié)構(gòu),它可以兼容后面的TCAM前綴更新,并且壓縮的操作很簡單,不會影響路由更新速度。用我們的壓縮方法對Internet中實際的路由表進行壓縮,可以達到平均20%的壓縮比。
由于路由壓縮部分與TCAM路由前綴更新部分都是基于Tries樹結(jié)構(gòu),Tries結(jié)構(gòu)對IPv6路由表具有很好的擴展性,所以我們的更新算法對IPv6路由表的更新也具有很好的擴展性。
權(quán)利要求
1.支持路由壓縮的TCAM高速更新方法含有路由壓縮的步驟,其特征在于它是一種把都基于樹結(jié)構(gòu)的路由壓縮和建立在把TCAM(三態(tài)內(nèi)容可尋址存儲器)芯片內(nèi)的空間劃分為N個子空間的前綴鏈約束基礎(chǔ)之上的前綴更新這兩個步驟前后合在一起的TCAM高速更新方法,它依次含有以下步驟(1)在樹結(jié)構(gòu)中,找到代表更新路由的結(jié)點fn,更新路由是指增加路由或刪除路由;(2)判斷fn的前綴是否需要更新至TCAM中若需要更新,則執(zhí)行步驟(3);若無需更新,則執(zhí)行步驟(4);(3)把fn的前綴更新至TCAM;(4)判斷fn的子結(jié)點是否需要更新至TCAM中若需要更新,則執(zhí)行步驟(5);若無需更新,則執(zhí)行步驟(6);(5)把fn子結(jié)點的前綴更新至TCAM;(6)更新結(jié)點fn的數(shù)據(jù)成員;其中,所述的步驟(3)把fn的前綴更新至TCAM,它依次含有以下步驟3.1利用評價函數(shù)Tmin(W,N)把TCAM空間劃分為N子空間,其中Tmin(W,N)=Mini=NtoW(Tmin(i-1,N-1)+F(i,W))]]>W表示IP地址長度,也是最大路由前綴長度;N表示劃分子空間的個數(shù);Tmin(W,N)表示
長度區(qū)間的前綴,在N子空間劃分下,移動操作和寫入操作總和的最小值;Tmin(i-i,N-1)表示
長度區(qū)間的前綴,在N-1子空間劃分下,移動操作和寫入操作總和的最小值;F(i,W)表示在區(qū)間[i,W]內(nèi)的前綴,在一個子空間內(nèi)更新所需操作的數(shù)目。3.2根據(jù)前綴的長度找到TCAM中對應(yīng)的前綴子空間Lk=[lk-1+1,lk];3.3在子空間Lk內(nèi),按照前綴鏈約束,對樹中鏈上的路由前綴進行移動操作;3.4把fn的前綴更新至TCAM中;
2.根據(jù)權(quán)利要求1所述的支持路由壓縮的TCAM高速更新方法,其特征在于所述的步驟(2),判斷fn的前綴是否需要更新至TCAM中的原則是,此路由前綴是否冗余,即此路由前綴若和其父結(jié)點具有相同的下一跳地址和出端口,也就是說,它們的轉(zhuǎn)發(fā)結(jié)果是一樣的,則此路由前綴在路由表中是冗余的,則不更新至TCAM;否則,就需要更新至TCAM中。
全文摘要
支持路由壓縮的TCAM高速更新方法屬于互聯(lián)網(wǎng)IP地址高速查找技術(shù)領(lǐng)域,其特征在于它是一種把都基于樹結(jié)構(gòu)的路由壓縮以及建立在三態(tài)內(nèi)容可尋址存儲器(TCAM)芯片內(nèi)的空間劃分為N個子空間的前綴鏈約束基礎(chǔ)上的前綴更新這兩個步驟前后合在一起的TCAM高速更新方法,其中,判斷前綴是否需更新的原則是該結(jié)點是否冗余,冗余則不更新,反之,則更新;在判斷N個子空間的劃分是否影響TCAM更新性能時,使用了子空間劃分評價函數(shù)。它具有支持高速的路由更新,支持有效的路由表壓縮,對IPv6協(xié)議具有很好的擴展性的優(yōu)點。
文檔編號G06F9/00GK1447223SQ0310912
公開日2003年10月8日 申請日期2003年4月4日 優(yōu)先權(quán)日2003年4月4日
發(fā)明者梁志勇, 徐恪 申請人:清華大學(xué)