專利名稱::用樹狀分段改善樹搜索性能和存儲(chǔ)器帶寬的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:該發(fā)明一般涉及存儲(chǔ)器樹搜索,并特別涉及采用散列表?xiàng)l目(hashtableentries)和與其相關(guān)的樹狀分段(treefragments)。
背景技術(shù):
:在現(xiàn)代微處理器系統(tǒng)中,主存儲(chǔ)器的速度趨于要比處理器核心的速度慢很多。一個(gè)與高頻微處理器相連的典型DRAM主存儲(chǔ)裝置需要花費(fèi)幾百個(gè)處理器周期來存取。在未來,由于存儲(chǔ)器速度與處理器速度不匹配而導(dǎo)致的問題很可能會(huì)變得更加尖銳。這些問題的一個(gè)主要原因在于存儲(chǔ)器存取等待時(shí)間。例如,向主存儲(chǔ)器發(fā)布LOAD(裝載)指令和從主存儲(chǔ)器實(shí)際傳送第一個(gè)字之間的時(shí)間通常很長(zhǎng),并且會(huì)在處理器核心上施加有許多停止周期。然而,一旦第一個(gè)字被發(fā)送,后續(xù)的字會(huì)很快地被傳送。這種連續(xù)字的快速傳送一般被稱為“脈沖串模式作用(burst-modeeffect)”。典型地,微處理器系統(tǒng)采用本地存儲(chǔ),例如高速緩沖存儲(chǔ)器,來利用脈沖串模式作用。這是通過如下的操作發(fā)生的,即從主存儲(chǔ)器傳送完整的高速緩沖存儲(chǔ)器線(line)(即當(dāng)替換本地存儲(chǔ)或高速緩沖存儲(chǔ)器數(shù)據(jù)時(shí),將被載入的最小數(shù)目的字節(jié)),并在本地存儲(chǔ)中存儲(chǔ)該整個(gè)高速緩沖存儲(chǔ)器線,而不是僅僅從主存儲(chǔ)器傳送直接請(qǐng)求的較小的字。如果即將被讀取的可能數(shù)據(jù)有足夠大的、具有現(xiàn)在被請(qǐng)求的數(shù)據(jù)的特殊位置(即,被存儲(chǔ)在主存儲(chǔ)器的足夠大的實(shí)質(zhì)上鄰近的區(qū)域中的數(shù)據(jù)),并且也因此被存儲(chǔ)在本地存儲(chǔ)中,改善了存儲(chǔ)器效率。這是典型地是因?yàn)榭赡苄枰拇鎯?chǔ)器信息已被存進(jìn)更快的高速緩沖存儲(chǔ)器中,因而減少了存儲(chǔ)器存取次數(shù)。如果微處理器系統(tǒng)是存儲(chǔ)器結(jié)構(gòu)的特色,也能實(shí)現(xiàn)同樣的效果,由此,微處理器系統(tǒng)將存儲(chǔ)器塊從主存儲(chǔ)器傳送到本地存儲(chǔ)。本地存儲(chǔ)可與高速緩沖存儲(chǔ)器類似,例如,軟件管理的高速緩沖存儲(chǔ)器。本地存儲(chǔ)可以是存儲(chǔ)器脈沖串存取大小、總線傳送大小及高速緩沖存儲(chǔ)器線的大小的函數(shù)。在傳統(tǒng)技術(shù)中,存在通過高速緩沖存儲(chǔ)器硬件或軟件管理在高速緩沖存儲(chǔ)器內(nèi)實(shí)現(xiàn)樹搜索的方法。在例如二叉樹的判決樹的搜索中,在到達(dá)判決節(jié)點(diǎn)后,當(dāng)遍歷樹時(shí),適當(dāng)?shù)臉涔?jié)點(diǎn)的子集被存取。該處理一直持續(xù)直到達(dá)到包含所需數(shù)據(jù)的合適的葉節(jié)點(diǎn)。在每個(gè)樹節(jié)點(diǎn)存取期間,僅有幾個(gè)字節(jié)被讀取。傳統(tǒng)樹搜索實(shí)現(xiàn)在每個(gè)樹節(jié)點(diǎn)中使用間接指針,以參考父節(jié)點(diǎn)和子節(jié)點(diǎn),并且樹節(jié)點(diǎn)通常分布在整個(gè)地址空間。這些方法至少有兩個(gè)主要缺點(diǎn)?,F(xiàn)有的樹搜索實(shí)現(xiàn)的第一個(gè)缺點(diǎn)是,因?yàn)楣?jié)點(diǎn),無論是判決節(jié)點(diǎn)還是葉節(jié)點(diǎn),典型分布在整個(gè)地址空間,所以需要執(zhí)行對(duì)任意存儲(chǔ)器位置的多次存儲(chǔ)器存取。空間位置少或不存在,則因?yàn)樾枰男畔⒈淮鎯?chǔ)中非鄰近的區(qū)域,將導(dǎo)致微處理器等待存儲(chǔ)器訪問的長(zhǎng)時(shí)間的等待。第二個(gè)缺點(diǎn)是樹節(jié)點(diǎn)中的間接指針消耗存儲(chǔ)器。因此,需要采用具有在高速緩沖存儲(chǔ)器中進(jìn)行存取的存儲(chǔ)器的樹節(jié)點(diǎn),克服現(xiàn)有的存儲(chǔ)器存取方法的缺點(diǎn)。
發(fā)明內(nèi)容本發(fā)明使用樹狀分段存儲(chǔ)區(qū)并結(jié)合表查找方案。從數(shù)據(jù)樹確定多個(gè)樹狀分段。所確定的多個(gè)樹狀分段的每一成員至少有一個(gè)判決節(jié)點(diǎn)和一個(gè)葉節(jié)點(diǎn)。每個(gè)樹狀分段被存儲(chǔ)在它自己的鄰近的存儲(chǔ)器分段中。至少一個(gè)與每一樹狀分段相對(duì)應(yīng)的表?xiàng)l目被散列,因此可處理至少一個(gè)散列關(guān)鍵字和至少一個(gè)散列表?xiàng)l目。在一個(gè)方面,該數(shù)據(jù)結(jié)構(gòu)被最有利地利用以實(shí)現(xiàn)前綴搜索算法。為了更完整地了解本發(fā)明及其優(yōu)點(diǎn),下面結(jié)合附圖進(jìn)行具體描述,其中圖1示出了應(yīng)用子樹分段的微處理系統(tǒng),包括微處理器、主存儲(chǔ)器、主存儲(chǔ)器總線和本地存儲(chǔ);圖2示出了二叉樹的分段存儲(chǔ)區(qū);圖3A示出了應(yīng)用樹狀分段初始化數(shù)據(jù)結(jié)構(gòu)的方法;圖3B示出了用使用樹狀分段的數(shù)據(jù)結(jié)構(gòu)執(zhí)行搜索的方法;圖4A示出了存儲(chǔ)器中組織的子樹分段的布局圖;圖4B示出了對(duì)于最長(zhǎng)前綴匹配(LPM)的子樹分段的應(yīng)用程序的首標(biāo);圖5示出了判決節(jié)點(diǎn)的格式的例子;圖6示出了Patricia(帕特麗夏)樹;和圖7示出了存儲(chǔ)器中樹狀分段的布局圖的例子。具體實(shí)施例方式在以下討論中,為了徹底地了解本發(fā)明,提出了大量的具體細(xì)節(jié)。然而,本領(lǐng)域普通技術(shù)人員應(yīng)理解在沒有特定細(xì)節(jié)的情況下也可實(shí)現(xiàn)本發(fā)明。在其他例子中,已用示意圖或方框圖形式描述了公知部件,以防本發(fā)明被掩蓋在不必要的細(xì)節(jié)中。另外,大部分與網(wǎng)絡(luò)通信、電磁信號(hào)技術(shù)等相關(guān)的細(xì)節(jié)已被省略,因?yàn)檫@些細(xì)節(jié)對(duì)全面理解本發(fā)明并不是必要的,并且對(duì)于本領(lǐng)域普通技術(shù)人員而言是已知的。還要注意,除非另行說明,在此描述的所有功能可以硬件或軟件或二者的某種結(jié)合而執(zhí)行。然而,在優(yōu)選實(shí)施例中,如果不指明其他方式,則根據(jù)比如計(jì)算機(jī)程序代碼的代碼、軟件和/或被編碼以執(zhí)行這些功能的集成電路,由例如計(jì)算機(jī)或電子數(shù)據(jù)處理器的處理器執(zhí)行這些功能。在其他實(shí)施例中,例如軟盤或光盤或其它存儲(chǔ)介質(zhì)的計(jì)算機(jī)程序產(chǎn)品上/中包含該計(jì)算機(jī)程序。參照?qǐng)D1,所示出的是示例的微處理系統(tǒng)100。系統(tǒng)100包括微處理器110、主存儲(chǔ)器控制總線115、主存儲(chǔ)器120、存儲(chǔ)器數(shù)據(jù)總線125、本地存儲(chǔ)130、和本地存儲(chǔ)總線135。典型地,微處理器進(jìn)一步功能性地與因特網(wǎng)總線相連,該因特網(wǎng)總線與因特網(wǎng)或其它的連網(wǎng)環(huán)境相連。一般而言,在系統(tǒng)100中,搜索樹,例如二叉搜索樹,被存儲(chǔ)在主存儲(chǔ)器120中。搜索樹被分成樹狀分段,如圖2中所示。每一個(gè)樹狀分段代表搜索樹的子集,并且其自己是一個(gè)樹。根據(jù)圖1,屬于子樹分段的判決節(jié)點(diǎn)和葉節(jié)點(diǎn)的所有節(jié)點(diǎn)被典型存儲(chǔ)在主存儲(chǔ)器120的連續(xù)存儲(chǔ)位置(即,在兩個(gè)分離塊中)。在一個(gè)實(shí)施例中,所有樹狀分段同樣大小。在系統(tǒng)100中,樹狀分段通過存儲(chǔ)器數(shù)據(jù)總線125并通過一個(gè)脈沖串存儲(chǔ)器存取步驟被載入本地存儲(chǔ)130中。通過存儲(chǔ)器數(shù)據(jù)總線125被載入的子樹分段的大小受限于存儲(chǔ)器存取間隔尺寸(granularity)的最小尺寸。存儲(chǔ)器存取間隔尺寸通常定義為在一次載入并行數(shù)據(jù)比特傳送中從主存儲(chǔ)器傳送的最小數(shù)據(jù)量。在一個(gè)實(shí)施例中,分段的大小(即,節(jié)點(diǎn)的總數(shù))可由存儲(chǔ)器存取間隔尺寸和判決節(jié)點(diǎn)的尺寸的函數(shù)允許盡可能大。典型地,2n-1個(gè)節(jié)點(diǎn)的數(shù)量產(chǎn)生了平衡的二叉樹的平衡劃分。一般而言,最大的可允許節(jié)點(diǎn)數(shù)可由以下公式計(jì)算1.節(jié)點(diǎn)數(shù)=((存儲(chǔ)器存取間隔尺寸)-(分段首標(biāo)大小))/(節(jié)點(diǎn)大小)微處理器110可通過采用散列函數(shù)、散列關(guān)鍵字和散列表?xiàng)l目來確定所需信息可能位于哪個(gè)子樹分段。在一個(gè)實(shí)施例中,散列表是1∶1散列表。換言之,在散列表中的條目和結(jié)果值之間有唯一的1∶1的對(duì)應(yīng)關(guān)系。微處理器110然后通過主存儲(chǔ)器控制總線115,從主存儲(chǔ)器120請(qǐng)求信息,并以一個(gè)載入序列將合適的子樹分段載入到本地存儲(chǔ)130中。在被載入到本地存儲(chǔ)130中之后,子樹分段由微處理器110進(jìn)行遍歷(搜索)。在另一實(shí)施例中,當(dāng)被載入的子樹分段有高級(jí)空間位置時(shí),本地存儲(chǔ)130有多個(gè)所需葉節(jié)點(diǎn)存儲(chǔ)于其中。因此,在一個(gè)樹搜索中本地存儲(chǔ)130中的線被多次存取,由此當(dāng)微處理器110存取存儲(chǔ)器值時(shí)節(jié)省了相當(dāng)多的時(shí)間。如果本地存儲(chǔ)構(gòu)成為高速緩沖存儲(chǔ)器,與搜索樹狀分段相關(guān)的存儲(chǔ)器存取導(dǎo)致了“高速緩沖存儲(chǔ)器命中(hit)”。即,硬件檢測(cè)到所請(qǐng)求的存儲(chǔ)器字在高速緩沖存儲(chǔ)器中存在。在“軟件管理”高速緩沖存儲(chǔ)器的情況下,這種知識(shí)是編譯程序的一部分。在另外的實(shí)施例中,微處理器系統(tǒng)100包括存儲(chǔ)器層級(jí),在存儲(chǔ)器層級(jí)的每個(gè)級(jí)中有不同級(jí)別的存取間隔尺寸。例如,處理器從本地存儲(chǔ)130中讀取單個(gè)字,但本地存儲(chǔ)130僅能從第二個(gè)高速緩沖存儲(chǔ)器中載入整個(gè)高速緩沖存儲(chǔ)器線。然后第二個(gè)高速緩沖存儲(chǔ)器以更大的間隔尺寸存取主存儲(chǔ)器120、或第三個(gè)高速緩沖存儲(chǔ)器?,F(xiàn)在轉(zhuǎn)到圖2,示出的是二叉樹200的分段存儲(chǔ)區(qū)的例子。在表260中的指針240指向二叉樹200的根節(jié)點(diǎn),它包括樹狀分段210、220和230。二叉樹200所描述的實(shí)施例可用來發(fā)現(xiàn)最長(zhǎng)的前綴或LPM(最長(zhǎng)前綴匹配)。其中出現(xiàn)LPM的上下文利用網(wǎng)際協(xié)議(IP)轉(zhuǎn)發(fā)中的路由表查找。典型地,在IP轉(zhuǎn)發(fā)中,基于IP數(shù)據(jù)包的目的地址做出路由判決。典型地,采用LPM來發(fā)現(xiàn)表中與目的地址的前n比特相匹配的長(zhǎng)度n的最長(zhǎng)比特圖案(pattern)。盡管其它樹類型也包括在本發(fā)明的范圍內(nèi),但在本實(shí)施例中,二叉樹是Patricia樹,它包括有效的LPM。Patricia樹與表查找相結(jié)合。有一個(gè)表有65536個(gè)條目,表中的一個(gè)條目匹配32比特的IPv4的IP地址的前16比特。查找表的條目包括以下三部分之一1)指向Patricia樹的指針,即,與二叉樹200相似地分段;2)指向路由信息本身的指針(在這一情況下,最長(zhǎng)的前綴是16比特長(zhǎng));和3)無。在第三種情況下,對(duì)所考慮的IP地址最長(zhǎng)的前綴可能比16比特短,它使得有必要搜索另一個(gè)包含短于16比特的前綴的Patricia樹。這個(gè)Patricia樹也可以被分段。在圖2中,示出了與IP地址的前16比特相對(duì)應(yīng)的具有65536個(gè)條目的表。這個(gè)表是具有1∶1映射的散列表最簡(jiǎn)單的形式。本領(lǐng)域普通技術(shù)人員應(yīng)理解,也可以在本發(fā)明的范圍之內(nèi)采用其它的散列表。一般來說,本發(fā)明樹狀分段的一個(gè)重要屬性是它的所有節(jié)點(diǎn)被存儲(chǔ)在主存儲(chǔ)器的連續(xù)存儲(chǔ)位置中;也就是,樹狀分段作為塊被存儲(chǔ)。在這個(gè)例子中,將使用以下段落中所描述的樹狀分段格式。本領(lǐng)域普通技術(shù)人員應(yīng)理解這種分段格式可以是任意的,成功對(duì)樹進(jìn)行分段的唯一條件是樹狀分段是以塊來存儲(chǔ)的?,F(xiàn)在參考圖3A和3B,公開了方法300,用于使用給定初始表的子樹分段初始化數(shù)據(jù)結(jié)構(gòu)(圖3A)和相應(yīng)的搜索算法(圖3B)。首先參考圖3A,數(shù)據(jù)結(jié)構(gòu)被如下所示初始化。在步驟305中,判定合適的散列函數(shù),并初始化對(duì)應(yīng)散列表至空狀態(tài)。在步驟310中,通過首先計(jì)算散列關(guān)鍵字,從輸入搜索數(shù)據(jù)表中去除一條目,并將該條目添加至新數(shù)據(jù)結(jié)構(gòu)。在步驟315中,檢查該散列表?xiàng)l目。步驟320中,如果散列表?xiàng)l目為空,它被更新為指向存儲(chǔ)器中新的(子樹)塊。如果散列表?xiàng)l目不是空的,在步驟325中,將元素(element)加入對(duì)應(yīng)的樹狀分段中。在步驟330中,用如下公式檢查樹狀分段存儲(chǔ)區(qū)的大小分段大?。?(存儲(chǔ)器存取間隔尺寸)-(分段首標(biāo)大小))/節(jié)點(diǎn)大小。在步驟335中,如果樹狀分段超過存儲(chǔ)器存取間隔尺寸的大小,樹狀分段將被細(xì)分為更小的樹狀分段。在步驟340中,初始數(shù)據(jù)結(jié)構(gòu)被再檢查。如果它是空的,初始化完成。如果不為空,算法返回步驟310。在步驟345中,該方法完成。接下來參考圖3B,對(duì)應(yīng)搜索算法遵循如下步驟。在步驟350中,搜索關(guān)鍵字被散列,以判定散列表的索引。在步驟355中,從存儲(chǔ)器載入散列表中的對(duì)應(yīng)條目。一般地講,這將需要存取主存儲(chǔ)器。在步驟360中,檢查散列表?xiàng)l目。如果該條目為空,在步驟365中表示搜索不成功。在另外的實(shí)施例中,若可用,可以搜索備份數(shù)據(jù)結(jié)構(gòu)。如果該條目有效,在步驟370中載入該表示塊。一般地,這將需要第二次存取主存儲(chǔ)器。在步驟375中,檢查該塊。如果它是例如Patricia樹的樹狀分段,則搜索它直到在步驟380中到達(dá)葉節(jié)點(diǎn)。如果該葉節(jié)點(diǎn)又表示一個(gè)樹狀分段,則從步驟370重復(fù)該算法。在另外的實(shí)施例中,如果該樹狀分段包括例如分段首標(biāo)的另一個(gè)結(jié)構(gòu),則檢索數(shù)據(jù)記錄的位置。在步驟385中,從存儲(chǔ)器中檢索該數(shù)據(jù)記錄。一般地,這會(huì)需要第三次存取主存儲(chǔ)器。如果遍歷多個(gè)樹狀分段,則這個(gè)步驟需要更多次檢索。在一個(gè)實(shí)施例中,在步驟390中,將數(shù)據(jù)記錄的關(guān)鍵字與搜索關(guān)鍵字相比較。在步驟390中,如果這些關(guān)鍵字與搜索相匹配,則表示成功。在一個(gè)實(shí)施例中,被分段的樹的每個(gè)分段具有相同的大小。然而,本領(lǐng)域普通技術(shù)人員將知道允許對(duì)單獨(dú)尺寸的樹狀分段進(jìn)行簡(jiǎn)單修改,例如,通過在后述分段首標(biāo)中指示該分段的大小。在圖4A中,圖2的樹狀分段被存入主存儲(chǔ)器中。二叉樹分段220有三個(gè)判決節(jié)點(diǎn)和四個(gè)葉節(jié)點(diǎn)。判決節(jié)點(diǎn)作為塊(或陣列)410被存在主存儲(chǔ)器中。使用該布局,可使用簡(jiǎn)單的代數(shù)表達(dá)式由樹狀分段的基地址來判定判決節(jié)點(diǎn)的左和右后代節(jié)點(diǎn)的地址。在一個(gè)實(shí)施例中,沒有必要在每個(gè)判決節(jié)點(diǎn)中存儲(chǔ)左和右后代節(jié)點(diǎn)的指針,從而節(jié)省存儲(chǔ)器。在這個(gè)實(shí)施例中,如果判決節(jié)點(diǎn)2不存在,并且在判決節(jié)點(diǎn)2的位置有一個(gè)葉節(jié)點(diǎn),則如陣列430中所示,判決節(jié)點(diǎn)2的塊410中的空間將會(huì)是空的和未用的;即如果判決節(jié)點(diǎn)不存在,它們?nèi)韵拇鎯?chǔ)器。在圖4A中,葉節(jié)點(diǎn)不與判決節(jié)點(diǎn)一起存儲(chǔ)。相反,當(dāng)搜索算法遍歷樹狀分段并最終判定合適的葉節(jié)點(diǎn)時(shí),它確定該葉節(jié)點(diǎn)的索引號(hào)(這里1-4),而不是其在主存儲(chǔ)器中的地址。該葉節(jié)點(diǎn)可以是再次需要由搜索算法遍歷的樹狀分段,也可以是最終路由信息。樹的葉節(jié)點(diǎn)以與判決節(jié)點(diǎn)相似的方式作為在連續(xù)存儲(chǔ)位置的塊420而存儲(chǔ)于主存儲(chǔ)器中。在另外的實(shí)施例中,塊420可以是陣列。所有葉節(jié)點(diǎn)在大小上一致,但它們的大小可能與判決節(jié)點(diǎn)的大小不同。如果葉節(jié)點(diǎn)不存在,則塊(或陣列)420中的對(duì)應(yīng)空間將不是空的和未用的,但會(huì)被下一個(gè)存在的葉節(jié)點(diǎn)所占據(jù)。換言之,在塊420中沒有空余空間。根據(jù)僅知的葉節(jié)點(diǎn)的索引號(hào)(這里1-4),該算法需要判定葉節(jié)點(diǎn)的地址,如在圖4B中所解釋的那樣?,F(xiàn)在轉(zhuǎn)到圖4B,示出的是樹狀分段首標(biāo)450的一個(gè)實(shí)施例。在二叉樹200中,每個(gè)樹狀分段210、220、230等在存儲(chǔ)器中作為相鄰塊存儲(chǔ)。每一樹狀分段的前面為樹狀分段首標(biāo)450。該樹狀分段首標(biāo)450包括基地址指針460、葉節(jié)點(diǎn)大小的標(biāo)記470、和占用數(shù)葉的比特掩碼480。典型地,基地址指針460表示存儲(chǔ)器中子樹分段的第一個(gè)樹葉的位置。葉節(jié)點(diǎn)470包括由樹葉結(jié)構(gòu)所占據(jù)的存儲(chǔ)器的大小。在一個(gè)實(shí)施例中,該大小為2次冪,可被表達(dá)為最多16個(gè)有效數(shù)字的二進(jìn)制數(shù)。然而,本領(lǐng)域普通技術(shù)人員應(yīng)知道除2次冪之外的其它大小也包括在本發(fā)明的范圍之中??梢酝ㄟ^葉索引與葉大小相乘并將其加到該基地址,來計(jì)算在主存儲(chǔ)器120中或本地存儲(chǔ)130中的存儲(chǔ)器中的樹葉的地址及位置。如圖4B所示,分段首標(biāo)450被用于更有效的運(yùn)行。分段首標(biāo)的元素460存儲(chǔ)葉節(jié)點(diǎn)塊420的基地址。元素470存儲(chǔ)葉節(jié)點(diǎn)的大小。最后,元素480包括比特掩碼。比特掩碼480表示樹狀分段的葉節(jié)點(diǎn)中哪一個(gè)實(shí)際存在而哪一個(gè)不存在。比特掩碼中的比特與可能的葉節(jié)點(diǎn)對(duì)應(yīng),如果葉節(jié)點(diǎn)存在,其被設(shè)為″1″,如果葉節(jié)點(diǎn)不存在,其被設(shè)為″0″。例如,具有4個(gè)葉節(jié)點(diǎn)的樹狀分段210將有長(zhǎng)度為4比特的比特掩碼,因?yàn)樗腥~節(jié)點(diǎn)存在而將所有比特設(shè)為″1″。例如,如果葉節(jié)點(diǎn)3不存在,則在比特掩碼中的比特3將被清除(設(shè)為″0″)。這個(gè)分段首標(biāo)允許更有效的計(jì)算葉節(jié)點(diǎn)地址。例如,如果該搜索算法將葉節(jié)點(diǎn)i確定為結(jié)果,則清除比特掩碼中包括上述i的所有比特。隨后,例如使用可從許多現(xiàn)代微處理器結(jié)構(gòu)發(fā)現(xiàn)的“一一計(jì)數(shù)(countones)”指令,而計(jì)數(shù)得到的比特掩碼中的比特?cái)?shù)目。該結(jié)果可以與葉節(jié)點(diǎn)大小470相乘,然后加到基地址460,以得到葉節(jié)點(diǎn)的地址。然后,葉節(jié)點(diǎn)被從主存儲(chǔ)器中載入到本地存儲(chǔ)。如果它是另一種樹狀分段,則它象以前的樹狀分段那樣被遍歷。在一個(gè)實(shí)施例中,單個(gè)比特455可用作分段首標(biāo)中的可選元素。一般而言,樹狀分段的葉節(jié)點(diǎn)可以是另一個(gè)樹狀分段或一個(gè)原始的、未分段樹(即,在IP例子中的路由信息)的葉節(jié)點(diǎn)。表?xiàng)l目240可以指向這兩種類型中的任一個(gè)。比特455位于分段首標(biāo)中,以可用于分辨這兩種類型。如果該比特被設(shè)為″1″,則包含樹狀分段的分段首標(biāo)跟隨比特455。如果該比特是′0′,則沒有分段首標(biāo)和樹狀分段跟隨比特455,但相反在這些存儲(chǔ)器位置可發(fā)現(xiàn)路由信息。在如何構(gòu)建首標(biāo)方面有幾個(gè)自由度。在一個(gè)實(shí)施例中,如果葉節(jié)點(diǎn)大小470是2次冪,則簡(jiǎn)單的移位操作可實(shí)現(xiàn)葉節(jié)點(diǎn)地址計(jì)算中的乘法步驟。然而,該葉節(jié)點(diǎn)大小不需要以16比特編碼。相反,如果能以這些比特編碼可能的葉節(jié)點(diǎn)大小,則更少的比特是足夠的。例如,如果葉節(jié)點(diǎn)大小是1024比特或2048比特,則因?yàn)?比特足夠分辨兩種不同大小,所以字段470僅需要1比特寬。因此,如果僅有一個(gè)可能的葉節(jié)點(diǎn)大小,則字段470可被省略。在第二個(gè)實(shí)施例中,比特455可被省略,并可由其它方法實(shí)現(xiàn)其目的。例如,為表示路由信息,地址460可全被設(shè)為零,或另一個(gè)不可能的值。而且可使用類型字段515resp.535(將在下面描述)來分辨它們的子節(jié)點(diǎn)的類型。然而,當(dāng)使用515resp535時(shí),需要找到方法來分辨表?xiàng)l目240所指向的目標(biāo)的類型。然而,這可由表?xiàng)l目240中的類型字段(如1比特)來實(shí)現(xiàn)?,F(xiàn)在轉(zhuǎn)向圖5,描述了判決節(jié)點(diǎn)的格式的例子。顯示了判決節(jié)點(diǎn)的兩個(gè)例子,以4比特節(jié)點(diǎn)和8比特節(jié)點(diǎn)的形式標(biāo)注為510和530。然而,明顯的是這些僅為例子,有許多可能的判決節(jié)點(diǎn)形式。4比特節(jié)點(diǎn)適于IPv4,然而8比特碼可更適于IPv6。兩個(gè)節(jié)點(diǎn)分別共同具有類型字段515、535和NBT字段520和540。NBT字段表示“要測(cè)試的下一個(gè)比特”,代表IP地址中下一個(gè)比特的偏移量,以在該判決節(jié)點(diǎn)中作出判決。本領(lǐng)域普通技術(shù)人員應(yīng)知道NBT字段如何用于LPM。判決節(jié)點(diǎn)530另外有一個(gè)未用比特545。類型字段允許編碼判決節(jié)點(diǎn)的四種不同類型,但對(duì)于具體的應(yīng)用,可期望使用更多或更少的類型。以下四種類型對(duì)于給定應(yīng)用具有優(yōu)點(diǎn)00判決節(jié)點(diǎn)有兩個(gè)子節(jié)點(diǎn),它們本身也是判決節(jié)點(diǎn)。01判決節(jié)點(diǎn)有兩個(gè)子節(jié)點(diǎn),左邊的是判決節(jié)點(diǎn),右邊的是葉節(jié)點(diǎn)。10判決節(jié)點(diǎn)有兩個(gè)子節(jié)點(diǎn),左邊的是葉節(jié)點(diǎn),右邊的是判決節(jié)點(diǎn)。11判決節(jié)點(diǎn)有兩子節(jié)點(diǎn),均為葉節(jié)點(diǎn)。現(xiàn)在轉(zhuǎn)向圖6,將以例子來闡明樹搜索。這個(gè)例子并非限制,而僅描述了應(yīng)用本發(fā)明的一種可能方式。在一個(gè)實(shí)施例中,存在一組IP地址前綴1.00100101110011110102.00100101110011111103.0010010111001111110114.0010010111001111110105.0010010111001111110101所有這些前綴共用相同的前16比特。使用這些前綴的剩余3到6比特創(chuàng)建Patricia樹,然后該樹將被分段。指向第一分段的根的指針將被存儲(chǔ)在65536條目表中的位置00100101110011112=35CFH。在圖6中,具有與前綴之一匹配的目的地址的IP數(shù)據(jù)包占用的路由將被標(biāo)為R1到R5,與前綴1到5相對(duì)應(yīng)。由這組前綴創(chuàng)建Patricia樹。此Patricia樹被分段為兩個(gè)樹狀分段600和650。如果該P(yáng)atricia樹是平衡的二叉樹,這些分段將有7個(gè)判決節(jié)點(diǎn)和8個(gè)葉節(jié)點(diǎn)。簡(jiǎn)要參考圖7,該P(yáng)atricia樹是非平衡二叉樹,它導(dǎo)致判決節(jié)點(diǎn)和葉節(jié)點(diǎn)的布局。樹狀分段600的判決節(jié)點(diǎn)作為塊700被存儲(chǔ)在主存儲(chǔ)器中。該塊以分段首標(biāo)為起點(diǎn),由樹狀分段600的判決節(jié)點(diǎn)跟隨其后。由于平衡的二叉樹將有7個(gè)判決節(jié)點(diǎn),為7個(gè)判決節(jié)點(diǎn)分配存儲(chǔ)器。與平衡二叉樹相比,在樹狀分段600中消失的節(jié)點(diǎn),將保持為空和未用。樹狀分段600的葉節(jié)點(diǎn)被作為塊710存儲(chǔ)在主存儲(chǔ)器中。在該塊中,第三個(gè)被存儲(chǔ)的葉節(jié)點(diǎn)是樹狀分段650。余下的葉節(jié)點(diǎn)是路由信息R1到R3。所有這些葉節(jié)點(diǎn)大小相等。如果有必要,插入填充比特或填充字節(jié)以使它們大小相等。樹狀分段650的判決節(jié)點(diǎn)被作為塊750存儲(chǔ)在主存儲(chǔ)器中,它的葉節(jié)點(diǎn)作為塊760。這兩個(gè)塊與塊700和710結(jié)構(gòu)相似。再回到圖6,該算法為具有目的地址00100101110011111101010011110000的IP數(shù)據(jù)包確定路由信息。在所示的實(shí)施例中,前16比特被用作散列關(guān)鍵字,以查找65536條目表中的對(duì)應(yīng)條目。從主存儲(chǔ)器載入由此條目(或與此條目相關(guān)的)指向的存儲(chǔ)器塊,并確定該載入的存儲(chǔ)器塊是樹狀分段。在圖7所示的實(shí)施例中,該載入的存儲(chǔ)器塊是先前所述的存儲(chǔ)器塊700.然后,應(yīng)用算法的圖3B的方法遍歷這個(gè)樹狀分段,從IP地址剩余的16個(gè)比特中檢測(cè)比特1、4和5。系統(tǒng)然后從存儲(chǔ)器塊710中載入樹狀分段的所確定的葉節(jié)點(diǎn),所述存儲(chǔ)器塊710包括以存儲(chǔ)器塊770為形式的另一個(gè)樹狀分段650。在檢測(cè)目的IP地址剩余16比特的比特6之后,葉節(jié)點(diǎn)665被確定為合適的樹狀分段葉節(jié)點(diǎn)。從存儲(chǔ)器塊760載入這個(gè)葉節(jié)點(diǎn)。系統(tǒng)的算法計(jì)算它不是新的樹狀分段,而是實(shí)際的路由信息。由于僅檢測(cè)IP前綴比特的子集,因此必須將該完整前綴存入路由信息并根據(jù)該IP數(shù)據(jù)包的IP目的地址進(jìn)行檢測(cè)。如果匹配,則系統(tǒng)的算法已確定正確的路由信息并且可以轉(zhuǎn)發(fā)該數(shù)據(jù)包。如果不匹配,圖3B的方法會(huì)采取進(jìn)一步行動(dòng),比如在專用于短前綴的分離Patricia樹中搜索比16比特短的前綴匹配??梢岳斫獾氖潜景l(fā)明可有多種形式和實(shí)施例。因此,在不脫離本發(fā)明的精神或范圍的情況下,可作出各種變形。已經(jīng)通過參考特定的優(yōu)選實(shí)施例描述了本發(fā)明,需要注意的是所公開的實(shí)施例僅為示例目的而非實(shí)質(zhì)上限制,并且在前述公開中預(yù)期了寬范圍的變更、變形、變化、和替換,在某些例子中,可應(yīng)用本發(fā)明的某些特點(diǎn)而無需相應(yīng)使用其他特點(diǎn)。基于對(duì)優(yōu)選實(shí)施例的前述說明,本領(lǐng)域普通技術(shù)人員應(yīng)明白可做出多種變更和變形。因此,應(yīng)廣泛分析所附權(quán)利要求,并在某種意義上與本發(fā)明的范圍一致。權(quán)利要求1.一種初始化使用散列表和多個(gè)樹狀分段的數(shù)據(jù)結(jié)構(gòu)的方法,包括創(chuàng)建該散列表;創(chuàng)建該多個(gè)樹狀分段;在他們自己相鄰的存儲(chǔ)器分段中存儲(chǔ)該多個(gè)樹狀分段;散列對(duì)應(yīng)于每一樹狀分段的至少一個(gè)表?xiàng)l目,由此創(chuàng)建至少一個(gè)散列關(guān)鍵字和至少一個(gè)散列表?xiàng)l目;和向至少一個(gè)散列表?xiàng)l目分配該樹狀分段。2.根據(jù)權(quán)利要求1的方法,還包括使用該數(shù)據(jù)結(jié)構(gòu)。3.根據(jù)權(quán)利要求1的方法,其特征在于創(chuàng)建散列表的步驟還包括建立一對(duì)一恒等函數(shù)的散列表。4.根據(jù)權(quán)利要求1的方法,還包括使用該數(shù)據(jù)結(jié)構(gòu)以執(zhí)行前綴搜索。5.根據(jù)權(quán)利要求3的方法,還包括通過使用該前綴搜索轉(zhuǎn)發(fā)網(wǎng)際協(xié)議數(shù)據(jù)包。6.根據(jù)權(quán)利要求1的方法,其特征在于創(chuàng)建多個(gè)樹狀分段的步驟還包括創(chuàng)建多個(gè)樹狀分段的一個(gè)或更多葉節(jié)點(diǎn)。7.根據(jù)權(quán)利要求6的方法,還包括創(chuàng)建一個(gè)或多個(gè)判決節(jié)點(diǎn)。8.根據(jù)權(quán)利要求1的方法,其特征在于當(dāng)與該散列關(guān)鍵字相關(guān)的樹狀分段有一個(gè)或沒有表?xiàng)l目時(shí),存取分離的表。9.根據(jù)權(quán)利要求1的方法,其特征在于分配葉節(jié)點(diǎn)樹狀分段的步驟還包括將網(wǎng)際協(xié)議路由信息分配給子樹分段的葉節(jié)點(diǎn)。10.根據(jù)權(quán)利要求1的方法,還包括步驟定位該樹狀分段中的葉節(jié)點(diǎn),作為該葉節(jié)點(diǎn)的相關(guān)存儲(chǔ)器地址的函數(shù)。11.根據(jù)權(quán)利要求1的方法,還包括步驟通過使用相關(guān)分段首標(biāo)訪問并讀取葉節(jié)點(diǎn)。12.根據(jù)權(quán)利要求1的方法,其特征在于存儲(chǔ)樹狀分段的步驟實(shí)質(zhì)上包括一個(gè)載入序列。13.根據(jù)權(quán)利要求5的方法,其特征在于存儲(chǔ)樹狀分段的步驟還包括在本地存儲(chǔ)中存儲(chǔ)多個(gè)所需葉節(jié)點(diǎn)。14.根據(jù)權(quán)利要求1的方法,其特征在于存儲(chǔ)樹狀分段的步驟是本地存儲(chǔ)大小的函數(shù),其中從由存儲(chǔ)器脈沖串存取大小、總線傳送大小和高速緩沖存儲(chǔ)器線大小組成的集合中選擇該本地存儲(chǔ)大小。15.根據(jù)權(quán)利要求1的方法,其特征在于存儲(chǔ)樹狀分段的步驟使用包括基地址指針、判決節(jié)點(diǎn)的大小的標(biāo)記、和表示所占有的葉節(jié)點(diǎn)的比特掩碼的分段首標(biāo)。16.根據(jù)權(quán)利要求11的方法,還包括應(yīng)用″一一計(jì)數(shù)″指令以計(jì)算最終存儲(chǔ)器位置。17.根據(jù)權(quán)利要求1的方法,其特征在于創(chuàng)建數(shù)據(jù)樹的步驟包括創(chuàng)建二叉判決節(jié)點(diǎn)。18.根據(jù)權(quán)利要求1的方法,其特征在于創(chuàng)建樹狀分段的步驟還包括創(chuàng)建Patricia樹狀分段。19.根據(jù)權(quán)利要求1的方法,其特征在于分配步驟與包含網(wǎng)際協(xié)議路由信息的葉節(jié)點(diǎn)相關(guān)。20.根據(jù)權(quán)利要求1的方法,還包括步驟遍歷樹狀分段。21.一種通過使用數(shù)據(jù)樹存取存儲(chǔ)器的系統(tǒng),包括主存儲(chǔ)器;本地存儲(chǔ),與主存儲(chǔ)器功能性相連;和多個(gè)樹狀分段,存儲(chǔ)在主存儲(chǔ)器中,其中通過實(shí)質(zhì)上一個(gè)存儲(chǔ)器存取還可將該樹狀分段載入該本地存儲(chǔ)。22.根據(jù)權(quán)利要求21的系統(tǒng),其特征在于該本地存儲(chǔ)包括軟件。23.根據(jù)權(quán)利要求21的系統(tǒng),其特征在于該本地存儲(chǔ)包括硬件。24.根據(jù)權(quán)利要求21的系統(tǒng),其特征在于子樹分段的葉節(jié)點(diǎn)包括網(wǎng)絡(luò)目的地址。25.根據(jù)權(quán)利要求24的系統(tǒng),其特征在于該網(wǎng)絡(luò)目的地址用于網(wǎng)際協(xié)議。26.根據(jù)權(quán)利要求21的系統(tǒng),其特征在于該樹狀分段是可遍歷的。27.一種用于改善葉節(jié)點(diǎn)存儲(chǔ)器存取和存儲(chǔ)的性能的方法,包括從包含多個(gè)葉節(jié)點(diǎn)和判決節(jié)點(diǎn)的數(shù)據(jù)樹中確定多個(gè)樹狀分段,該被確定的多個(gè)樹狀分段包含一個(gè)判決節(jié)點(diǎn)和多個(gè)葉節(jié)點(diǎn);散列與多個(gè)表?xiàng)l目相關(guān)的標(biāo)記,由此創(chuàng)建散列表?xiàng)l目;分配第一個(gè)樹狀分段給至少一個(gè)散列表?xiàng)l目;和分配第二個(gè)樹狀分段給第一個(gè)樹狀分段中的至少一個(gè)葉節(jié)點(diǎn)。28.根據(jù)權(quán)利要求27的方法,其特征在于該散列步驟包括散列含有存儲(chǔ)器地址信息的標(biāo)記。29.根據(jù)權(quán)利要求27的方法,其特征在于該散列步驟產(chǎn)生多個(gè)散列關(guān)鍵字,每個(gè)散列關(guān)鍵字與樹狀分段具有一一對(duì)應(yīng)關(guān)系。30.根據(jù)權(quán)利要求27的方法,其特征在于該散列步驟產(chǎn)生多個(gè)散列關(guān)鍵字,其中一個(gè)或更多的散列關(guān)鍵字與第一級(jí)數(shù)據(jù)節(jié)點(diǎn)樹狀分段的底層的多個(gè)數(shù)據(jù)節(jié)點(diǎn)具有一對(duì)多的對(duì)應(yīng)關(guān)系。31.根據(jù)權(quán)利要求27的方法,還包括步驟訪問該樹狀分段。32.一種改善葉節(jié)點(diǎn)存儲(chǔ)器存取和存儲(chǔ)的性能的方法,包括根據(jù)包含多個(gè)葉節(jié)點(diǎn)的數(shù)據(jù)樹創(chuàng)建多個(gè)樹狀分段;在存儲(chǔ)器的相鄰區(qū)域存儲(chǔ)該樹狀分段,作為存儲(chǔ)裝置的輸入大小的函數(shù);散列與多個(gè)表?xiàng)l目相關(guān)的標(biāo)記,由此創(chuàng)建散列表?xiàng)l目;分配樹狀分段給至少一個(gè)散列表?xiàng)l目;選擇該樹狀分段的葉節(jié)點(diǎn);和分配第二樹狀分段給該選定的葉節(jié)點(diǎn)。33.根據(jù)權(quán)利要求32的方法,其特征在于該選擇步驟包括使用散列函數(shù)。34.根據(jù)權(quán)利要求32的方法,還包括步驟遍歷該樹狀分段。35.一種計(jì)算機(jī)程序產(chǎn)品,用于初始化使用散列表和多個(gè)樹狀分段的數(shù)據(jù)結(jié)構(gòu),該計(jì)算機(jī)程序產(chǎn)品具有其上含有計(jì)算機(jī)程序的介質(zhì),該計(jì)算機(jī)程序包括創(chuàng)建該散列表的計(jì)算機(jī)代碼;創(chuàng)建多個(gè)樹狀分段的計(jì)算機(jī)代碼;在其自己的相鄰存儲(chǔ)器分段中存儲(chǔ)樹狀分段的計(jì)算機(jī)代碼;散列與每一樹狀分段相對(duì)應(yīng)的至少一個(gè)表?xiàng)l目、從而創(chuàng)建至少一個(gè)散列關(guān)鍵字和至少一個(gè)散列表?xiàng)l目的計(jì)算機(jī)代碼;和分配該樹狀分段給至少一個(gè)散列表?xiàng)l目的計(jì)算機(jī)代碼。36.一種處理器,用于初始化使用散列表和多個(gè)樹狀分段的數(shù)據(jù)結(jié)構(gòu),該處理器包括計(jì)算機(jī)程序,該程序包含從包含多個(gè)葉節(jié)點(diǎn)的數(shù)據(jù)樹中確定多個(gè)樹狀分段的計(jì)算機(jī)代碼,該被確定的多個(gè)樹狀分段包含一個(gè)判決節(jié)點(diǎn)和一個(gè)或多個(gè)葉節(jié)點(diǎn);在其自己的連續(xù)存儲(chǔ)器中存儲(chǔ)每一樹狀分段的計(jì)算機(jī)代碼;散列與每一子樹分段對(duì)應(yīng)的至少一個(gè)表?xiàng)l目、由此創(chuàng)建至少一個(gè)散列關(guān)鍵字和至少一個(gè)散列表?xiàng)l目的計(jì)算機(jī)代碼;和分配樹狀分段給至少一個(gè)散列表?xiàng)l目的計(jì)算機(jī)代碼。全文摘要公開了一種用于改善表查找的性能的數(shù)據(jù)結(jié)構(gòu)和對(duì)應(yīng)搜索方法。使用具有指向樹狀分段的散列表?xiàng)l目的散列表來利用該表的數(shù)據(jù)結(jié)構(gòu),所述樹狀分段在主存儲(chǔ)器內(nèi)相鄰并可被有效載入本地?cái)?shù)據(jù)存儲(chǔ)或高速緩沖存儲(chǔ)器。樹狀分段的葉節(jié)點(diǎn)包含數(shù)據(jù)記錄的標(biāo)記,或另一樹狀分段的標(biāo)記。采用該數(shù)據(jù)結(jié)構(gòu)和對(duì)應(yīng)搜索算法來基于一個(gè)網(wǎng)際路由表的最長(zhǎng)前綴匹配而進(jìn)行搜索。文檔編號(hào)G06F17/30GK1504912SQ0312774公開日2004年6月16日申請(qǐng)日期2003年8月13日優(yōu)先權(quán)日2002年12月5日發(fā)明者彼得·霍夫斯蒂,彼得霍夫斯蒂,C尼克,馬克·C·尼克申請(qǐng)人:國際商業(yè)機(jī)器公司