應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法及裝置制造方法
【專利摘要】本發(fā)明提供了一種應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法,其特征在于,包括如下步驟:步驟1:建立多層次存儲結(jié)構(gòu),所述存儲結(jié)構(gòu)包括優(yōu)先級逐漸變小的寄存器堆、內(nèi)部RAM、外部SRAM和外部SDRAM;步驟2:建立平衡樹,具體為,遍歷所有路由表的每一位,找出其中值0和值1的個數(shù)基本相等的位,將該位設(shè)置為目前的根節(jié)點(diǎn),并將該位標(biāo)記為已使用,以此循環(huán)來實(shí)現(xiàn)相對平衡樹的建立;步驟3:進(jìn)行數(shù)據(jù)存儲,其中,對每一次數(shù)據(jù)存儲,都將鄰近的幾位數(shù)據(jù)組織成一棵子樹結(jié)構(gòu)進(jìn)行數(shù)據(jù)存儲。本發(fā)明中Trie結(jié)構(gòu)采用層次化的存儲結(jié)構(gòu),減少一個key對外部存儲器的訪問時間,以較低的存儲器代價獲得較快的查找速度。
【專利說明】應(yīng)用于網(wǎng)絡(luò)處理器中的Tr ie搜索方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)處理器,具體地,涉及一種應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方 法。
【背景技術(shù)】
[0002] 網(wǎng)絡(luò)處理器由于其速度快、可編程性能好而成為下一代網(wǎng)絡(luò)產(chǎn)品的核心器件,隨 著網(wǎng)絡(luò)需求不斷提高,網(wǎng)絡(luò)處理器的線速要求越來越高,要求的數(shù)據(jù)包轉(zhuǎn)發(fā)速率也越來越 高,這使得路由查找速度成為制約網(wǎng)絡(luò)處理器性能的主要瓶頸。
[0003] 網(wǎng)絡(luò)核心期間中采用的路由查找算法眾多,其中,基于Trie樹的算法不僅具有較 好的查找速度、空間復(fù)雜度和時間復(fù)雜度,而且能不斷提高路由器性能,因此新穎的現(xiàn)代快 速路由查找算法均是在Trie樹的基礎(chǔ)上通過優(yōu)化算法實(shí)現(xiàn)的,例如Trie樹路徑壓縮算法、 多分支Trie樹算法等。路徑壓縮Trie樹算法與二進(jìn)制樹算法一樣,其查找過程中需要大 量的存儲器訪問操作;而多分支Trie樹算法采用大于1的查找步寬,提高了訪存速度,但是 存儲器帶寬利用率不高。
【發(fā)明內(nèi)容】
[0004] 針對現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種快速查找、高存儲帶寬利用率 的方法來實(shí)現(xiàn)Trie查找的搜索結(jié)構(gòu)。本發(fā)明所要解決的技術(shù)問題:
[0005] 1、根據(jù)網(wǎng)絡(luò)處理器線速的要求對關(guān)鍵字進(jìn)行搜索,數(shù)據(jù)幀能夠及時查找到結(jié)果, 然后根據(jù)查找結(jié)果正確進(jìn)行數(shù)據(jù)包處理;
[0006] 2、在搜索過程中,提供層次化的存儲設(shè)備,包括寄存器堆、內(nèi)部RAM、外部SRAM和 外部DDR SDRAM四種存儲層次,使得該Trie搜索結(jié)構(gòu)用低代價的存儲資源實(shí)現(xiàn)快速的搜索 速度,即每一次查找的時間代價約為一次外部DDR SDRAM訪問時間;
[0007] 3、在建樹的時候,使得每一個分支都相對平衡可以減少訪存次數(shù),即通過平衡的 二叉樹減少最壞情況的訪存時間;
[0008] 4、將第3點(diǎn)的平衡二叉樹結(jié)構(gòu)中的多個節(jié)點(diǎn)組織成一棵子樹結(jié)構(gòu),存放到一個存 儲塊中,使每一次訪存操作可以進(jìn)行多位查找,充分利用當(dāng)前存儲器高帶寬的特點(diǎn),減少訪 存次數(shù),提高查找效率。
[0009] 根據(jù)本發(fā)明的一個方面提供的一種應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法,包括 如下步驟:
[0010] 步驟1 :建立多層次存儲結(jié)構(gòu),所述存儲結(jié)構(gòu)包括優(yōu)先級逐漸變小的寄存器堆、內(nèi) 部RAM、外部SRAM和外部SDRAM ;
[0011] 步驟2:建立平衡樹,具體為,遍歷所有路由表的每一位,找出其中值0和值1的個 數(shù)最接近的位,將該位設(shè)置為目前的根節(jié)點(diǎn),并將該位標(biāo)記為已使用,以此循環(huán)來實(shí)現(xiàn)相對 平衡樹的建立;
[0012] 步驟3 :進(jìn)行數(shù)據(jù)存儲,其中,對每一次數(shù)據(jù)存儲,都將鄰近的幾位數(shù)據(jù)組織成的 子樹結(jié)構(gòu)進(jìn)行數(shù)據(jù)存儲。
[0013] 優(yōu)選地,所述存儲結(jié)構(gòu)的存儲方式劃分為:將Trie的根節(jié)點(diǎn)放在寄存器堆中;將 Trie結(jié)構(gòu)的第2至4層放到內(nèi)部RAM中;將Trie結(jié)構(gòu)大于第4層的數(shù)據(jù)根據(jù)資源的大小 放置在外部SRAM或者SDRAM中。
[0014] 優(yōu)選地,所述步驟2包括如下步驟:
[0015] 步驟2. 1 :根據(jù)所有的數(shù)據(jù)條目的數(shù)據(jù)位,若第η位數(shù)據(jù)的值0和值1的個數(shù)相等, 則將第η位設(shè)置成樹的根節(jié)點(diǎn);
[0016] 步驟2. 2 :根據(jù)第m位中的值0和值1的數(shù)目相差較少,故而將第m位設(shè)置成根節(jié) 點(diǎn)的左分支或右分支。
[0017] 優(yōu)選地,所述平衡樹包括若干個子樹結(jié)構(gòu),子樹在存儲器中的組織方式為:第0? 4位代表該子樹的拓?fù)浣Y(jié)構(gòu),其能夠根據(jù)存儲器帶寬需求進(jìn)行結(jié)構(gòu)調(diào)整;第5?13位指明 子樹拓?fù)浣Y(jié)構(gòu)中第一個節(jié)點(diǎn)所查找的位數(shù);第59?67位用以指明子樹拓?fù)浣Y(jié)構(gòu)中最后一 個節(jié)點(diǎn)所代表的位數(shù);第68?75位用以指明所查找的下一級是否為葉子節(jié)點(diǎn);第76?91 位用以指明所在的存儲器;第95?255位用以指明下一級節(jié)點(diǎn)的地址,依次的,每20位表 明一個節(jié)點(diǎn)鏈接地址。
[0018] 根據(jù)本發(fā)明的另一個方面提供的一種應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索裝置,包 括如下裝置:
[0019] 存儲結(jié)構(gòu)建立裝置,用于建立多層次存儲結(jié)構(gòu),所述存儲結(jié)構(gòu)包括優(yōu)先級逐漸變 小的寄存器堆、內(nèi)部RAM、外部SRAM和外部SDRAM ;
[0020] 平衡樹建立裝置,用于建立平衡樹,具體為,遍歷所有路由表的每一位,找出其中 值〇和值1的個數(shù)最接近的位,將該位設(shè)置為目前的根節(jié)點(diǎn),并將該位標(biāo)記為已使用,以此 循環(huán)來實(shí)現(xiàn)相對平衡樹的建立;
[0021] 數(shù)據(jù)存儲裝置,用于進(jìn)行數(shù)據(jù)存儲,其中,對每一次數(shù)據(jù)存儲,都將鄰近的幾位數(shù) 據(jù)組織成的子樹結(jié)構(gòu)進(jìn)行數(shù)據(jù)存儲。
[0022] 優(yōu)選地,所述存儲結(jié)構(gòu)的存儲方式劃分為:將Trie的根節(jié)點(diǎn)放在寄存器堆中;將 Trie結(jié)構(gòu)的第2至4層放到內(nèi)部RAM中;將Trie結(jié)構(gòu)大于第4層的數(shù)據(jù)根據(jù)資源的大小 放置在外部SRAM或者SDRAM中。
[0023] 優(yōu)選地,平衡樹建立裝置首先根據(jù)所有的數(shù)據(jù)條目的數(shù)據(jù)位,找出第η位數(shù)據(jù)的 值0和值1的個數(shù)相等,則將第η位設(shè)置成樹的根節(jié)點(diǎn);其次根據(jù)第m位中的值0和值1的 數(shù)目相差較少,故而將第m位設(shè)置成根節(jié)點(diǎn)的左分支或右分支。
[0024] 優(yōu)選地,所述平衡樹包括若干個子樹結(jié)構(gòu),子樹在存儲器中的組織方式為:第0? 4位代表該子樹的拓?fù)浣Y(jié)構(gòu),其能夠根據(jù)存儲器帶寬需求進(jìn)行結(jié)構(gòu)調(diào)整;第5?13位指明 子樹拓?fù)浣Y(jié)構(gòu)中第一個節(jié)點(diǎn)所查找的位數(shù);第59?67位用以指明子樹拓?fù)浣Y(jié)構(gòu)中最后一 個節(jié)點(diǎn)所代表的位數(shù);第68?75位用以指明所查找的下一級是否為葉子節(jié)點(diǎn);第76?91 位用以指明所在的存儲器;第95?255位用以指明下一級節(jié)點(diǎn)的地址,依次的,每20位表 明一個節(jié)點(diǎn)鏈接地址。
[0025] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
[0026] 1.本發(fā)明中Trie結(jié)構(gòu)采用層次化的存儲結(jié)構(gòu),減少一個key對外部存儲器的訪問 時間,以較低的存儲器代價獲得較快的查找速度;
[0027] 2.本發(fā)明中采用平衡樹結(jié)構(gòu),在整體上減少樹的層次結(jié)構(gòu),從而減少查找時間。在 普通二叉樹中,查找到每個節(jié)點(diǎn)的時間復(fù)雜度為〇(n);而采用本發(fā)明的平衡樹形結(jié)構(gòu),查 找每個節(jié)點(diǎn)的時間復(fù)雜度將變?yōu)椹?l〇g 2n),η代表二叉樹中節(jié)點(diǎn)個數(shù);
[0028] 3.本發(fā)明中將該Trie結(jié)構(gòu)的多個節(jié)點(diǎn)組織成一棵子樹結(jié)構(gòu)放入到一個存儲塊 中,該存儲數(shù)據(jù)塊可以通過一次訪存操作讀出。
【專利附圖】
【附圖說明】
[0029] 通過閱讀參照以下附圖對非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它特征、 目的和優(yōu)點(diǎn)將會變得更明顯:
[0030] 圖1為本發(fā)明中Trie查找的結(jié)構(gòu)圖;
[0031] 圖2是本發(fā)明實(shí)例Trie結(jié)構(gòu)圖;
[0032] 圖3是本發(fā)明實(shí)例存儲塊組織方式;
[0033] 圖4是本發(fā)明實(shí)例中的子樹結(jié)構(gòu)圖;
[0034] 圖5是本發(fā)明搜索結(jié)構(gòu)的搜索流程圖。
【具體實(shí)施方式】
[0035] 下面結(jié)合具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明。以下實(shí)施例將有助于本領(lǐng)域的技術(shù) 人員進(jìn)一步理解本發(fā)明,但不以任何形式限制本發(fā)明。應(yīng)當(dāng)指出的是,對本領(lǐng)域的普通技術(shù) 人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn)。這些都屬于本發(fā)明 的保護(hù)范圍。
[0036] 在本發(fā)明中,Trie搜索的結(jié)構(gòu)如圖1所示,本發(fā)明提供的應(yīng)用于網(wǎng)絡(luò)處理器中的 trie搜索方法,包括如下步驟:
[0037] 步驟1 :建立多層次存儲結(jié)構(gòu),所述存儲結(jié)構(gòu)包括優(yōu)先級逐漸變小的寄存器堆、內(nèi) 部RAM、外部SRAM和外部SDRAM ;
[0038] 步驟2 :建平衡樹,具體為,遍歷所有路由表的每一位,找出其中值0和值1的個數(shù) 基本相等的位,將該位設(shè)置為目前的根節(jié)點(diǎn),并將該位標(biāo)記為已使用,以此循環(huán)來實(shí)現(xiàn)相對 平衡樹的建立;
[0039] 步驟3 :進(jìn)行數(shù)據(jù)存儲,其中,對每一次數(shù)據(jù)存儲,都將鄰近的幾位數(shù)據(jù)組織成的 一棵子樹結(jié)構(gòu)進(jìn)行數(shù)據(jù)存儲,那么在查找的過程中,每一次訪存操作就能能夠進(jìn)行多位數(shù) 據(jù)查找。例如每次可以進(jìn)行四位查找,那么對于IPv4中32位路由信息的查找過程,即使是 最壞情況也只需要讀8次存儲器操作,能夠顯著減少訪存時間。
[0040] 在步驟1中,采用多層存儲結(jié)構(gòu)存儲數(shù)據(jù),如寄存器堆、內(nèi)部RAM、外部SRAM和外部 SDRAM,其相對速度和相對容量如表一所示:
[0041] 表一
【權(quán)利要求】
1. 一種應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法,其特征在于,包括如下步驟: 步驟1 :建立多層次存儲結(jié)構(gòu),所述存儲結(jié)構(gòu)包括優(yōu)先級逐漸變小的寄存器堆、內(nèi)部 RAM、外部SRAM和外部SDRAM ; 步驟2 :建立平衡樹,具體為,遍歷所有路由表的每一位,找出其中值0和值1的個數(shù)最 接近的位,將該位設(shè)置為目前的根節(jié)點(diǎn),并將該位標(biāo)記為已使用,以此循環(huán)來實(shí)現(xiàn)相對平衡 樹的建立; 步驟3 :進(jìn)行數(shù)據(jù)存儲,其中,對每一次數(shù)據(jù)存儲,都將鄰近的幾位數(shù)據(jù)組織成的子樹 結(jié)構(gòu)進(jìn)行數(shù)據(jù)存儲。
2. 根據(jù)權(quán)利要求1所述的應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法,其特征在于, 所述存儲結(jié)構(gòu)的存儲方式劃分為:將Trie的根節(jié)點(diǎn)放在寄存器堆中;將Trie結(jié)構(gòu)的 第2至4層放到內(nèi)部RAM中;將Trie結(jié)構(gòu)大于第4層的數(shù)據(jù)根據(jù)資源的大小放置在外部 SRAM 或者 SDRAM 中。
3. 根據(jù)權(quán)利要求1或2所述的應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法,其特征在于,所 述步驟2包括如下步驟: 步驟2. 1 :根據(jù)所有的數(shù)據(jù)條目的數(shù)據(jù)位,若第η位數(shù)據(jù)的值0和值1的個數(shù)相等,則 將第η位設(shè)置成樹的根節(jié)點(diǎn); 步驟2. 2 :根據(jù)第m位中的值0和值1的數(shù)目相差較少,故而將第m位設(shè)置成根節(jié)點(diǎn)的 左分支或右分支。
4. 根據(jù)權(quán)利要求1或2所述的應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索方法,其特征在于,所 述平衡樹包括若干個子樹結(jié)構(gòu),子樹在存儲器中的組織方式為:第〇?4位代表該子樹的拓 撲結(jié)構(gòu),其能夠根據(jù)存儲器帶寬需求進(jìn)行結(jié)構(gòu)調(diào)整;第5?13位指明子樹拓?fù)浣Y(jié)構(gòu)中第一 個節(jié)點(diǎn)所查找的位數(shù);第59?67位用以指明子樹拓?fù)浣Y(jié)構(gòu)中最后一個節(jié)點(diǎn)所代表的位數(shù); 第68?75位用以指明所查找的下一級是否為葉子節(jié)點(diǎn);第76?91位用以指明所在的存 儲器;第95?255位用以指明下一級節(jié)點(diǎn)的地址,依次的,每20位表明一個節(jié)點(diǎn)鏈接地址。
5. -種應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索裝置,其特征在于,包括如下裝置: 存儲結(jié)構(gòu)建立裝置,用于建立多層次存儲結(jié)構(gòu),所述存儲結(jié)構(gòu)包括優(yōu)先級逐漸變小的 寄存器堆、內(nèi)部RAM、外部SRAM和外部SDRAM ; 平衡樹建立裝置,用于建立平衡樹,具體為,遍歷所有路由表的每一位,找出其中值〇 和值1的個數(shù)最接近的位,將該位設(shè)置為目前的根節(jié)點(diǎn),并將該位標(biāo)記為已使用,以此循環(huán) 來實(shí)現(xiàn)相對平衡樹的建立; 數(shù)據(jù)存儲裝置,用于進(jìn)行數(shù)據(jù)存儲,其中,對每一次數(shù)據(jù)存儲,都將鄰近的幾位數(shù)據(jù)組 織成的子樹結(jié)構(gòu)進(jìn)行數(shù)據(jù)存儲。
6. 根據(jù)權(quán)利要求5所述的應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索裝置,其特征在于, 所述存儲結(jié)構(gòu)的存儲方式劃分為:將Trie的根節(jié)點(diǎn)放在寄存器堆中;將Trie結(jié)構(gòu)的 第2至4層放到內(nèi)部RAM中;將Trie結(jié)構(gòu)大于第4層的數(shù)據(jù)根據(jù)資源的大小放置在外部 SRAM 或者 SDRAM 中。
7. 根據(jù)權(quán)利要求5或6所述的應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索裝置,其特征在于,平 衡樹建立裝置首先根據(jù)所有的數(shù)據(jù)條目的數(shù)據(jù)位,找出第η位數(shù)據(jù)的值0和值1的個數(shù)相 等,則將第η位設(shè)置成樹的根節(jié)點(diǎn);其次根據(jù)第m位中的值0和值1的數(shù)目相差較少,故而 將第m位設(shè)置成根節(jié)點(diǎn)的左分支或右分支。
8.根據(jù)權(quán)利要求5或6所述的應(yīng)用于網(wǎng)絡(luò)處理器中的Trie搜索裝置,其特征在于,所 述平衡樹包括若干個子樹結(jié)構(gòu),子樹在存儲器中的組織方式為:第〇?4位代表該子樹的拓 撲結(jié)構(gòu),其能夠根據(jù)存儲器帶寬需求進(jìn)行結(jié)構(gòu)調(diào)整;第5?13位指明子樹拓?fù)浣Y(jié)構(gòu)中第一 個節(jié)點(diǎn)所查找的位數(shù);第59?67位用以指明子樹拓?fù)浣Y(jié)構(gòu)中最后一個節(jié)點(diǎn)所代表的位數(shù); 第68?75位用以指明所查找的下一級是否為葉子節(jié)點(diǎn);第76?91位用以指明所在的存 儲器;第95?255位用以指明下一級節(jié)點(diǎn)的地址,依次的,每20位表明一個節(jié)點(diǎn)鏈接地址。
【文檔編號】G06F17/30GK104090942SQ201410307241
【公開日】2014年10月8日 申請日期:2014年6月30日 優(yōu)先權(quán)日:2014年6月30日
【發(fā)明者】李苗, 金胤丞, 李智廣 申請人:中國電子科技集團(tuán)公司第三十二研究所