專利名稱::基于網絡處理器的路由查找結果緩存方法
技術領域:
:本發明是一種利用網絡處理器的存儲器組織結構,對路由查找結果進行緩存的方法,可以提高網絡設備中報文處理的速度,屬于計算機
技術領域:
。
背景技術:
:網絡處理器屬于專用處理器的一種,通常應用于靈活高速的數據包處理。它結合了ASIC和通用CPU的優勢,具有能夠縮短路由器的開發周期和延長網絡設備的生存周期的優點。一些廠商已經陸續推出了各類網絡處理器產品。為了達到預期的目的,這些設計往往采用了與通用處理器截然不同的體系結構。比如,最為常見的做法就是將多個基于精簡指令集(RISC)的處理單元集成在同一塊芯片上,并且使用經過優化的專用指令集。另外一個廣泛使用的架構是將通用處理器中層次式的存儲器結構改為并列式,所有存儲單元均對程序員可見并且由軟件控制,用來減少層次式的存儲器結構中由硬件控制的高速緩沖存儲器所導致的訪問時間不確定性,以適應網絡處理半實時性的需求。網絡處理器主要應用于路由器等網絡設備,而路由器的主要功能之一就是進行路由查找并根據查找結果對數據包進行轉發。現有的網絡處理器設計往往偏重于滿足路由器日益增長的對復雜操作的需求,因此,靈活性雖然很高,但是對高效地完成路由查找等基本操作缺乏支持。目前很多比較流行的網絡處理器,如IntelIXP系列,其路由查找的功能依賴于外接的TCAM器件或者專用的路由查找協處理器。盡管這些器件吞吐量很高并且具有確定性的訪問延遲,但它們價格昂貴,并且功耗和散熱量都很大,因此線卡的設計復雜且成本極高。這使得這種方案非常不適合于以低成本為首要考慮因素的中低端路由器和以功耗和線卡所占空間為首要因素的移動設備。所以,一種能夠由網絡處理器自身來完成的有效的路由查找機制就顯得極為重要。路由查找算法經過了較長時間的研究,目前已經比較成熟。比如基于多比特樹(multi-bittrie)的算法,簡單高效并且適合硬件實現。P.Gupta等人在文獻[1]中設計了一種特殊的multi-bittrie算法,即根據路由表中前綴長度的分布,將trie分為長度為24和8的兩級。由于絕大多數前綴都不大于24位,該算法在大多情況下只需要一次路由表的訪問,個別時候需要兩次。它主要的缺點是路由表占用的空間較大,可多達幾十MB。但是目前大部分網絡處理器都支持較大的地址空間,比如IntelIXP2400可外接2GB的DRAM。因此,該算法是比較適合在網絡處理器中使用的。然而,由于多處理單元共享存儲器所導致的排隊和調度等因素,使得訪問外部大容量存儲單元的延遲通常較大,在一些工作頻率較高的網絡處理器中甚至可多達200多個周期。另外一方面,盡管網絡處理器提供了多線程等延遲隱藏機制用于減少并列式存儲器結構缺乏硬件控制高速緩沖存儲器所帶來的影響,但網絡流量高突發性和尤其在中低速流量中更為明顯的低并行性,往往使得多線程不能很好地發揮作用。因此需要一種方法,使其能夠在充分利用網絡處理器現有的存儲結構的基礎上,有效地降低返回路由查找結果所需的時間。由于網絡流量中數據包的目的IP地址之間具有較強的時間局部性,即同樣的目的IP地址在一段時間內會反復出現,路由查找結果的緩存是一項在各類平臺和背景下廣泛被采用的技術。在一些設備中會使用專門設計的硬件,稱為路由查找結果高速緩沖存儲器(routecache)[2]。但是這些硬件無法在已經制成產品的網絡處理器中使用。Tzi-ckerChiueh等人曾經為通用處理器設計過一種加速路由查找過程的算法[3]。但該算法主要利用的是通用處理器中容量較大且硬件控制的高速緩沖存儲器,這在網絡處理器中是不具備的。P.Gupta,S.Lin,andN.McKeown.RoutingLookupsinHardwareatMemoryAccessSpeeds.ProceedingsofIEEEINFOCOM’98,pp.1240-1247,April1998.HuanLiu.RoutingPrefixCachinginNetworkProcessorDesign.ProceedingsoftheTenthInternationalConferenceonComputerCommunicationsandNetworks(ICCCN’01),pp.18-23,2001.Tzi-ckerChiueh,andPrashantPradhan.High-PerformanceIPRoutingTableLookupUsingCPUCaching.ProceedingsofIEEEINFOCOM’99,vol.3,pp.1421-1428,1999.
發明內容本發明的目的在于提高網絡處理器中路由查找算法的效率,使得它既能夠在較短的時間內返回查找結果從而給其他應用留出更充足的時間,同時又能減少完成同樣功能所需要的芯片的種類和數量,以降低線卡所占用的空間、所需功耗和設計復雜度,進而降低其成本。本發明充分利用了目前比較流行的網絡處理器地址空間由片上容量較小但訪問延遲低的存儲器和片外容量較大但訪問延遲較大的存儲器構成、且缺乏硬件支持的高速緩沖存儲器(cache)的特點,將片上高速存儲器的一部分劃分出來,由軟件來維護一個路由查找結果緩存表,同時在片外低速存儲器中建立路由表。由于網絡流量中數據包的目的IP地址之間具有較強的時間局部性,即同樣的目的IP地址在一段時間內會反復出現,所以有可能通過僅維護少量目的IP地址的查找結果來降低實際所需要的片外低速存儲器訪問次數、提高路由查找的效率。每個需要進行查找的目的IP地址被接收后,先在該緩存表中通過哈希進行快速的查找。如果其結果已經在該表內存在則直接返回該結果,并對緩存表的結構進行相應的調整,以期在以后的查找中能盡快地返回所需結果。否則的話,才對保存在片外低速存儲器中的路由表進行查找,其結果除了返回給應用程序外,還會寫回路由查找結果緩存表。哈希函數的選擇需要既能使從目的IP地址在緩存表中的分布足夠均勻,從而減少沖突的概率,又能通過簡單的幾條指令就可獲得索引號,縮短處理所需的時間。當路由表的內容發生改變時,需要對路由查找結果緩存表中受到影響的表項進行改變。路由查找結果緩存表模擬通用處理器中高速緩沖存儲器結構,也具有標志位、標簽(tag)以及緩存結果等內容。根據表項組織方式的不同,也分為直接相聯、多路組相聯等形式;同時由于軟件的靈活性,還能在多路組相聯緩存表中較為輕松地實現“最近最少使用”(LeastRecentlyUsed,LRU)等效果較好但難于用硬件實現的替換策略。網絡處理器通常提供了針對網絡應用進行了優化的指令集,諸如位操作、表操作等特殊指令可以使本發明高效地在網絡處理器中實現。本發明的特征在于,該方法在所述網絡處理器中依次按照以下步驟執行步驟0初始化步驟0.1在所述網絡處理器的片上高速存儲器內建立并維護一個路由查找結果緩存表,該路由查找結果緩存表以組為基本單位,每個組內含有若干表項,各組含有的表項數目相等,每個表項都與一個目的IP地址相對應;所述每個表項含有一個與目的IP地址對應的下一跳IP地址所在的端口號,即該目的IP地址的路由查找結果,用于表示表項是否有效的標志位,以及用于確定表項是否與接收到的目的IP地址匹配的標簽信息D’;所述端口號的位寬由該網絡處理器所支持的下一跳IP地址的個數決定;所述端口號、標志位以及標簽信息在表項中的位置由編程人員自由設定,一旦設定后,在所有的表項中都是統一的;步驟0.2在所述網絡處理器的片外低速存儲器內建立用于完成路由查找的數據結構,比如,一種實現方法是在所述片外低速存儲器內為路由表建立一個trie樹,當路由查找結果緩存表中沒有任何表項匹配的時候,就使用該trie樹,進行完整的路由查找,并返回查找的結果;步驟1對所述網絡處理器收到的目的IP地址進行哈希運算,得到要進行匹配操作的路由查找結果緩存表的組的索引號,也即該被索引組的第一個表項在片上高速存儲器中的地址,一種可能的哈希運算是將所述目的IP地址中的低位部分字段不加變化地直接提取出來,作為索引號的一部分,然后對所述目的IP地址中的其他字段進行諸如異或等的操作后,將生成的結果作為索引號的其他部分;步驟2讀取所述被索引組中的第一個表項,將表項的內容保存入寄存器R;步驟3檢查所述寄存器R中的表項內容,確定該表項的標志位是否有效,如果無效,則執行步驟4,否則,跳轉至步驟6;步驟4檢查所述被索引組內是否所有表項都已經檢查完畢,如果不是,則執行步驟5,否則,跳轉至步驟10;步驟5讀取所述被索引組中下一個未檢查的表項,將表項的內容保存入寄存器R,跳轉至步驟3;步驟6根據所述目的IP地址,計算得到標簽D,如果采用的是步驟1中所述的哈希函數,由于IP地址中有部分字段被直接提取并用作索引號的一部分,那么路由查找結果緩存表表項中的標簽信息D’只需要保存IP地址中除該字段以外的部分,標簽D也由所述目的IP地址中未被直接提取用作索引號的部分構成;步驟7將步驟6中計算得到的標簽D與所述寄存器R中所保存表項的標簽信息D’進行比對,檢查是否一致,如果一致,稱該寄存器R中的表項為匹配表項,執行步驟8,否則,跳轉至步驟4;步驟8如果路由查找結果緩存表的每個組內只有一條表項,或者匹配表項是路由查找結果緩存表中該組的第一條表項,則組內表項順序不需要調整,執行步驟14;否則,執行步驟9;步驟9將路由查找結果緩存表中該組內該匹配表項之前的所有表項順次向后移動一個位置,則該匹配表項所在的位置被原來位于該匹配表項之前的那個表項所覆蓋,然后將該組內的第一條表項用該匹配表項的內容的取代,跳轉至步驟14;步驟10對片外低速存儲器中保存的路由表進行完整的路由查找,得到查找的結果,即與下一跳IP地址對應的端口號;步驟11如果路由查找結果緩存表的每個組內只有一條表項,跳轉至步驟13;否則,執行步驟12;步驟12將路由查找結果緩存表中該組內所有的表項順次向后移動一個位置,刪除最后一條表項;步驟13將步驟10返回的路由查找結果作為新表項的端口號,將步驟6中計算得到的標簽D作為新表項的標簽信息D’,將該新表項的標志位設置為有效,然后將該新表項作為路<p>W0是管理平面靜態配置的鏈路代價,例如10;α是調整因子,如果鏈路具有固有保護能力,α=0,否則α=1;W1是鏈路代價的調整粒度,可以根據網管的靜態配置和網絡拓撲規模等因素選擇適當的值,例如100。調整前后的鏈路代價,如表1所示表1.如果采用上述方式調整鏈路代價,那么最短路徑算法求解得到的路徑是A-B-C-Z,即圖2中所示的P1。3.按照圖1所示方法步驟三,檢查計算結果P2,逐鏈路都受到光網絡底層固有保護機制的保護,A-B是1+1保護,B-C是復用段共享保護,C-Z是1+1保護,求解得到的P1路徑充分利用了傳輸網絡底層固有的保護機制,并且保護是完善的,算法結束。以圖3所示的拓撲環境為例,說明本發明如何通過調整鏈路代價為需要保護的業務求解滿足無關性要求(節點無關或者是鏈路無關)的工作路徑和保護路徑。具體的處理流程是這樣的1.按照圖1所示方法步驟一,接收到路由查詢請求,確定路徑選擇的源是A節點,目的是Z節點。2.按照圖1所示方法步驟二,在采用最短路徑算法求解的過程中,根據鏈列式存儲器結構,即片上高速存儲器與片外低速存儲器的地位完全一樣,不僅構成地址空間,且不受硬件的控制,對程序員完全可見,其數據的存儲和移動完全由程序員來控制。本發明將片上高速存儲器的一部分劃分出來,由軟件來維護一個路由查找結果緩存表,同時在片外低速存儲器中用一些簡單高效但有可能耗用較多空間的算法建立路由表。比如,可以采用P.Gupta等人在文獻[1]中設計的24-8兩級表的方法,這種方法需要很大的存儲空間來維護路由表,但每個目的IP地址最多需要兩次路由表的訪問,大多數情況下僅需一次路由表的訪問就可以得到路由查找的結果。路由查找緩存表的每個表項記錄一個目的IP地址的路由查找結果。路由查找結果緩存表的組織結構以組為單位,每個組內可能含有若干表項,各組含有的表項數相等。與高速緩沖存儲器中的概念相對應,我們將每組內只含有一個表項的稱為直接相聯,每組內含2個表項的稱為2路組相聯,依此類推。為了存儲管理的方便,組內含有的表項數為2的冪次。目的IP地址有32位,而片上高速存儲器通常只有十幾KB,因此路由查找結果緩存表內含有的表項總數遠遠少于實際所需的,即232個表項。圖2顯示了一個具有1024個組的2路組相聯路由查找結果緩存表及其查找過程的基本框圖。假如每個表項需要4個字節,那么該路由查找結果緩存表2-2就需要占用片上高速存儲器2-1中8KB的存儲空間。當一個目的IP地址收到時,使用該32位的數據進行一次哈希運算,得到一個10位的索引號,然后就可以使用該索引號檢索到路由查找結果緩存表中對應的組。假設該組為圖2中的組2-I,包含兩個表項2-I-1和2-I-2。對這兩個表項進行檢查,如果發現匹配,就將該表項中保存的查找結果返回。如果兩個表項均未匹配,則引發一個缺失。此時,就會完整地使用路由查找算法,在片外低速存儲器中保存的路由表中檢索到結果。該結果除了返回給應用程序外,還會寫回到路由查找結果緩存表,供后來接收到的IP地址使用。在實際使用的網絡中,路由的變更是比較頻繁的。路由器會接收到大量路由刷新消息,并由其控制平面將這些消息綜合分析后,把最終的修改通知路由表和路由查找結果緩存表。因此,原來有效的查找結果可能會在某次路由刷新后不再有效。因此,路由查找結果緩存表的每個表項中需要一個標志位,用來表示該表項是否有效。盡管路由查找的結果最終表現為IP地址(稱為下一跳IP地址),但由于同一個路由器所連接的不同主機不可能太多,因此可以將所連接主機的IP地址簡單地映射為一個端口號。另外,由于會出現若干個不同的目的IP地址經過哈希以后映射到同一個表項的情況。為了區分,每個表項中除了記錄作為路由查找結果的端口號外,還需要保存IP地址的信息,稱為標簽,用D’表示。在實際使用的時候,標志位、標簽D’和端口號這三部分在表項中的位置是可以任意設定的。圖3顯示了一種可能的表項構成方式。由于片上高速存儲器通常按照字(32位)組織,其與處理單元內的寄存器的通信也以字為單位,為了節省訪問到必要信息的時間開銷,可以將每個表項的大小限制為一個字。每個表項的最高位為標志位(標記為V),當為“1”時有效。表項的低7位作為端口號,這樣該網絡處理器可以支持128個不同的下一跳IP地址。剩下的空間即可用來保存標簽信息。在圖3的例子中,由于標志位和端口號已經占用了部分比特,并非所有的目的IP地址字段都可以保存在表項內,因此在目的IP地址進行哈希的過程,需要有一定數量的比特位保持不變,以索引的形式反映出來。與此同時,路由查找結果緩存表至少要維持一定數量的組,才能保證目的IP地址信息不丟失。以圖3為例,共有8位被占用,那么目的IP地址中應該至少有8位保持不變,用來作為索引的一部分。而路由查找結果緩存表也至少需要維持28=256個組。此時目的IP地址中剩下的24位,就可以用來與保存在路由查找結果緩存表表項中的標簽進行比較,來確定是否匹配。為了區別,可以將進行路由查找結果緩存表檢索時,目的IP地址用來與表項中標簽進行比對的部分稱為標簽D’。多路組相聯結構的路由查找結果緩存表由于利用了不同數據包的目的IP地址之間的空間局部性,其命中率較直接相聯方式為高。網絡處理器中通常是沒有并行比較機制的,因此組內表項的比較往往需要逐個進行,直到發現匹配表項或所有的表項都已耗盡為止。假如第一個表項就發生匹配,那么此時軟件的開銷最低。實驗表明,剛剛出現過的目的IP地址最有可能再次出現,而最久未出現的IP地址則最不可能再次出現。因此,路由查找結果緩存表的替換策略以LRU(LeastRecentlyUsed)為最優。該替換策略在路由查找結果緩存表中一種可能的實現為每次發生匹配時,假如匹配表項是該組的第一個表項,那么組內表項順序不需要調整;否則的話,將位于該匹配表項之前的所有表項順次向后移動一個位置,然后將匹配表項寫為該組的第一個表項,這樣就可以使得第一個表項的內容是最近剛出現的目的IP地址,而最后一個表項是最久未出現的目的IP地址;當發生缺失時,最后一個表項被驅逐出該組,其他表項順次向后移動一個位置,然后將新返回的結果寫為該組的第一個表項,這樣,最久未出現的目的IP地址就被替換了。圖4顯示了使用路由查找結果緩存表進行檢索的流程圖,其具體的步驟如下1、對接收到的目的IP地址進行哈希運算,得到路由查找結果緩存表中的組的索引號,也就是該被索引組中第一個表項的位置。4-12、讀取該表項的內容。4-23、根據該表項的標志位,確定表項是否有效;如果無效,則繼續,否則,跳轉至步驟6。4-34、檢查該被索引組內是否所有表項都已經檢查完畢;如果不是,則繼續,否則,跳轉至步驟10。4-45、移動到下一個未檢查的表項,跳轉至步驟2。4-56、根據目的IP地址,計算得到標簽D。4-67、將標簽D與表項內保存的標簽D’進行比對,檢查是否一致;如果一致,則繼續,否則,跳轉至步驟4。4-78、根據替換策略,檢查是否需要對該被索引組內表項的順序進行調整;如果需要,則繼續,否則,跳轉至步驟14。4-89、根據替換策略,將路由查找結果緩存表中該組內該匹配表項之前的所有表項順次向后移動一個位置,則該匹配表項所在的位置被原來位于該匹配表項之前的那個表項所覆蓋,然后將該組內的第一條表項用該匹配表項的內容的取代,跳轉至步驟14。4-910、對片外低速存儲器中保存的路由表進行完整的路由查找,得到查找的結果,即與下一跳IP地址對應的端口號。4-1011、確定組內是否有多條表項;如果是,則繼續,否則,跳轉至步驟13。4-1112、根據LRU的替換策略,將組內表項順次下移,刪除最后一個表項。4-1213、將查找結果以及標簽D組成的新表項,作為組內的第一條表項寫回。4-1314、返回路由查找結果。4-14哈希函數的選擇是一個比較關鍵的問題。這是因為哈希函數決定了目的IP地址在緩存表中的分布,并且每個數據包都要經過這樣一次計算。該操作位于關鍵路徑上,需要選擇簡單高效的算法,使得一方面能使從目的IP地址到索引號的映射足夠均勻,從而減少沖突的概率,降低路由查找操作發生的頻率,另一方面又能通過簡單的幾條指令就可以獲得索引號,縮短處理所需的時間。對于目的IP地址在哈希變換中保持不變的部分,應該選擇那些被置為“1”和“0”的概率差不多相等的字段。索引號中并非由目的IP地址中的字段直接得到的部分,則可以由整個目的IP地址或者其中的某一部分經過運算得到。由于本發明中所使用的哈希函數完全由軟件來實現,因此可以根據實際的流量來進行調整,以使緩存表的命中率達到最大。圖5顯示了一種可能的哈希函數計算方法以及標簽的構成。具體來說片上高速存儲器5-1中保存了一個具有1024個組的2路組相聯路由查找結果緩存表5-2。該表的表項長度為32位,并具有如圖3所示的構成方式。假設網絡處理器以字(32位)為單位進行尋址,并且該路由查找結果緩存表的起始地址保存一個稱為基地址5-5的寄存器中。由于該路由查找結果緩存表具有1024個組,因此,其索引號5-4需要有10位,記為Index[9..0]。由于每個路由查找結果緩存表表項中的標簽僅有24位,因此,目的IP地址5-3中至少要有8位保持不變,并作為索引號的一部分。在本例中,目的IP地址5-3的第15到第8位保持不變(即圖5中的DIP[15..8]),作為索引號5-4的低位部分(即Index[7..0]);索引號5-4的高位部分(即Index[9..8])由DIP[19..18]和DIP[17..16]經過按位異或5-6產生。由于路由查找結果緩存表的每個組包含兩個表項,而網絡處理器又按照字來尋址,因此,索引號5-4必須乘以2(乘法操作5-8和操作數5-7)以后才能得到被索引組相對于路由查找結果緩存表起始地址的偏移量。然后將該偏移量與基地址5-5相加(加法操作5-13),才能得到被索引組的地址。在圖5中,假設被索引到的組為組5-9。標簽D,即5-10由除DIP[15..8]以外的其他比特,即DIP[31..16]和DIP[7..0]連接起來構成。假如組5-9中的表項1,即5-9-1有效,標簽D,即5-10,將與該表項中的標簽D’進行比較(比較操作5-11)。假如表項1,即5-9-1,無效或者比較結果不同(稱為未匹配),那么將檢查表項2,即5-9-2;如果表項2,即5-9-2有效,那么標簽D,即5-10將繼續與該表項中的標簽D’進行比較(比較操作5-12)。針對網絡應用的特點對指令集進行優化是網絡處理器設計中經常采用的技術。網絡處理中頻繁出現的操作被提取出來,由專用的硬件或者指令來完成,以提高代碼執行的效率。對于本發明來說,一些在網絡處理器中被廣泛采用的特殊指令可以用來縮短程序的長度,節省處理的時間。比如,對位操作的支持就可以大大簡化算法中哈希函數的運算和標簽的生成。這類指令的例子包括IntelIXP1200中的LD_FIELD和LD_FIELD_W_CLR指令,可以將字節加載到寄存器的指定字段中。還有一類指令,可以稱為表操作,除了可以指定基地址和偏移量外,還可以指定要讀入字段的起始地址和字的個數;然后,片上高速存儲器的控制器就能以突發的方式將指定字段讀出,并寫入處理單元中編號相連的寄存器。以下是幾條經常會被網絡處理器采用的優化指令BLOADRdest,Rsrc,@sst_b,@length,@dst_b;該指令是一條字段提取指令,將源寄存器Rsrc中從第@sst_b位開始的@length個比特,寫入目的寄存器Rdest中從第@dst_b位開始的部分。由于寄存器一般只有32位,因此用來表示字段的起始位置和長度的數字只需要5位。為了區別這些與字段相關的數字,我們在它們前面加上@,而一般的操作數,則沒有這個@符號。BCMPRa,Rb,@st_b,@length;這是一條與位操作相關的算術運算指令,將寄存器Ra和Rb中從第@st_b位開始的@length個比特進行比較,并將結果寫入特殊用途寄存器中,用來進行跳轉等操作。TABLE_SEARCHRresult,Rbase,Rindex,@length;這是一條表相關指令,將地址空間中從位置Rbase+Rindex開始的@length個字,寫入到以Rresult開始的@length個連續的寄存器中。TABLE_MODIFYRsrc,Rbase,Rindex,@length;該指令與上一條指令相反,將從Rsrc開始的@length個連續的寄存器中的內容,寫入到地址空間中從位置Rbase+Rindex開始的@length個字。以下顯示了本發明用針對網絡處理器優化后的指令編寫的代碼;該程序是采用圖5中的具有1024個組的2路組相聯路由查找結果緩存表及其哈希算法所進行的結果檢索和緩存表維護算法;當程序開始執行時,路由查找結果緩存表的基地址、以及目的IP地址已經分別保存Rbase和RDIP中了。/*路由查找結果緩存表的查找與維護*//*將保存在寄存器RDIP中目的IP地址的第15到第8位,即DIP[15..8]寫入寄存器Rindex,作為索引的低8位,即Index[7..0]*/BLOADRindex,RDIP,@0x0F,@0x08,@0x07;/*將目的IP地址右移兩位保存在寄存器R1中,使DIP[19..18]與DIP[17..16]對齊*/R_SHIFTR1,RDIP,@0x02;/*進行異或操作*/XORR1,RDIP,R1;/*將R1中的第17到第16位,即DIP[19..18]與DIP[17..16]異或的結果寫入R1從第9位開始的地方*/BLOADR1,R1,@0x11,@0x02,@0x09;/*將R1與Rindex合并,獲得最終的索引號*/ANDRindex,Rindex,R1;/*將索引號左移3位,獲得偏移量*/L_SHIFTRindex,Rindex,@0x03;/*將DIP[31..16]寫入寄存器Rtag的第30到第15位*/BLOADRtag,RDIP,@0x1F,@0x10,@0x1E;/*將DIP[7..0]寫入寄存器R1的第14到第7位*/BLOADR1,RDIP,@0x07,@0x08,@0x0E;/*將兩部分合并,形成標簽D*/ORRtag,Rtag,R1;/*將標志位置為有效*/ANDRtag,Rtag,0x80000000;/*以Rbase的內容作為基地址,將Rindex中的內容作為偏移量,將片上高速存儲器中的兩個字讀入寄存器Rresult及其相鄰的寄存器,記為Rresult2*/TABLE_SEARCHRresult,Rbase,Rindex,@0x02;/*將返回結果中的標志位與標簽D’部分,即第31到第7位,與Rtag進行比較*/BCMPRtag,Rresult,@0x1F,@0x19;/*如果匹配的話,則跳轉到report開頭的語句*/EQreport;/*否則,檢查第二個表項*/BCMPRtag,Rresult2,@0x1F,@0x19;/*如果匹配,則跳轉到change開頭的語句*/EQexchange;/*否則,產生缺失,進行路由查找操作,返回的結果寫在寄存器Rport中*/performoff-chiproutetablesearch;/*表項下移*/ANDRresult2,Rresult,0x00000000;/*寫入新的內容*/ANDRresult,Rtag,Rport;/*將調整過的表項寫回緩存表*/TABLE_MODIFYRresult,Rbase,Rindex,@0x02;/*返回*/JUMPdone;exchange/*交換Rresult和Rresult2的內容*/ANDR1,Rresult,0x00000000;ANDRresult,Rresult2,0x00000000;ANDRresult2,R1,0x00000000;/*將交換過的表項寫回緩存表*/TABLE_MODIFYRresult,Rbase,Rindex,@0x02;report/*將緩存的結果,即Rresult的低7位寫入寄存器Rport*/ANDRport,Rresult,0x0000007F;/*返回*/JUMPdone。權利要求1.基于網絡處理器的路由查找結果緩存方法,其特征在于,該方法在所述網絡處理器中依次按照以下步驟執行步驟0初始化步驟0.1在所述網絡處理器的片上高速存儲器內建立并維護一個路由查找結果緩存表,該路由查找結果緩存表以組為基本單位,每個組內含有若干表項,各組含有的表項數目相等,每個表項都與一個目的IP地址相對應;所述每個表項含有一個與目的IP地址對應的下一跳IP地址所在的端口號,即該目的IP地址的路由查找結果,用于表示表項是否有效的標志位,以及用于確定表項是否與接收到的目的IP地址匹配的標簽信息D’;所述端口號的位寬由該網絡處理器所支持的下一跳IP地址的個數決定;所述端口號、標志位以及標簽信息在表項中的位置由編程人員自由設定,一旦設定后,在所有的表項中都是統一的;步驟0.2在所述網絡處理器的片外低速存儲器內建立用于完成路由查找的數據結構,比如,一種實現方法是在所述片外低速存儲器內為路由表建立一個trie樹,當路由查找結果緩存表中沒有任何表項匹配的時候,就使用該trie樹,進行完整的路由查找,并返回查找的結果;步驟1對所述網絡處理器收到的目的IP地址進行哈希運算,得到要進行匹配操作的路由查找結果緩存表的組的索引號,也即該被索引組的第一個表項在片上高速存儲器中的地址,一種可能的哈希運算是將所述目的IP地址中的低位部分字段不加變化地直接提取出來,作為索引號的一部分,然后對所述目的IP地址中的其他字段進行諸如異或等的操作后,將生成的結果作為索引號的其他部分;步驟2讀取所述被索引組中的第一個表項,將表項的內容保存入寄存器R;步驟3檢查所述寄存器R中的表項內容,確定該表項的標志位是否有效,如果無效,則執行步驟4,否則,跳轉至步驟6;步驟4檢查所述被索引組內是否所有表項都已經檢查完畢,如果不是,則執行步驟5,否則,跳轉至步驟10;步驟5讀取所述被索引組中下一個未檢查的表項,將表項的內容保存入寄存器R,跳轉至步驟3;步驟6根據所述目的IP地址,計算得到標簽D,如果采用的是步驟1中所述的哈希函數,由于IP地址中有部分字段被直接提取并用作索引號的一部分,那么路由查找結果緩存表表項中的標簽信息D’只需要保存IP地址中除該字段以外的部分,標簽D也由所述目的IP地址中未被直接提取用作索引號的部分構成;步驟7將步驟6中計算得到的標簽D與所述寄存器R中所保存表項的標簽信息D,進行比對,檢查是否一致,如果一致,稱該寄存器R中的表項為匹配表項,執行步驟8,否則,跳轉至步驟4;步驟8如果路由查找結果緩存表的每個組內只有一條表項,或者匹配表項是路由查找結果緩存表中該組的第一條表項,則組內表項順序不需要調整,執行步驟14;否則,執行步驟9;步驟9將路由查找結果緩存表中該組內該匹配表項之前的所有表項順次向后移動一個位置,則該匹配表項所在的位置被原來位于該匹配表項之前的那個表項所覆蓋,然后將該組內的第一條表項用該匹配表項的內容的取代,跳轉至步驟14;步驟10對片外低速存儲器中保存的路由表進行完整的路由查找,得到查找的結果,即與下一跳IP地址對應的端口號;步驟11如果路由查找結果緩存表的每個組內只有一條表項,跳轉至步驟13;否則,執行步驟12;步驟12將路由查找結果緩存表中該組內所有的表項順次向后移動一個位置,刪除最后一條表項;步驟13將步驟10返回的路由查找結果作為新表項的端口號,將步驟6中計算得到的標簽D作為新表項的標簽信息D’,將該新表項的標志位設置為有效,然后將該新表項作為路由查找結果緩存表中被索引組內的第一條表項寫回;步驟14向應用程序返回路由查找結果。全文摘要基于網絡處理器的路由查找結果緩存方法屬于計算機領域,其特征在于在網絡處理器的片上高速存儲器中建立并維護一個路由查找結果緩存表,每個需要查找的目的IP地址被網絡處理器接收后,先在該緩存表中通過哈希函數進行快速查找,若其結果已存在于該緩存表中,則直接返回路由查找結果,并對緩存表的表項按最近最少使用的原則進行順序的調整,以期在后續查找中能盡快地得到結果;否則,才對保存在片外低速存儲器中的路由表進行查找,其結果在返回給應用程序的同時,還要寫回路由查找結果緩存表。本發明減少了由路由查找而引發的片外低速存儲器的訪問次數、以及對存儲器帶寬的占用。文檔編號H04L29/06GK1863169SQ20061008370公開日2006年11月15日申請日期2006年6月2日優先權日2006年3月3日發明者劉禎,劉斌申請人:清華大學