路由查找方法及裝置、B-Tree樹結(jié)構(gòu)的構(gòu)建方法
【專利摘要】本發(fā)明公開了一種路由查找方法及裝置、B-Tree樹結(jié)構(gòu)的構(gòu)建方法。其中,該裝置包括:路由查找算法軟件模塊、路由更新接口模塊和路由查找硬件模塊,其中,路由查找算法軟件模塊,用于執(zhí)行對路由條目的軟件計(jì)算和更新條目指令的下發(fā);路由更新接口模塊,用于在接收到路由查找算法軟件模塊下發(fā)的更新條目指令后,根據(jù)路由查找硬件模塊的實(shí)際工作狀態(tài),控制路由查找硬件模塊的數(shù)據(jù)流,并將更新條目寫入路由查找硬件模塊的存儲器中;路由查找硬件模塊,用于響應(yīng)硬件系統(tǒng)的路由查找請求,并將最長前綴匹配的查找結(jié)果返回至硬件系統(tǒng);其中,路由查找硬件模塊為流水線型架構(gòu)。通過本發(fā)明實(shí)現(xiàn)硬件流水操作,流水級數(shù)少,容量對路由前綴分布不敏感。
【專利說明】路由查找方法及裝置、B-Tree樹結(jié)構(gòu)的構(gòu)建方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)交換領(lǐng)域,特別是涉及一種路由查找方法及裝置、B-Tree樹結(jié)構(gòu)的構(gòu)建方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)Internet的迅猛發(fā)展,用于主干網(wǎng)絡(luò)互聯(lián)的核心路由器的接口速率達(dá)到lOOGbps,該速率要求核心路由器在支持大容量路由表的情況下路由查找速率達(dá)到每秒幾百萬次。互聯(lián)網(wǎng)協(xié)議(Internet Protocol,簡稱為IP)查找需要得到最長匹配前綴,由于高速查找的需要,軟件查找方法已經(jīng)不適用,近年來研究人員提出了多種硬件查找方法以提高查找速率,其中以Trie樹結(jié)構(gòu)和三態(tài)內(nèi)容尋址存儲器(Ternary ContentAddressable Memory,簡稱為 TCAM)最為流行。
[0003]Trie樹結(jié)構(gòu)是應(yīng)用最為廣泛的樹結(jié)構(gòu),容易實(shí)現(xiàn)硬件上的流水操作,利于提升路由查找的吞吐率。但是Trie樹結(jié)構(gòu)具有一定的局限性。一般Trie樹結(jié)構(gòu)的流水級數(shù)較多,會帶來過大的查找延時。采用多比特Trie樹結(jié)構(gòu)的路由查找設(shè)計(jì)可以大大減少流水級數(shù),但會帶來大量額外內(nèi)存的消耗,并且這種額外的內(nèi)存消耗量與路由表的前綴分布相關(guān),使得基于多比特Trie樹的路由查找硬件設(shè)計(jì)的路由表容量存在較大起伏,在比較壞的路由分布的情況下,存儲空間利用率很低。
[0004]針對相關(guān)技術(shù)中路由查找方案內(nèi)存消耗較大,影響路由查找效率的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0005]針對相關(guān)技術(shù)中路由查找方案內(nèi)存消耗較大,影響路由查找效率的問題,本發(fā)明提供了一種路由查找方法及裝置、B-Tree樹結(jié)構(gòu)的構(gòu)建方法,用以解決上述技術(shù)問題。
[0006]根據(jù)本發(fā)明的一個方面,本發(fā)明提供了一種路由查找裝置,其中,該裝置包括:路由查找算法軟件模塊、路由更新接口模塊和路由查找硬件模塊,其中,路由查找算法軟件模塊,用于執(zhí)行對路由條目的軟件計(jì)算和更新條目指令的下發(fā);路由更新接口模塊,用于在接收到上述路由查找算法軟件模塊下發(fā)的更新條目指令后,根據(jù)路由查找硬件模塊的實(shí)際工作狀態(tài),控制上述路由查找硬件模塊的數(shù)據(jù)流,并將更新條目寫入上述路由查找硬件模塊的存儲器中;路由查找硬件模塊,用于響應(yīng)硬件系統(tǒng)的路由查找請求,并將最長前綴匹配的查找結(jié)果返回至上述硬件系統(tǒng);其中,上述路由查找硬件模塊為流水線型架構(gòu)。
[0007]優(yōu)選地,上述路由查找算法軟件模塊包括:插入操作子模塊,用于響應(yīng)路由轉(zhuǎn)發(fā)系統(tǒng)的路由插入指令,并將上述路由條目插入到B-Tree樹結(jié)構(gòu)中;刪除操作子模塊,用于響應(yīng)上述路由轉(zhuǎn)發(fā)系統(tǒng)的路由刪除指令,并將上述路由條目在上述B-Tree樹結(jié)構(gòu)中刪除;軟件表項(xiàng)內(nèi)存管理子模塊,用于對路由查找算法中的節(jié)點(diǎn)數(shù)據(jù)和結(jié)果表?xiàng)l目數(shù)據(jù)進(jìn)行管理;更新硬件操作子模塊,用于將在上述插入操作子模塊的插入操作或上述刪除操作子模塊的刪除操作中涉及到改變的B-Tree樹節(jié)點(diǎn)和結(jié)果表?xiàng)l目記錄在緩存中,并在插入操作或刪除操作結(jié)束后,將樹節(jié)點(diǎn)從軟件數(shù)據(jù)格式轉(zhuǎn)換成硬件數(shù)據(jù)格式,并將轉(zhuǎn)換后的硬件數(shù)據(jù)和對應(yīng)的硬件映射地址通過軟硬件交互接口連續(xù)寫入上述路由更新接口模塊中。
[0008]優(yōu)選地,上述路由查找硬件模塊包括:查找邏輯子模塊,用于在接收到上述硬件系統(tǒng)的路由查找請求后,將查找鍵值信息和內(nèi)存子模塊中的根節(jié)點(diǎn)地址信息發(fā)送至樹結(jié)構(gòu)的第一級查找流水中;然后判斷上述根節(jié)點(diǎn)地址是否為本級節(jié)點(diǎn);如果是,則向上述內(nèi)存子模塊發(fā)起讀節(jié)點(diǎn)請求,等待上述內(nèi)存子模塊返回節(jié)點(diǎn)信息;如果不是,則保留當(dāng)前節(jié)點(diǎn)信息不變;還用于根據(jù)比較上述節(jié)點(diǎn)信息與鍵值,判斷路由條目是否命中;如果命中,則將命中的路由條目對應(yīng)的結(jié)果記錄替代之前的命中結(jié)果;內(nèi)存子模塊,包括多個獨(dú)立內(nèi)存空間,分別與上述樹結(jié)構(gòu)的每個查找邏輯層相對應(yīng)。
[0009]優(yōu)選地,上述路由更新接口模塊包括:緩存子模塊,用于通過上述軟硬件交互接口接收節(jié)點(diǎn)數(shù)據(jù)和結(jié)果表?xiàng)l目數(shù)據(jù)以及對應(yīng)的硬件映射地址;邏輯處理子模塊,用于根據(jù)上述路由查找硬件模塊的上述查找邏輯子模塊的工作狀態(tài),將上述緩存子模塊的條目更新內(nèi)容更新至上述路由查找硬件模塊的上述內(nèi)存子模塊中。
[0010]優(yōu)選地,上述插入操作子模塊包括:樹結(jié)構(gòu)管理單元,用于對新條目在上述B-Tree樹結(jié)構(gòu)中的訪問順序進(jìn)行控制;節(jié)點(diǎn)解析及比較單元,用于與上述樹結(jié)構(gòu)管理單元共同控制新條目在上述B-Tree樹結(jié)構(gòu)中的有序查詢,并找到插入位置;節(jié)點(diǎn)分裂操作單元,用于在新條目需要插入到已滿節(jié)點(diǎn)時,對該已滿節(jié)點(diǎn)進(jìn)行分裂操作;結(jié)果表更新單元,用于將新條目攜帶的結(jié)果信息存入結(jié)果表,并將該結(jié)果信息的地址記錄在上述新條目所在節(jié)點(diǎn)的對應(yīng)位置中。
[0011]優(yōu)選地,上述軟件表項(xiàng)內(nèi)存管理子模塊包括:軟件節(jié)點(diǎn)管理單元,用于管理路由查找算法中的節(jié)點(diǎn)分配,通過內(nèi)存管理算法迅速分配和管理軟件節(jié)點(diǎn);軟件結(jié)果表管理單元,用于管理路由查找算法中的結(jié)果表的條目地址分配,通過內(nèi)存管理算法快速分配和管理結(jié)果表;硬件地址映射管理單元,用于將硬件的實(shí)際內(nèi)存空間進(jìn)行軟件地址映射,通過軟件的內(nèi)存管理算法管理硬件節(jié)點(diǎn)和結(jié)果表;其中,軟件節(jié)點(diǎn)與硬件節(jié)點(diǎn)一一對應(yīng),軟件結(jié)果表與硬件結(jié)果表一一對應(yīng)。
[0012]根據(jù)本發(fā)明的另一方面,本發(fā)明還提供了一種路由查找方法,其中,該方法包括:定義B-Tree樹結(jié)構(gòu)的階數(shù)M和最大高度N、每層最大節(jié)點(diǎn)數(shù)目和結(jié)果表?xiàng)l目數(shù),進(jìn)而確定硬件相應(yīng)的流水級數(shù)、每層節(jié)點(diǎn)占用空間和結(jié)果表占用空間,進(jìn)而構(gòu)建B-Tree樹結(jié)構(gòu);基于上述B-Tree樹結(jié)構(gòu),執(zhí)行路由查找操作。
[0013]根據(jù)本發(fā)明的又一方面,本發(fā)明還提供了一種硬件查找結(jié)構(gòu)為自底向上生長的B-Tree樹結(jié)構(gòu)的構(gòu)建方法,其中,該方法包括:根據(jù)實(shí)際路由表容量需求和延時需求定義出B-Tree樹結(jié)構(gòu)的階數(shù)M和B-Tree樹結(jié)構(gòu)所需要的最大高度N,按照上述最大高度N設(shè)定相應(yīng)的流水級數(shù)N+1 ;根據(jù)算法填充情況定義出B-Tree樹結(jié)構(gòu)的每層最大節(jié)點(diǎn)數(shù)目,按照上述每層最大節(jié)點(diǎn)數(shù)目設(shè)定相應(yīng)的內(nèi)存空間;根據(jù)路由表實(shí)際容量需求設(shè)定結(jié)果表的內(nèi)存空間。
[0014]通過本發(fā)明,解決了相關(guān)技術(shù)中路由查找方案內(nèi)存消耗較大,影響路由查找效率的問題,本發(fā)明的技術(shù)方案從整體上設(shè)計(jì)了路由查找系統(tǒng)的軟件算法模塊、硬件數(shù)據(jù)結(jié)構(gòu)、更新流程、查找流水結(jié)構(gòu)和內(nèi)存結(jié)構(gòu),能夠滿足大容量路由表的高性能查找需求,能夠?qū)崿F(xiàn)硬件流水操作,流水級數(shù)少,并且容量對路由前綴分布不敏感。
[0015]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【專利附圖】
【附圖說明】
[0016]圖1是根據(jù)本發(fā)明實(shí)施例的路由查找裝置的結(jié)構(gòu)框圖;
[0017]圖2是根據(jù)本發(fā)明實(shí)施例的路由算法軟件模塊的架構(gòu)示意圖;
[0018]圖3是根據(jù)本發(fā)明實(shí)施例的路由查找裝置的硬件相關(guān)模塊的架構(gòu)示意圖;
[0019]圖4是根據(jù)本發(fā)明實(shí)施例的硬件查找流水的流程示意圖;
[0020]圖5是根據(jù)本發(fā)明實(shí)施例的路由前綴插入流程示意圖;
[0021]圖6是根據(jù)本發(fā)明實(shí)施例的路由前綴刪除流程示意圖;
[0022]圖7是根據(jù)本發(fā)明實(shí)施例的路由查找方法的流程圖;
[0023]圖8是根據(jù)本發(fā)明實(shí)施例的硬件查找結(jié)構(gòu)為自底向上生長的B-Tree樹結(jié)構(gòu)的構(gòu)建方法的流程圖;
[0024]圖9是根據(jù)本發(fā)明實(shí)施例的路由查找裝置的運(yùn)行示意圖。
【具體實(shí)施方式】
[0025]為了解決現(xiàn)有技術(shù)路由查找方案內(nèi)存消耗較大,影響路由查找效率的問題,本發(fā)明提供了一種路由查找方法及裝置、B-Tree樹結(jié)構(gòu)的構(gòu)建方法,以下結(jié)合附圖以及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
[0026]本發(fā)明提出一種基于B-Tree的路由查找方法和硬件架構(gòu),能夠支持大容量轉(zhuǎn)發(fā)表,并進(jìn)行高速查找,最重要的是本發(fā)明提出的方法能夠?qū)崿F(xiàn)硬件流水操作,流水級數(shù)少,并且容量對路由前綴分布不敏感。B-tree是一種被廣泛應(yīng)用于數(shù)據(jù)庫文件管理的軟件算法,它的特點(diǎn)是一個樹節(jié)點(diǎn)擁有M-1個關(guān)鍵字和M個子節(jié)點(diǎn),B-Tree的深度由階數(shù)M和關(guān)鍵字的數(shù)目決定,與關(guān)鍵字的分布無關(guān)。這些特點(diǎn)使得B-Tree能夠克服上述相關(guān)技術(shù)中Trie樹結(jié)構(gòu)的缺點(diǎn),實(shí)現(xiàn)流水級數(shù)少且對路由前綴分布不敏感的路由查找設(shè)計(jì)。
[0027]需要注意的是,在應(yīng)用B-Tree進(jìn)行路由查找時,需要確保返回的結(jié)果為最長前綴匹配結(jié)果。由于查找回溯是無法在硬件流水操作中實(shí)現(xiàn)的,因此需要對B-Tree的路由查找算法進(jìn)行特殊的處理。這類處理有很多種公開的操作方法,例如可以將父前綴復(fù)制成多份合并到其所有子前綴上,或者采用將父前綴與樹結(jié)構(gòu)最上層的子節(jié)點(diǎn)合并的方法。本發(fā)明利用了將父前綴與樹結(jié)構(gòu)最上層子節(jié)點(diǎn)合并的方法,設(shè)計(jì)出基于B-Tree的路由查找方法和裝置。
[0028]本實(shí)施例提供了一種路由查找方法裝置,圖1是根據(jù)本發(fā)明實(shí)施例的路由查找裝置的結(jié)構(gòu)框圖,如圖1所示,該裝置包括:路由查找算法軟件模塊10、路由更新接口模塊20和路由查找硬件模塊30,下面對各個模塊進(jìn)行具體介紹。
[0029]路由查找算法軟件模塊10,用于執(zhí)行對路由條目的軟件計(jì)算和更新條目指令的下發(fā);
[0030]路由更新接口模塊20,連接至路由查找算法軟件模塊10,用于在接收到上述路由查找算法軟件模塊10下發(fā)的更新條目指令后,根據(jù)路由查找硬件模塊30的實(shí)際工作狀態(tài),控制上述路由查找硬件模塊30的數(shù)據(jù)流,并將更新條目寫入上述路由查找硬件模塊30的存儲器中;
[0031]路由查找硬件模塊30,連接至路由更新接口模塊20,用于響應(yīng)硬件系統(tǒng)的路由查找請求,并將最長前綴匹配的查找結(jié)果返回至上述硬件系統(tǒng);其中,上述路由查找硬件模塊30為流水線型架構(gòu)。
[0032]通過本實(shí)施例,從整體上設(shè)計(jì)了路由查找系統(tǒng)的軟件算法模塊、硬件數(shù)據(jù)結(jié)構(gòu)、更新流程、查找流水結(jié)構(gòu)和內(nèi)存結(jié)構(gòu),能夠滿足大容量路由表的高性能查找需求,能夠?qū)崿F(xiàn)硬件流水操作,流水級數(shù)少,并且容量對路由前綴分布不敏感。
[0033]下面對各模塊的設(shè)計(jì)進(jìn)行詳細(xì)描述。
[0034]圖2是根據(jù)本發(fā)明實(shí)施例的路由算法軟件模塊的架構(gòu)示意圖,如圖2所示,整個路由查找算法軟件模塊基于前文所述的不需要進(jìn)行查找回溯的B-Tree算法實(shí)現(xiàn),整體框架分為4個部分:插入操作子模塊(201)、刪除操作子模塊(202)、軟件表項(xiàng)內(nèi)存管理子模塊(203)和更新硬件操作子模塊(204)。
[0035]插入操作子模塊(201)主要工作是響應(yīng)路由轉(zhuǎn)發(fā)系統(tǒng)的路由插入指令,并將下發(fā)的路由條目插入到B-Tree樹結(jié)構(gòu)中。該模塊中的樹結(jié)構(gòu)管理子模塊(205)對新條目在樹結(jié)構(gòu)中的訪問順序進(jìn)行控制,它與節(jié)點(diǎn)解析及比較子模塊(206)共同作用,保證新條目在B-Tree樹結(jié)構(gòu)中有序查詢,并找到合適的插入位置。節(jié)點(diǎn)分裂操作子模塊(207)主要功能是當(dāng)新條目需要插入到一個已經(jīng)滿的節(jié)點(diǎn)時,將該節(jié)點(diǎn)進(jìn)行B-Tree的分裂操作。分裂操作僅在插入新條目時可能被觸發(fā)。當(dāng)新條目被成功插入樹結(jié)構(gòu)后,結(jié)果表更新模塊(208)將新條目攜帶的結(jié)果信息存入結(jié)果表,并將該結(jié)果的地址記錄在新條目所在的節(jié)點(diǎn)對應(yīng)位置中。
[0036]刪除操作子模塊(202)主要工作是響應(yīng)路由轉(zhuǎn)發(fā)系統(tǒng)的路由刪除指令,并將下發(fā)的路由條目從B-Tree樹結(jié)構(gòu)中刪除。該模塊中的樹結(jié)構(gòu)管理子模塊和節(jié)點(diǎn)解析及比較子模塊功能與插入操作子模塊(201)相同,保證刪除條目在B-Tree樹結(jié)構(gòu)中有序查詢,并找到匹配的目標(biāo)條目,并進(jìn)行刪除。節(jié)點(diǎn)合并子模塊(209)的功能是當(dāng)一個條目被從節(jié)點(diǎn)中刪除后,如果該節(jié)點(diǎn)中鍵值數(shù)目過小,則將該節(jié)點(diǎn)與兄弟節(jié)點(diǎn)進(jìn)行合并操作。節(jié)點(diǎn)合并操作僅在刪除條目時可能被觸發(fā)。當(dāng)條目被刪除后,結(jié)果表更新模塊將該條目對應(yīng)的實(shí)際結(jié)果從結(jié)果表中刪除。
[0037]軟件表項(xiàng)內(nèi)存管理子模塊(203)的功能是對路由查找算法中的節(jié)點(diǎn)和結(jié)果表進(jìn)行管理,包括內(nèi)容有:軟件節(jié)點(diǎn)管理子模塊(210 )、軟件結(jié)果表管理子模塊(211)、硬件節(jié)點(diǎn)地址映射管理子模塊(212 )和硬件結(jié)果表地址映射管理子模塊(213 )。
[0038]軟件節(jié)點(diǎn)管理子模塊(210)的功能是管理路由查找算法中的節(jié)點(diǎn)分配,通過內(nèi)存管理算法快速分配和管理軟件節(jié)點(diǎn)。
[0039]軟件結(jié)果表管理子模塊(211)的功能是管理路由查找算法中的結(jié)果表的條目地址分配,通過內(nèi)存管理算法快速分配和管理結(jié)果表。
[0040]硬件節(jié)點(diǎn)地址映射管理子模塊(212)和硬件結(jié)果表地址映射管理子模塊(213)是將硬件的實(shí)際內(nèi)存空間在軟件模塊中進(jìn)行地址映射,通過軟件的內(nèi)存管理算法來管理硬件節(jié)點(diǎn)和結(jié)果表。要求軟件節(jié)點(diǎn)與硬件節(jié)點(diǎn)一一對應(yīng),軟件結(jié)果表與硬件結(jié)果表也一一對應(yīng),因此實(shí)際上一個軟件節(jié)點(diǎn)不僅對應(yīng)了一個軟件內(nèi)存節(jié)點(diǎn)地址,還對應(yīng)了一個實(shí)際的硬件內(nèi)存節(jié)點(diǎn)地址。
[0041]更新硬件操作子模塊(204)的主要功能是將在插入操作或刪除操作中涉及到改變的B-Tree樹節(jié)點(diǎn)和結(jié)果表?xiàng)l目記錄在緩存中,并在插入操作或刪除操作結(jié)束后,將樹節(jié)點(diǎn)從軟件數(shù)據(jù)格式轉(zhuǎn)換成約定的硬件數(shù)據(jù)格式,并將轉(zhuǎn)換后的硬件數(shù)據(jù)和對應(yīng)的硬件映射地址通過軟硬件交互接口(可以但不限于LocalBus或PCIe接口)連續(xù)寫入路由條目更新模塊中。該模塊的意義在于減少軟硬件的接口交互操作,節(jié)省更新時間,并減少條目更新對硬件實(shí)際查找流水的影響。
[0042]基于上述路由查找算法軟件模塊的描述,本實(shí)施例提供了一種優(yōu)選實(shí)施方式,SP上述路由查找算法軟件模塊可以包括:插入操作子模塊,用于響應(yīng)路由轉(zhuǎn)發(fā)系統(tǒng)的路由插入指令,并將上述路由條目插入到B-Tree樹結(jié)構(gòu)中;刪除操作子模塊,用于響應(yīng)上述路由轉(zhuǎn)發(fā)系統(tǒng)的路由刪除指令,并將上述路由條目在上述B-Tree樹結(jié)構(gòu)中刪除;軟件表項(xiàng)內(nèi)存管理子模塊,用于對路由查找算法中的節(jié)點(diǎn)數(shù)據(jù)和結(jié)果表?xiàng)l目數(shù)據(jù)進(jìn)行管理;更新硬件操作子模塊,用于將在上述插入操作子模塊的插入操作或上述刪除操作子模塊的刪除操作中涉及到改變的B-Tree樹節(jié)點(diǎn)和結(jié)果表?xiàng)l目記錄在緩存中,并在插入操作或刪除操作結(jié)束后,將樹節(jié)點(diǎn)從軟件數(shù)據(jù)格式轉(zhuǎn)換成硬件數(shù)據(jù)格式,并將轉(zhuǎn)換后的硬件數(shù)據(jù)和對應(yīng)的硬件映射地址通過軟硬件交互接口連續(xù)寫入上述路由更新接口模塊中。
[0043]優(yōu)選地,上述插入操作子模塊可以包括:樹結(jié)構(gòu)管理單元,用于對新條目在上述B-Tree樹結(jié)構(gòu)中的訪問順序進(jìn)行控制;節(jié)點(diǎn)解析及比較單元,用于與上述樹結(jié)構(gòu)管理單元共同控制新條目在上述B-Tree樹結(jié)構(gòu)中的有序查詢,并找到插入位置;節(jié)點(diǎn)分裂操作單元,用于在新條目需要插入到已滿節(jié)點(diǎn)時,對該已滿節(jié)點(diǎn)進(jìn)行分裂操作;結(jié)果表更新單元,用于將新條目攜帶的結(jié)果信息存入結(jié)果表,并將該結(jié)果信息的地址記錄在上述新條目所在節(jié)點(diǎn)的對應(yīng)位置中。
[0044]優(yōu)選地,上述軟件表項(xiàng)內(nèi)存管理子模塊可以包括:軟件節(jié)點(diǎn)管理單元,用于管理路由查找算法中的節(jié)點(diǎn)分配,通過內(nèi)存管理算法迅速分配和管理軟件節(jié)點(diǎn);軟件結(jié)果表管理單元,用于管理路由查找算法中的結(jié)果表的條目地址分配,通過內(nèi)存管理算法快速分配和管理結(jié)果表;硬件地址映射管理單元,用于將硬件的實(shí)際內(nèi)存空間進(jìn)行軟件地址映射,通過軟件的內(nèi)存管理算法管理硬件節(jié)點(diǎn)和結(jié)果表;其中,軟件節(jié)點(diǎn)與硬件節(jié)點(diǎn)一一對應(yīng),軟件結(jié)果表與硬件結(jié)果表對應(yīng)。
[0045]路由查找算法軟件模塊運(yùn)行在主控中央處理器(CentralProcessingUnit,簡稱為CPU)上,可以是聞級算法語目(如C、C++語目)編寫的B-Tree算法軟件程序。它以路由條目更新指令(插入、刪除路由條目指令)作為其輸入源,一般來自于協(xié)議平臺或驅(qū)動。當(dāng)一條更新指令下發(fā)到路由查找算法軟件模塊后,路由查找算法軟件模塊對這條更新指令根據(jù)B-Tree算法進(jìn)行插入操作;當(dāng)插入操作完成后,將本次計(jì)算所涉及的所有改變的樹節(jié)點(diǎn)按照約定的硬件格式,通過軟硬件交互接口(可以但不限于PCIe接口、LocalBus接口等)一次性寫入路由更新接口模塊中。
[0046]圖3是根據(jù)本發(fā)明實(shí)施例的路由查找裝置的硬件相關(guān)模塊的架構(gòu)示意圖,如圖3所示,硬件相關(guān)模塊包括路由更新接口模塊和路由查找硬件模塊,其中,路由更新接口模塊
(201)是一個硬件模塊,分為緩存區(qū)(202)和邏輯處理區(qū)(203)兩個部分,如圖3所示。緩存區(qū)用于存放算法模塊寫入的更新節(jié)點(diǎn)信息;邏輯處理區(qū)根據(jù)路由查找硬件模塊的相關(guān)狀態(tài),按照一定的順序,將更新節(jié)點(diǎn)數(shù)據(jù)寫入硬件模塊的節(jié)點(diǎn)內(nèi)存中。下面進(jìn)行具體介紹。
[0047]緩存區(qū)(302)主要功能是接收存儲軟件通過軟硬件交互接口寫入的節(jié)點(diǎn)數(shù)據(jù)、結(jié)果表?xiàng)l目數(shù)據(jù)和它們對應(yīng)的硬件地址,這些數(shù)據(jù)已經(jīng)由軟件轉(zhuǎn)換為硬件數(shù)據(jù)格式。
[0048]邏輯處理區(qū)(303)主要功能是根據(jù)路由查找硬件模塊中的查找邏輯子模塊(305)的實(shí)際工作狀態(tài),將緩存區(qū)的條目更新內(nèi)容實(shí)時更新至路由查找硬件模塊的內(nèi)存區(qū)(306)。邏輯處理區(qū)的重點(diǎn)在于,B-Tree算法的查找流水具有相關(guān)性,即下一級流水訪問的節(jié)點(diǎn)是上一級流水的查找結(jié)果中的一部分;并且因?yàn)槊恳患壛魉牟檎艺埱髸r刻都可能存在,所以必須在合適的情況下才能對硬件內(nèi)存進(jìn)行更新,否則會造成某些查找出現(xiàn)不命中甚至是錯誤命中的情況。最簡單的一種處理方案是:當(dāng)出現(xiàn)更新請求后,首先由邏輯處理區(qū)對查找流水邏輯進(jìn)行控制,阻斷查找邏輯區(qū)(305)入口的所有查找請求,所有查找請求將被暫存在緩存先入先出隊(duì)列(FirstlnputFirstOutput,簡稱為FIFO)中;然后等到查找流水邏輯中所有級的查找請求都被完全響應(yīng)并返回結(jié)果,此時查找邏輯中不再存在任何查找請求數(shù)據(jù)包;再將需要更新的節(jié)點(diǎn)和結(jié)果表從緩存區(qū)讀出,根據(jù)相應(yīng)的硬件地址寫入內(nèi)存區(qū)(306);最后完成所有更新操作后,解除對查找邏輯區(qū)的查找請求的鎖定,查找邏輯恢復(fù)正常工作狀態(tài)。
[0049]基于上述對路由查找裝置的硬件相關(guān)模塊(路由更新接口模塊)的描述,本實(shí)施例提供了一種優(yōu)選實(shí)施方式,即路由更新接口模塊包括:緩存子模塊,用于通過上述軟硬件交互接口接收節(jié)點(diǎn)數(shù)據(jù)和結(jié)果表?xiàng)l目數(shù)據(jù)以及對應(yīng)的硬件映射地址;邏輯處理子模塊,用于根據(jù)上述路由查找硬件模塊的上述查找邏輯子模塊的工作狀態(tài),將上述緩存子模塊的條目更新內(nèi)容更新至上述路由查找硬件模塊的上述內(nèi)存子模塊中。
[0050]下面對對路由查找裝置的另一個硬件相關(guān)模塊(路由查找硬件模塊)進(jìn)行介紹,路由查找硬件模塊(304)為硬件路由查找的主要模塊,是流水線設(shè)計(jì),主要由查找邏輯區(qū)(305)和內(nèi)存區(qū)(306)構(gòu)成。
[0051]查找邏輯區(qū)(305)為流水線設(shè)計(jì),每一級流水都有一個查找邏輯,流水線中的信息包括:查找鍵值信息、節(jié)點(diǎn)地址、命中信息(結(jié)果表中的地址)等。硬件的查找請求通過硬件接口,首先發(fā)送給首級流水,同時獲得硬件模塊中存放的根節(jié)點(diǎn)地址(307);每一級流水根據(jù)節(jié)點(diǎn)地址去訪問本級相對應(yīng)的內(nèi)存區(qū),獲得相應(yīng)的節(jié)點(diǎn)信息(如果訪問的節(jié)點(diǎn)不是本級節(jié)點(diǎn),則本級不進(jìn)行查找比較);再將節(jié)點(diǎn)中的鍵值信息進(jìn)行解析,與上一級傳遞來的查找鍵值進(jìn)行比較,獲得比較結(jié)果(如果命中,獲得新的命中信息;如果未命中,輸出未命中),并獲得下一級流水應(yīng)訪問的節(jié)點(diǎn)地址;最后一級流水將根據(jù)命中信息訪問一次結(jié)果表,將結(jié)果表中相應(yīng)的命中結(jié)果讀出,通過硬件接口返回給查找請求端。
[0052]內(nèi)存區(qū)(306)為分塊設(shè)計(jì),每一塊對應(yīng)一條流水。每一級流水對應(yīng)的節(jié)點(diǎn)空間由算法根據(jù)實(shí)際需求定義,通過硬件設(shè)計(jì)固化每一級的內(nèi)存。根節(jié)點(diǎn)地址(307)是一個寄存器,由軟件模塊配置,標(biāo)記樹結(jié)構(gòu)的根節(jié)點(diǎn)位置。結(jié)果表(309)對應(yīng)最后一級查找流水,由算法根據(jù)實(shí)際的表項(xiàng)容量需求定義結(jié)果表的實(shí)際占用空間。
[0053]內(nèi)存區(qū)(306)是路由查找硬件模塊中重要的數(shù)據(jù)存儲區(qū)域,其結(jié)構(gòu)如圖3所示。內(nèi)存區(qū)中的各內(nèi)存區(qū)域相互獨(dú)立,分為根節(jié)點(diǎn)地址區(qū)域、各層節(jié)點(diǎn)區(qū)域和結(jié)果表區(qū)域。根結(jié)點(diǎn)地址用于存儲B-Tree樹結(jié)構(gòu)的根節(jié)點(diǎn)的地址,它可能屬于任一層節(jié)點(diǎn)。每一層樹節(jié)點(diǎn)區(qū)域都相互獨(dú)立,不與其他樹節(jié)點(diǎn)區(qū)域交疊,避免查找流水同時訪問的沖突。結(jié)果表區(qū)域也是一塊獨(dú)立區(qū)域,由查找流水的最后一級訪問。
[0054]根節(jié)點(diǎn)地址可以用寄存器實(shí)現(xiàn);各層節(jié)點(diǎn)和結(jié)果表區(qū)域可以根據(jù)所需實(shí)際內(nèi)存空間大小和訪問延時要求用靜態(tài)隨機(jī)訪問存儲器(SRAM)、動態(tài)隨機(jī)訪問存儲器(DRAM)或其它類型存儲器實(shí)現(xiàn)。
[0055]基于上述對路由查找裝置的硬件相關(guān)模塊(路由查找硬件模塊)的描述,本實(shí)施例提供了一種優(yōu)選實(shí)施方式,即路由查找硬件模塊可以包括:查找邏輯子模塊,用于在接收到上述硬件系統(tǒng)的路由查找請求后,將查找鍵值信息和內(nèi)存子模塊中的根節(jié)點(diǎn)地址信息發(fā)送至樹結(jié)構(gòu)的第一級查找流水中;然后判斷上述根節(jié)點(diǎn)地址是否為本級節(jié)點(diǎn);如果是,則向上述內(nèi)存子模塊發(fā)起讀節(jié)點(diǎn)請求,等待上述內(nèi)存子模塊返回節(jié)點(diǎn)信息;如果不是,則保留當(dāng)前節(jié)點(diǎn)信息不變;還用于根據(jù)比較上述節(jié)點(diǎn)信息與鍵值,判斷路由條目是否命中;如果命中,則將命中的路由條目對應(yīng)的結(jié)果記錄替代之前的命中結(jié)果;內(nèi)存子模塊,包括多個獨(dú)立內(nèi)存空間,分別與上述樹結(jié)構(gòu)的每個查找邏輯層相對應(yīng)。
[0056]在圖3中可以看出,查找邏輯區(qū)是硬件查找流水的主要實(shí)現(xiàn)模塊,查找流水共有N+1級,其中LV_1至LV_N為樹節(jié)點(diǎn)查找邏輯層,LV_N+1為結(jié)果表查找邏輯層。每一個查找邏輯層都對應(yīng)了內(nèi)存區(qū)中的一塊獨(dú)立內(nèi)存空間,保證各層對內(nèi)存區(qū)的訪問不會相互沖突。下面對查找邏輯區(qū)的查找流程進(jìn)行介紹,圖4是根據(jù)本發(fā)明實(shí)施例的硬件查找流水的流程示意圖,如圖4所示,該流程包括以下步驟(步驟S401-步驟S410):
[0057]步驟S401,路由查找硬件模塊收到輸入的查找請求。
[0058]步驟S402,將查找鍵值信息和內(nèi)存區(qū)中的根節(jié)點(diǎn)地址信息同時發(fā)送至第一級查找流水中。
[0059]步驟S403,在流水的邏輯中首先對根節(jié)點(diǎn)地址是否為本級節(jié)點(diǎn)進(jìn)行判斷,如果是本級節(jié)點(diǎn),則向內(nèi)存發(fā)起讀節(jié)點(diǎn)請求,等待內(nèi)存返回節(jié)點(diǎn)數(shù)據(jù);如果不是本級節(jié)點(diǎn),貝1J不向內(nèi)存發(fā)起請求,保留當(dāng)前節(jié)點(diǎn)信息不改變。
[0060]步驟S404,將獲得的節(jié)點(diǎn)信息進(jìn)行解析,并與鍵值進(jìn)行比較。
[0061]步驟S405,如果未訪問本級節(jié)點(diǎn),則不需要進(jìn)行解析比較,打拍等待即可。比較的結(jié)果如果存在命中,則將命中的路由條目對應(yīng)的結(jié)果記錄,覆蓋之前命中的結(jié)果。
[0062]步驟S406,如果未訪問本級節(jié)點(diǎn),則不需要進(jìn)行記錄,打拍等待。如果進(jìn)行了比較,則從比較結(jié)果中獲取下一級應(yīng)訪問的節(jié)點(diǎn)地址記錄在節(jié)點(diǎn)地址中;如果未訪問本級節(jié)點(diǎn),保留當(dāng)前節(jié)點(diǎn)信息不改變。
[0063]步驟S407,查找流水?dāng)y帶鍵值信息、節(jié)點(diǎn)地址和命中結(jié)果進(jìn)入下一級流水處理邏輯。
[0064]步驟S408,如果下一級流水不是最后一級,則過程與上述步驟S403-步驟S407流程相同,如果下一級流水是最后一級,則為訪問結(jié)果表的處理邏輯。
[0065]步驟S409,在結(jié)果表流水級中,邏輯將根據(jù)命中結(jié)果(結(jié)果表?xiàng)l目地址)訪問內(nèi)存區(qū)的結(jié)果表,獲得命中實(shí)際結(jié)果;如果未命中,則不訪問結(jié)果表,輸出未命中信息。
[0066]步驟S410,將命中的實(shí)際結(jié)果通過硬件接口返回,如果未命中,返回未命中信息。
[0067]下面通過具體實(shí)施例進(jìn)行詳細(xì)介紹。
[0068]本實(shí)施例包括對路由前綴的插入和刪除流程的描述,假定B-Tree的階數(shù)M為3,每個樹節(jié)點(diǎn)中存在最多2組前綴和3個子節(jié)點(diǎn)指針。
[0069]圖5是根據(jù)本發(fā)明實(shí)施例的路由前綴插入流程示意圖,如圖5所示,初始情況(501),路由表為空,在路由查找硬件模塊的內(nèi)存區(qū)中實(shí)際不存在任何前綴,圖中使用了一個默認(rèn)的空節(jié)點(diǎn)作為示意,處于查找流水的最底層LV_N。此時根節(jié)點(diǎn)地址寄存器可以指向默認(rèn)空節(jié)點(diǎn)地址。
[0070]首先插入4-bit前綴1001,如502所示。該前綴被插入初始節(jié)點(diǎn)的第一個空位,標(biāo)記前綴長度的Vector矢量的第4比特位為1,寫為0001,表示前綴長度為4。同時將對應(yīng)的結(jié)果存放在結(jié)果表地址Al中,并將Al保存在節(jié)點(diǎn)中。
[0071]接著插入前綴1000,如503所示。因?yàn)?000小于1001,所以該前綴被插入初始節(jié)點(diǎn)的第一個空位,標(biāo)記前綴長度的Vector矢量為0001,同時將對應(yīng)的結(jié)果存放在結(jié)果表地址A2中。
[0072]插入前綴1110,如504所示。因?yàn)榇藭r節(jié)點(diǎn)滿了,所以需要進(jìn)行節(jié)點(diǎn)分裂,產(chǎn)生一個新的根節(jié)點(diǎn)和一個新的兄弟節(jié)點(diǎn)。新的根節(jié)點(diǎn)位于LV_N-1層,新的兄弟節(jié)點(diǎn)位于LV_N層。根節(jié)點(diǎn)中存放的是前綴1001/0001/A1,它的左子節(jié)點(diǎn)存放的是前綴1000/0001/A2,右子節(jié)點(diǎn)存放的是前綴1110/0001/A3。此時樹結(jié)構(gòu)上層一層,需要將根節(jié)點(diǎn)地址更新指向新的根節(jié)點(diǎn)(1001所在的節(jié)點(diǎn))。
[0073]插入前綴10**,如505所示。因?yàn)?0**是根節(jié)點(diǎn)中前綴1001的父前綴,我們采用的算法要保持父前綴合并在最上層的子前綴中,因此將10**在前綴1001的Vector上進(jìn)行標(biāo)記。因?yàn)?0**前綴長度為2,因此標(biāo)記1001的Vector的第2比特位為I,此時1001的Vector變?yōu)?101,同時表示了兩種前綴長度(2和4)。將10**對應(yīng)的結(jié)果也存放在Al地址中,此時Al地址中存在兩個查找結(jié)果。
[0074]圖6是根據(jù)本發(fā)明實(shí)施例的路由前綴刪除流程示意圖,如圖6所示,以上述已經(jīng)構(gòu)建的最終插入結(jié)果為刪除流程的初始狀態(tài)(601)。
[0075]首先刪除1000,如602所示。刪除節(jié)點(diǎn)中的1000前綴和結(jié)果表中對應(yīng)地址A2的結(jié)果內(nèi)容。因?yàn)閯h除1000導(dǎo)致節(jié)點(diǎn)變空,需要進(jìn)行節(jié)點(diǎn)合并操作。操作結(jié)果是LV_N-1層的根節(jié)點(diǎn)被刪除,剩下LV_N層的一個節(jié)點(diǎn)作為根節(jié)點(diǎn),其中依次存放的是前綴1001/0101/Al和1110/0001/A3。此時因?yàn)楦?jié)點(diǎn)發(fā)生改變,因此需要將根節(jié)點(diǎn)地址指向新的根節(jié)點(diǎn)。
[0076]接著刪除1001,如603所示。將節(jié)點(diǎn)中的前綴1001刪除,但由于該前綴中還保存在他的父前綴10**,因此不能將該前綴位置空出,而是將該前綴位置的前綴改寫為1000,Vector改寫為0100 (表示前綴長度為2的一個前綴),并將Al地址中1000對應(yīng)的結(jié)果刪除。
[0077]刪除10#,如604所示。將節(jié)點(diǎn)中的前綴1000/0100/A1刪除,并刪除結(jié)果表Al地址的結(jié)果。將前綴1110/0001/A3移動到節(jié)點(diǎn)的第一個位置。
[0078]最后刪除1110,如605所示。將節(jié)點(diǎn)中的前綴1110/0001/A3刪除,并刪除結(jié)果表A3地址的結(jié)果。此時路由表變?yōu)榭铡?br>
[0079]本實(shí)施例中涉及的數(shù)據(jù)格式主要分為節(jié)點(diǎn)數(shù)據(jù)格式、結(jié)果表數(shù)據(jù)格式。節(jié)點(diǎn)數(shù)據(jù)中包括:鍵值、標(biāo)記矢量、結(jié)果表地址、下一級指針?biāo)膫€部分。鍵值為路由表中的路由前綴;標(biāo)記矢量為上述B-Tree算法中的標(biāo)記同一前綴中不同前綴長度條目的標(biāo)記矢量;結(jié)果表地址為本路由條目對應(yīng)的查找結(jié)果在結(jié)果表的地址信息;下一級指針是經(jīng)過本級查找后,下一級應(yīng)訪問的節(jié)點(diǎn)地址。
[0080]本實(shí)施例中涉及的硬件查找結(jié)構(gòu)為自底向上生長的B-Tree樹結(jié)構(gòu)。首先根據(jù)實(shí)際路由表容量需求和延時需求定義出B-Tree的階數(shù)M和B-Tree需要的最大高度N,按照最大高度設(shè)定相應(yīng)的流水級數(shù)N+1 ;然后根據(jù)算法填充情況定義出每層樹結(jié)構(gòu)最大的節(jié)點(diǎn)數(shù)目需求,按照最大節(jié)點(diǎn)數(shù)目設(shè)定相應(yīng)的內(nèi)存空間;最后根據(jù)路由表實(shí)際容量需求設(shè)定結(jié)果表的內(nèi)存空間。
[0081]所謂自底向上生長,就是B-Tree的動態(tài)插入過程中,首個節(jié)點(diǎn)分配在節(jié)點(diǎn)層的最底層LVn (209),同時由于首個節(jié)點(diǎn)為根節(jié)點(diǎn),需要將根節(jié)點(diǎn)的地址寫入根節(jié)點(diǎn)地址內(nèi)存中
(207)。當(dāng)更新路由條目過程中根節(jié)點(diǎn)發(fā)生改變時,需要軟件同步更新根節(jié)點(diǎn)地址,保證查找流水正常工作。
[0082]基于上述分析,本發(fā)明提供了一種路由查找方法,圖7是根據(jù)本發(fā)明實(shí)施例的路由查找方法的流程圖,如圖7所示,該流程包括以下步驟(步驟S702-步驟S704):
[0083]步驟S702,定義B-Tree樹結(jié)構(gòu)的階數(shù)M和最大高度N、每層最大節(jié)點(diǎn)數(shù)目和結(jié)果表?xiàng)l目數(shù),進(jìn)而確定硬件相應(yīng)的流水級數(shù)、每層節(jié)點(diǎn)占用空間和結(jié)果表占用空間,進(jìn)而構(gòu)建B-Tree樹結(jié)構(gòu);
[0084]步驟S704,基于上述B-Tree樹結(jié)構(gòu),執(zhí)行路由查找操作。
[0085]基于上述分析,本發(fā)明提供了一種硬件查找結(jié)構(gòu)為自底向上生長的B-Tree樹結(jié)構(gòu)的構(gòu)建方法,圖8是根據(jù)本發(fā)明實(shí)施例的硬件查找結(jié)構(gòu)為自底向上生長的B-Tree樹結(jié)構(gòu)的構(gòu)建方法的流程圖,如圖8所示,該流程包括以下步驟(步驟S802-步驟S804):
[0086]步驟S802,根據(jù)實(shí)際路由表容量需求和延時需求定義出B-Tree樹結(jié)構(gòu)的階數(shù)M和B-Tree樹結(jié)構(gòu)所需要的最大高度N,按照上述最大高度N設(shè)定相應(yīng)的流水級數(shù)N+1 ;
[0087]步驟S804,根據(jù)算法填充情況定義出B-Tree樹結(jié)構(gòu)的每層最大節(jié)點(diǎn)數(shù)目,按照上述每層最大節(jié)點(diǎn)數(shù)目設(shè)定相應(yīng)的內(nèi)存空間;根據(jù)路由表實(shí)際容量需求設(shè)定結(jié)果表的內(nèi)存空間。
[0088]在本發(fā)明的技術(shù)方案中,路由查找裝置包括路由查找算法軟件模塊、路由更新接口模塊和路由查找硬件模塊三部分。圖9是根據(jù)本發(fā)明實(shí)施例的路由查找裝置的運(yùn)行示意圖,如圖9所示,路由查找算法軟件模塊完成對路由條目的軟件計(jì)算和更新條目指令下發(fā),路由更新接口模塊在接收了更新條目指令之后,根據(jù)路由查找硬件模塊的實(shí)際工作狀態(tài),控制路由查找硬件模塊的數(shù)據(jù)流,并將更新條目寫入路由查找硬件模塊的存儲器中,路由查找硬件模塊為流水線型架構(gòu),響應(yīng)硬件系統(tǒng)的路由查找請求,并返回最長前綴匹配的查找結(jié)果。
[0089]本發(fā)明的具體實(shí)施方法分為如下三步:第一步根據(jù)實(shí)際需求確定B-Tree的樹結(jié)構(gòu)階數(shù)M、樹結(jié)構(gòu)高度N、每層節(jié)點(diǎn)的數(shù)目和結(jié)果表?xiàng)l目數(shù),從而確定硬件相應(yīng)的流水級數(shù)、每層節(jié)點(diǎn)占用空間和結(jié)果表占用空間。第二步根據(jù)第一步的框架來設(shè)計(jì)路由算法軟件模塊、路由更新接口模塊和路由查找硬件模塊。第三步為將將第二步完成的各模塊根據(jù)實(shí)際應(yīng)用場景組合成路由查找系統(tǒng),并連接入路由轉(zhuǎn)發(fā)系統(tǒng)中。
[0090]其中的路由查找算法軟件模塊可以運(yùn)行在路由查找系統(tǒng)的主控CPU上,硬件相關(guān)模塊(路由更新接口模塊和路由查找硬件模塊)可以在現(xiàn)場可編程門陣列(Field-Programmable Gate Array,簡稱為 FPGA)或(Applicat1n Specific IntegratedCircuit,簡稱為ASIC)芯片中實(shí)現(xiàn),并通過實(shí)際應(yīng)用場景中的硬件數(shù)據(jù)接口進(jìn)行連接,例如路由轉(zhuǎn)發(fā)系統(tǒng)中常用的Interlaken-Lookaside接口。軟件模塊和硬件模塊之間的連接可以但不限于通過標(biāo)準(zhǔn)的LocalBus或PCIe接口進(jìn)行連接。
[0091]從以上的描述中可以看出,本發(fā)明的技術(shù)方案從整體上設(shè)計(jì)了路由查找系統(tǒng)的軟件算法模塊、硬件數(shù)據(jù)結(jié)構(gòu)、更新流程、查找流水結(jié)構(gòu)和內(nèi)存結(jié)構(gòu),能夠滿足大容量路由表的高性能查找需求,能夠?qū)崿F(xiàn)硬件流水操作,流水級數(shù)少,并且容量對路由前綴分布不敏感。
[0092]盡管為示例目的,已經(jīng)公開了本發(fā)明的優(yōu)選實(shí)施例,本領(lǐng)域的技術(shù)人員將意識到各種改進(jìn)、增加和取代也是可能的,因此,本發(fā)明的范圍應(yīng)當(dāng)不限于上述實(shí)施例。
【權(quán)利要求】
1.一種路由查找裝置,其特征在于,所述裝置包括:路由查找算法軟件模塊、路由更新接口模塊和路由查找硬件模塊,其中, 路由查找算法軟件模塊,用于執(zhí)行對路由條目的軟件計(jì)算和更新條目指令的下發(fā);路由更新接口模塊,用于在接收到所述路由查找算法軟件模塊下發(fā)的更新條目指令后,根據(jù)路由查找硬件模塊的實(shí)際工作狀態(tài),控制所述路由查找硬件模塊的數(shù)據(jù)流,并將更新條目寫入所述路由查找硬件模塊的存儲器中; 路由查找硬件模塊,用于響應(yīng)硬件系統(tǒng)的路由查找請求,并將最長前綴匹配的查找結(jié)果返回至所述硬件系統(tǒng);其中,所述路由查找硬件模塊為流水線型架構(gòu)。
2.如權(quán)利要求1所述的裝置,其特征在于,所述路由查找算法軟件模塊包括: 插入操作子模塊,用于響應(yīng)路由轉(zhuǎn)發(fā)系統(tǒng)的路由插入指令,并將所述路由條目插入到B-Tree樹結(jié)構(gòu)中; 刪除操作子模塊,用于響應(yīng)所述路由轉(zhuǎn)發(fā)系統(tǒng)的路由刪除指令,并將所述路由條目在所述B-Tree樹結(jié)構(gòu)中刪除; 軟件表項(xiàng)內(nèi)存管理子模塊,用于對路由查找算法中的節(jié)點(diǎn)數(shù)據(jù)和結(jié)果表?xiàng)l目數(shù)據(jù)進(jìn)行管理; 更新硬件操作子模塊,用于將在所述插入操作子模塊的插入操作或所述刪除操作子模塊的刪除操作中涉及到改變的B-Tree樹節(jié)點(diǎn)和結(jié)果表?xiàng)l目記錄在緩存中,并在插入操作或刪除操作結(jié)束后,將樹節(jié)點(diǎn)從軟件數(shù)據(jù)格式轉(zhuǎn)換成硬件數(shù)據(jù)格式,并將轉(zhuǎn)換后的硬件數(shù)據(jù)和對應(yīng)的硬件映射地址通過軟硬件交互接口連續(xù)寫入所述路由更新接口模塊中。
3.如權(quán)利要求1所述的裝置,其特征在于,所述路由查找硬件模塊包括: 查找邏輯子模塊,用于在接收到所述硬件系統(tǒng)的路由查找請求后,將查找鍵值信息和內(nèi)存子模塊中的根節(jié)點(diǎn)地址信息發(fā)送至樹結(jié)構(gòu)的第一級查找流水中;然后判斷所述根節(jié)點(diǎn)地址是否為本級節(jié)點(diǎn);如果是,則向所述內(nèi)存子模塊發(fā)起讀節(jié)點(diǎn)請求,等待所述內(nèi)存子模塊返回節(jié)點(diǎn)信息;如果不是,則保留當(dāng)前節(jié)點(diǎn)信息不變;還用于根據(jù)比較所述節(jié)點(diǎn)信息與鍵值,判斷路由條目是否命中;如果命中,則將命中的路由條目對應(yīng)的結(jié)果記錄替代之前的命中結(jié)果; 內(nèi)存子模塊,包括多個獨(dú)立內(nèi)存空間,分別與所述樹結(jié)構(gòu)的每個查找邏輯層相對應(yīng)。
4.如權(quán)利要求3所述的裝置,其特征在于,所述路由更新接口模塊包括: 緩存子模塊,用于通過所述軟硬件交互接口接收節(jié)點(diǎn)數(shù)據(jù)和結(jié)果表?xiàng)l目數(shù)據(jù)以及對應(yīng)的硬件映射地址; 邏輯處理子模塊,用于根據(jù)所述路由查找硬件模塊的所述查找邏輯子模塊的工作狀態(tài),將所述緩存子模塊的條目更新內(nèi)容更新至所述路由查找硬件模塊的所述內(nèi)存子模塊中。
5.如權(quán)利要求2所述的裝置,其特征在于,所述插入操作子模塊包括: 樹結(jié)構(gòu)管理單元,用于對新條目在所述B-Tree樹結(jié)構(gòu)中的訪問順序進(jìn)行控制; 節(jié)點(diǎn)解析及比較單元,用于與所述樹結(jié)構(gòu)管理單元共同控制新條目在所述B-Tree樹結(jié)構(gòu)中的有序查詢,并找到插入位置; 節(jié)點(diǎn)分裂操作單元,用于在新條目需要插入到已滿節(jié)點(diǎn)時,對該已滿節(jié)點(diǎn)進(jìn)行分裂操作; 結(jié)果表更新單元,用于將新條目攜帶的結(jié)果信息存入結(jié)果表,并將該結(jié)果信息的地址記錄在所述新條目所在節(jié)點(diǎn)的對應(yīng)位置中。
6.如權(quán)利要求2所述的裝置,其特征在于,所述軟件表項(xiàng)內(nèi)存管理子模塊包括: 軟件節(jié)點(diǎn)管理單元,用于管理路由查找算法中的節(jié)點(diǎn)分配,通過內(nèi)存管理算法迅速分配和管理軟件節(jié)點(diǎn); 軟件結(jié)果表管理單元,用于管理路由查找算法中的結(jié)果表的條目地址分配,通過內(nèi)存管理算法快速分配和管理結(jié)果表; 硬件地址映射管理單元,用于將硬件的實(shí)際內(nèi)存空間進(jìn)行軟件地址映射,通過軟件的內(nèi)存管理算法管理硬件節(jié)點(diǎn)和結(jié)果表;其中,軟件節(jié)點(diǎn)與硬件節(jié)點(diǎn)一一對應(yīng),軟件結(jié)果表與硬件結(jié)果表一一對應(yīng)。
7.—種路由查找方法,其特征在于,包括: 定義B-Tree樹結(jié)構(gòu)的階數(shù)M和最大高度N、每層最大節(jié)點(diǎn)數(shù)目和結(jié)果表?xiàng)l目數(shù),進(jìn)而確定硬件相應(yīng)的流水級數(shù)、每層節(jié)點(diǎn)占用空間和結(jié)果表占用空間,進(jìn)而構(gòu)建B-Tree樹結(jié)構(gòu); 基于所述B-Tree樹結(jié)構(gòu),執(zhí)行路由查找操作。
8.一種硬件查找結(jié)構(gòu)為自底向上生長的B-Tree樹結(jié)構(gòu)的構(gòu)建方法,其特征在于,所述方法包括: 根據(jù)實(shí)際路由表容量需求和延時需求定義出B-Tree樹結(jié)構(gòu)的階數(shù)M和B-Tree樹結(jié)構(gòu)所需要的最大高度N,按照所述最大高度N設(shè)定相應(yīng)的流水級數(shù)N+1 ; 根據(jù)算法填充情況定義出B-Tree樹結(jié)構(gòu)的每層最大節(jié)點(diǎn)數(shù)目,按照所述每層最大節(jié)點(diǎn)數(shù)目設(shè)定相應(yīng)的內(nèi)存空間;根據(jù)路由表實(shí)際容量需求設(shè)定結(jié)果表的內(nèi)存空間。
【文檔編號】H04L12/741GK104426770SQ201310408340
【公開日】2015年3月18日 申請日期:2013年9月9日 優(yōu)先權(quán)日:2013年9月9日
【發(fā)明者】程晨, 李彧, 張煒, 徐寶魁, 陳偉, 孫遠(yuǎn)航 申請人:中興通訊股份有限公司