專利名稱:分配存儲器的方法和設備的制作方法
技術領域:
本發(fā)明一般涉及網絡處理器,特別是涉及為網絡處理器分配存儲器的方法和設備。
背景技術:
諸如網絡處理器之類的硬件可以連接存儲器,接收數據集并且將該數據集存儲到存儲器中??梢岳米兂叽绲慕M表目(group entry)(例如,組合在一起的存儲器的一個或多個表目)把數據集的諸多部分存儲到存儲器中。為了建立變尺寸的組表目,存儲器可以分成一個或多個區(qū)域,其每個區(qū)域在接收任何數據之前被分配一個尺寸。分配給存儲器區(qū)域的尺寸基于由硬件預期接收的數據集的尺寸。
如果預期接收的數據實際上被硬件接收,則基于預期接收的數據,將分配給存儲器每個區(qū)域的尺寸也許是足夠的。但是,如果硬件接收一組不同數據,則其中的數據集的部分必須存儲在不同于預期數據集的尺寸的組表目中,這種預分配給存儲器區(qū)域的尺寸可能導致存儲器的效率低下的分配。
例如,基于由硬件預期接收的數據集,存儲器的一個區(qū)域被預分配尺寸四,存儲器的剩余區(qū)域可以被預分配為十六的尺寸。因此,存儲器的一個區(qū)域包括尺寸為四的組表目(例如,每個組表目包括被組合在一起的四個單存儲器表目)以及存儲器的剩余區(qū)域包括尺寸為十六的組表目(每個組表目包括被組合在一起的十六個單存儲器表目)。如果預期的數據集被硬件接收,則數據集的大多數部分可以被存儲在十六表目的組表目中。但是,如果硬件接收不同于預期數據集的一組數據,該數據集的所有部分可以被存儲在四表目(four-entry)的組表目中,則存儲器的組表目也許被效率低下地分配。由于存儲器僅僅包括四表目的組表目的一個區(qū)域,一旦四表目的組表目被用來存儲數據集的多個部分,則十六表目的組表目必須用來存儲數據集的剩余的部分。因此,用來存儲數據集的十六表目的組表目中的每個的一部分將未被使用,因而存儲器被效率低下的分配。
所以,為網絡處理器分配存儲器的方法和設備是人們期望的。
發(fā)明內容
在本發(fā)明的第一方面,提供了第一方法。第一方法包括以下步驟(1)接收數據集;(2)確定由數據集一部分所需的尺寸的自由組表目是否存在于存儲器的多個區(qū)域之一中;(3)如果數據集的該部分所需的尺寸的自由組表目不存在于存儲器多個區(qū)域之一中,則確定存儲器是否包括未分配尺寸的一個或多個區(qū)域;(4)如果存儲器包括未分配尺寸的一個或多個區(qū)域,則把未分配尺寸的存儲器區(qū)域之一分配給數據集的該部分所需的尺寸,從而建立動態(tài)分配尺寸的存儲區(qū)域,動態(tài)分配尺寸的存儲器區(qū)域包括數據集的該部分所需的尺寸的一個或多個組表目。
在本發(fā)明的第二方面中,設有第一設備,包括一個存儲器、多個寄存器和連接存儲器和多個寄存器的動態(tài)分配邏輯。動態(tài)分配邏輯適于(1)接收數據集;(2)確定數據集的該部分所需的尺寸的自由組表目是否存在于多個存儲器區(qū)域之一中;(3)如果數據集的該部分所需的尺寸的自由組選項不存在于存儲器的多個區(qū)域之一中,則確定存儲器是否包含未分配尺寸的一個或多個區(qū)域;(4)如果存儲器包括未分配尺寸的一個或多個區(qū)域,則把未分配尺寸的存儲器區(qū)域之一分配給數據集的該部分所需的尺寸,從而創(chuàng)建動態(tài)分配尺寸的存儲器區(qū)域。本發(fā)明還提供了許多其它方面。
從以下的詳細說明、所附的權利要求和附圖,可以使本發(fā)明的其它特征和方面更加清楚。
圖1是本發(fā)明的為網絡處理器動態(tài)分配存儲器的示例硬件的方框圖;圖2是本發(fā)明的包含在存儲器的一區(qū)域中的節(jié)點分配表寄存器的方框圖;圖3顯示了根據網絡處理器接收的數據從存儲器動態(tài)分配尺寸的組表目的新方法。
圖4顯示了當收到修改的數據集時動態(tài)分配存儲器的新方法。
具體實施例方式
諸如網絡處理器之類的硬件可以連接到存儲硬件接收的數據集的存儲器。該存儲器可以被分成多個區(qū)域(section),在硬件中接收任何數據之前,根據預期被硬件接收的數據集,為每個區(qū)域分配一個尺寸。由于上述原因,這種對存儲器區(qū)域的尺寸的預分配可能導致對不同于預期數據集的數據集的存儲器效率低下的分配。本發(fā)明的方法和設備允許按數據集的需要從存儲器中動態(tài)分配變尺寸的表目。
圖1是本發(fā)明的為網絡處理器動態(tài)分配存儲器的硬件的方框圖。為網絡處理器動態(tài)分配存儲器的硬件100可以包括網絡處理器102,該網絡處理器102可以包括連接到存儲器106(比如SRAM或類似物)的邏輯104(比如,專用集成電路(ASIC))。也可以使用其它存儲器106(例如,DRAM等)。存儲器106可以被分成多個區(qū)域110-114。每個區(qū)域110-114可以包括寄存器(例如,節(jié)點分配表寄存器(NAT))116-120,用于存儲說明存儲器區(qū)域110-114的結構的控制結構。在一個實施例中,包括4096個表目的存儲器106被分成64個區(qū)域110-114,其每個包括64個表目。存儲器106可以包括更多或更少的表目,并且可以被分成更多或更少的區(qū)域。ASIC 104可以包括動態(tài)分配邏輯108,它根據硬件100接收的數據集的一部分,從存儲器106的一個或多個區(qū)域110-114中分配變尺寸的表目,并且更新對應于分配表目的區(qū)域110-114的NAT 116-120。動態(tài)分配邏輯108可以根據硬件100所接收的已修改數據集的一部分,對存儲器106的一個或多個區(qū)域110-114解除預先分配的表目的分配,并且更新對應于解除表目分配的區(qū)域110-114的NAT116-120。
下面參照圖2說明NAT 116-120的結構,其中圖2是包含在本發(fā)明的存儲器102的區(qū)域110-114中的NAT 116-120的方框圖。如圖所示,NAT 116-120存儲說明區(qū)域110-114結構的控制結構,區(qū)域110-114包括多個單表目。在一個實施例中,可以使用存儲器106的32位字中的21個位存儲NAT 116-120??梢允褂酶蠡蚋〉淖执鎯AT 116-120。NAT 116-120可以包括一個節(jié)點尺寸字段202,用于指示被分配給存儲器106的區(qū)域110-114的尺寸。被分配給區(qū)域110-114的尺寸可以指示區(qū)域110-114的單表目的數量,區(qū)域110-114將被組合在一起,以形成存儲數據集的一部分的表目(例如,組表目或者節(jié)點)。NTA 116-120的兩個位可以用來在節(jié)點尺寸字段202中存儲一個值。所以,節(jié)點尺寸字段值可以用來把四個尺寸之一分配給區(qū)域110-114。例如,存儲器106的區(qū)域110-114可以被分配為一、四、十六或者六十四的尺寸。因此,區(qū)域110-114的表目可以被組合在一起,以根據分配給區(qū)域110-114的尺寸并利用節(jié)點尺寸字段形成組表目,每個組表目包括一、四、十六或者六十四表目。更多或更少位可以被用來在節(jié)點尺寸字段202中存儲一個值。
NAT 116-120可以包括自由空間計數字段204,用來指示區(qū)域110-114中的自由組表目或者節(jié)點的數目。自由組表目或者節(jié)點是可用于存儲數據集的一部分的組表目或節(jié)點。NAT 116-120可以包括頭部指針字段206和尾部指針字段208,用于存儲說明自由組表目或者節(jié)點的隊列的結構。更具體地說,頭部指針字段206可以存儲區(qū)域110-114的自由組表目或者節(jié)點的隊列中的第一自由組表目或者節(jié)點的指針。同樣,尾部指針字段208可以存儲區(qū)域110-114的自由組表目或者節(jié)點的隊列中的最后自由組表目或者節(jié)點的指針。除了隊列中最后組表目或者節(jié)點外,隊列中的每個自由組表目或者節(jié)點都可以包括隊列中下一個自由組表目或者節(jié)點的指針。隊列中最后組表目或者節(jié)點中的指針的值可以被設置為空值。
收到數據集時分配表目下面參照圖1、圖2和圖3說明動態(tài)分配用于網絡處理器的存儲器的硬件100的操作,其中圖3圖示說明了根據由網絡處理器接收的數據,從存儲器中動態(tài)分配一個尺寸的組表目的新方法。參見圖3,方法300開始于步驟302。在步驟304,可以接收一組數據。例如,硬件100可以接收將要存儲在存儲器106的表(例如,路由表)中的數據,比如硬件100具有通信路由(例如,路由信息)的互聯(lián)網協(xié)議(IP)或者媒體訪問控制(MAC)地址。數據集(例如,IP和/或MAC地址)可以被存儲在存儲器106中,由此創(chuàng)建唯一標識每個IP和/或MAC地址的樹結構。樹結構的不同節(jié)點可以用來存儲每個地址的一部分。如果數據集包括具有相同部分的地址,則對應于該地址部分的樹結構的節(jié)點將不需要像數據集中許多地址的同一部分不相同時所需的節(jié)點那樣大(例如,將不需要許多表目),以用來唯一標識數據集中每個地址。可以使用一種算法確定存儲樹結構的每個節(jié)點所需的存儲器表目(例如組表目)的尺寸,以便利用樹結構可以唯一地標識由硬件100接收的數據集中的每個地址。
在步驟306中,確定數據集的一部分所需的尺寸(例如,初始尺寸)的自由組表目是否存在于存儲器的多個區(qū)域之一中。動態(tài)分配邏輯108可以訪問存儲器106的一個或多個NAT 116-120(例如,先前分配一個尺寸的NAT),以作出上述確定。動態(tài)分配邏輯108可以并行訪問NAT 116-120。更具體地說,動態(tài)分配邏輯108可以訪問NAT 116-120中的一個或多個的節(jié)點尺寸字段202,以確定對應于NAT 116-120的存儲器106的區(qū)域110-114是否被分配給數據集的一部分所需的尺寸,因此動態(tài)分配表108包括所需尺寸的組表目。如上所述,一種算法可以被用來確定存儲數據集的一個或多個部分所需的組表目尺寸,由此可以唯一地標識由硬件100接收的數據集的該部分。
如果動態(tài)分配邏輯108訪問NAT 116-120并且確定NAT 116-120被分配給所需的尺寸(例如,分配區(qū)域110-114的尺寸匹配數據所需的尺寸),則動態(tài)分配邏輯108可以訪問NAT 116-120的自由空間計數字段204,以確定對應于NAT 116-120的區(qū)域110-114是否包含自由組表目。在一個實施例中,如果存儲在NAT 116-120的自由空間計數小于六十四并且不為零,則自由組表目存在于對應于NAT 116-120的存儲器106的區(qū)域110-114中。在步驟306中,如果確定數據集的該部分所需的自由組表目存在于存儲器的多個區(qū)域之一中,則執(zhí)行步驟308。在步驟308中,可以從該區(qū)域中分配存儲數據的數據集的該部分所需的尺寸的初始組表目。動態(tài)分配邏輯108可以訪問對應于區(qū)域110-114的NAT 116-120的頭部指針字段206,以確定可用于存儲包含在區(qū)域110-114的數據的組表目的隊列中的第一組表目(例如,未被使用的或者自由的)。動態(tài)分配邏輯108可以從隊列中分配第一組表目來存儲數據集的該部分。
作為選擇,如果自由空間計數為零,則區(qū)域110-114不包括任何自由組表目。如果分配給數據集的該部分所需的尺寸的區(qū)域110-114不包括自由組表目,則動態(tài)分配邏輯108確定數據集的該部分所需的尺寸的自由組表目不存在于存儲器106的多個區(qū)域110-114中,并執(zhí)行步驟310。
在步驟310中,確定存儲器是否包含未分配尺寸的一個或多個區(qū)域。動態(tài)分配邏輯108可以訪問存儲器106中的一個或多個NAT 116-120,以作出上述決定,并且可以并行訪問NAT 116-120。更具體地說,動態(tài)分配邏輯108可以訪問一個或多個NAT 116-120的自由空間計數字段204,以確定未分配的尺寸位(size-bit)是否被設置,該尺寸位指示對應于NAT 116-120的區(qū)域110-114是未分配尺寸的區(qū)域。在一個實施例中,自由空間計數字段204的最高有效位(MSB)是未分配尺寸位。當未分配尺寸位(例如,處于高邏輯狀態(tài))被設置時,區(qū)域110-114是未分配尺寸的區(qū)域,并且存儲于節(jié)點尺寸字段202中的值無效。反之,當未分配尺寸位未被設置(例如,處于低邏輯狀態(tài))時,區(qū)域110-114被分配給由節(jié)點尺寸字段202指示的尺寸。盡管在上述實施例中,自由空間計數字段204包括未分配尺寸位,但是在其它實施例中,NAT 116-120的其它字段可以包括未分配尺寸位。
如果存儲器包括未分配尺寸的一個或多個區(qū)域,則執(zhí)行步驟312。在步驟312中,未分配尺寸的一個區(qū)域可以被分配給數據集的一部分所需的尺寸,由此創(chuàng)建動態(tài)分配尺寸的區(qū)域,它包括數據集的該部分所需尺寸的一個或多個組表目。動態(tài)分配邏輯108可以訪問和更新與未分配尺寸的區(qū)域110-114對應的NAT 116-120的節(jié)點尺寸字段202,使區(qū)域110-114被分配給數據集的該部分所需的尺寸。所以,區(qū)域110-114的表目將被組合在一起,形成組表目,其每個組表目包括由分配給區(qū)域110-114的尺寸指示的多個表目。
如上所述,在一個實施例中,節(jié)點尺寸字段202可以存儲兩個位。因此,每個區(qū)域110-114可以被分配四個可能尺寸中的一個,并且區(qū)域110-114的組表目可以包括由節(jié)點尺寸字段指示的多個表目(例如,單表目、四表目、十六表目或者六十四表目的表目組)。例如,如果區(qū)域110-114被分配尺寸為四,則區(qū)域110-114的表目可以被分組為每個包括四表目的多個組表目。為了建立一連串的四表目的組表目,當尺寸被分配給區(qū)域110-114時,可以更新區(qū)域110-114的每第四表目,使其包括指向區(qū)域110-114中下一個表目的指針。作為選擇,需要時可以更新區(qū)域110-114的一個或多個表目,使其包括指向區(qū)域110-114中下一個表目的指針。例如,當區(qū)域110-114被分配給尺寸為四時,可以更新存儲器106的區(qū)域110-114的第四表目(例如,第一組表目的最后表目),使其包括指向第五存儲器表目(例如,第二組表目的第一表目)的指針。當分配第一組表目時,可以更新存儲器106的區(qū)域110-114的第八存儲器表目(例如,第二組表目的最后表目),使其包括指向區(qū)域110-114的第九存儲器表目(例如,第三組表目的第一表目)的指針,由此最小化區(qū)域110-114被分配尺寸時建立的指針數量。
通過利用步驟304、306、310和312,未分配尺寸的存儲器的未分配區(qū)域可以被動態(tài)分配一個尺寸。由于分配給區(qū)域110-114的尺寸是基于由硬件100接收的數據集的一部分的,因此對存儲器106的一個或多個區(qū)域110-114動態(tài)分配尺寸是高效率的。此后執(zhí)行步驟308。
在步驟308,可以從區(qū)域分配用于存儲數據的數據集的該部分所需的尺寸的初始組表目。在此情況下,區(qū)域是動態(tài)分配尺寸的區(qū)域。動態(tài)分配邏輯108可以訪問對應于區(qū)域110-114的NAT 116-120的頭部指針字段206,以確定可用于存儲被包含在區(qū)域110-114中的數據(例如,未使用的或者自由的)的組表目隊列中的第一組表目。動態(tài)分配邏輯108可以從存儲數據集的該部分的隊列中分配第一組表目。照這樣,可以根據數據集的該部分所需的尺寸,動態(tài)地為存儲數據集的該部分分配的組表目確定尺寸,以使得使用可以由硬件100建立并且是存儲部分數據所需的最小尺寸組表目。因此,基于數據集的該部分動態(tài)確定主表目尺寸,將使用來存儲數據的組表目中未用表目的總數最小。
一旦動態(tài)分配邏輯108從動態(tài)分配尺寸的區(qū)域110-114中分配數據集的該部分所需的尺寸的初始組表目,動態(tài)分配邏輯108就可以訪問和更新對應于動態(tài)分配尺寸的區(qū)域110-114的NAT 116-120,以反映該組表目的分配。更具體地說,頭部指針字段206將被更新為包括指向隊列中新的第一組表目的指針。例如,在分配之前,被分配的組表目包括指向隊列中下一個組表目的下一個組表目指針。在分配之后,頭部指針字段206可以被更新為包括來自被分配的組表目的下一個組表目指針。由于當分配組表目來存儲數據集的該部分時,該組表目從可用于組表目的隊列中刪除,因此減少了隊列中的表目(例如,組表目)的數量。因此,動態(tài)分配邏輯108可以把自由空間計數字段204中存儲的值遞減1,以反映隊列的變化。盡管在上述實施例中自由空間計數字段包括自由組表目的數量,但是在其它實施例中,自由空間計數字段包括自由存儲器表目的數量。因此,當分配組表目時,動態(tài)分配邏輯108可以把自由空間計數字段204中存儲的值遞減適當數目(例如,每個組表目中的存儲器表目的數目)。
作為選擇,如果在步驟310中確定存儲器不包括未分配尺寸的一個或多個區(qū)域,則可以執(zhí)行步驟314。在步驟314中,確定數據集的該部分所需的自由組表目的尺寸是否等于可以被分配給一個區(qū)域(進而被分配給一個組表目)的最大尺寸。如果是則執(zhí)行步驟316。例如,如果一個區(qū)域以及由此而包含在該區(qū)域中的組表目可以被分配的最大尺寸是六十四,并且數據集的該部分需要六十四表目的組表目存儲部分數據,則執(zhí)行步驟316。
在步驟316,硬件可能輸出錯誤狀態(tài)。由于可以在部分數據所需的尺寸(例如,最大尺寸)的自由組表目不存在以及未分配尺寸的區(qū)域不存在的在前步驟(例如步驟310)中確定錯誤狀態(tài),因此不能建立數據所需尺寸的組表目。因而,數據集的該部分不被寫入存儲器中,以及硬件100可以輸出錯誤狀態(tài),該錯誤狀態(tài)指示硬件100不能分配存儲器106來存儲數據集的該部分。此后執(zhí)行步驟322。
作為選擇,如果數據集的該部分所需的自由組表目的尺寸不等于可以被分配給一個區(qū)域(進而是一個組表目)的最大尺寸,則執(zhí)行步驟318。在步驟318中,數據集的該部分所需的尺寸被增加到大于在前所需尺寸的下一個尺寸。例如,所需尺寸可以從四表目的組表目增加到十六表目的組表目。此后,執(zhí)行步驟320。
在步驟320中,確定尺寸大于(例如已增加的所需尺寸)數據集的該部分所需的尺寸的自由組表目是否存在于被分配給尺寸大于數據集的該部分所需尺寸的區(qū)域中。在區(qū)域110-114被分配給更大可用尺寸之前,先檢查分配給最小可用尺寸的一個或多個區(qū)域110-114,該最小可用尺寸大于數據集的該部分所需的尺寸。類似于步驟306,動態(tài)分配邏輯108可以例如并行訪問一個或多個NAT 116-120(例如,先前分配一個尺寸的NAT),用于作出上述決定。動態(tài)分配邏輯108可以訪問一個或多個NAT 116-120的節(jié)點尺寸字段202,以確定對應于NAT 116-120的區(qū)域110-114是否被分配給大于待存儲的數據集的該部分所需的尺寸的最小可用尺寸(例如增加的所需尺寸)。例如,(1)如果數據集的該部分需要用于存儲數據集的該部分的尺寸為四的區(qū)域(例如,四表目的組表目);(2)如果自由組表目未存在于分配給尺寸為四的存儲器的區(qū)域中;(3)如果存儲器的區(qū)域不是未分配尺寸的區(qū)域;(4)如果包含在硬件100中的為網絡處理器動態(tài)分配存儲器的存儲器106的區(qū)域110-114可以被分配一、四、十六或者六十四之一的尺寸,以及由此在區(qū)域110-114中分別包括被組合在一起的一、四、十六或六十四表目的多個組表目(例如,數據集的該部分所需的組表目的尺寸不等于可以建立的組表目的最大尺寸),則動態(tài)分配邏輯108將訪問一個或多個NAT(例如,事先分配一個尺寸的NAT)的節(jié)點尺寸字段202,以確定對應于NAT 116-120的部分110-114是否被分配尺寸為十六(例如,包括十六表目的組表目)。如果這樣的區(qū)域不存在,則執(zhí)行上述的步驟314。
如果動態(tài)分配邏輯108確定存儲器106的區(qū)域110-114被分配給大于數據集的該部分所需的尺寸的下一個尺寸(例如,最小可用的),則動態(tài)分配邏輯108可以確定區(qū)域110-114是否包括自由組表目。如上所述,動態(tài)分配邏輯108可以訪問與區(qū)域110-114對應的NAT 116-120的自由空間計數字段204,以作出上述確定。如果動態(tài)分配邏輯108確定區(qū)域110-114不包括用于存儲數據集的該部分的自由組表目,則執(zhí)行步驟314。
在步驟314中,確定所需的尺寸(例如,已增加的所需尺寸)是否等于可以建立的最大組表目尺寸。如果在步驟314中確定已增加的所需尺寸不等于可以建立的組表目的最大尺寸,則再次執(zhí)行步驟318和320。照此方式,動態(tài)分配邏輯108可以確定存儲器106的任何其它區(qū)域110-114(被分配給大于數據集的該部分所需尺寸的最小可用尺寸)是否包括自由組表目。如果確定存儲器106的區(qū)域110-114(被分配給大于數據集的該部分所需尺寸的最小可用尺寸)不包括自由組表目,則動態(tài)分配邏輯108可以以相同方式確定分配給下一個(例如,最小可用的)更大尺寸的存儲器106區(qū)域110-114是否包括自由組表目。同樣,動態(tài)分配邏輯108可以為下一個(例如,最小可用的)更大尺寸的存儲器106區(qū)域110-114重復該處理,直至發(fā)現(xiàn)包含自由組表目的區(qū)域110-114,或者輸出一個錯誤狀態(tài)。
如果大于數據所需尺寸(例如,先前需要的尺寸)的尺寸(例如,已增加的所需尺寸)的自由組表目存在,則執(zhí)行步驟308。在步驟308中,來自存儲器區(qū)域的初始組表目被分配來存儲數據。更具體地說,尺寸大于數據集的該部分所需尺寸的初始組表目被分配來存儲來自被分配給這樣一個尺寸的區(qū)域110-114的數據,所述尺寸大于數據集的該部分所需的尺寸。如上所述,動態(tài)分配邏輯108可以訪問對應于區(qū)域110-114的NAT 116-120的頭部指針字段206,以確定可用于存儲來自區(qū)域110-114的數據的組表目隊列中的第一組表目,此后,從隊列中分配第一組表目,用于存儲數據集的該部分。由于組表目來自所分配的尺寸大于數據集的該部分所需尺寸的區(qū)域110-114,因此,組表目包括比用于存儲數據集的該部分所需的表目更多的表目。因此,在存儲數據集的該部分的時候,組表目的某些表目未被使用。然而,由于動態(tài)分配邏輯108在執(zhí)行步驟318以及此后的步驟308之前,確定先前分配給數據集的該部分所需的尺寸的區(qū)域110-114不包括自由組表目以及未分配尺寸的區(qū)域110-114不存在,因此使用于存儲數據集的該部分的組表目中未用表目的總數目最小。
一旦動態(tài)分配邏輯108分配尺寸大于數據集的該部分所需尺寸的初始組表目,動態(tài)分配邏輯108就訪問和更新與尺寸大于數據集的該部分所需尺寸的區(qū)域110-114對應的NAT 116-120。更具體地說,可以按上述方式更新頭部指針字段206和自由空間計數字段204。在執(zhí)行步驟308后,執(zhí)行步驟322。
在步驟322中,結束方法300。通過利用圖3的方法300,當接收數據集時可以高效地從存儲器分配表目。更具體地說,可以從被動態(tài)分配數據集的該部分所需的尺寸的存儲器106的區(qū)域110-114分配表目,或者從被分配了大于數據集的該部分所需尺寸的尺寸的區(qū)域110-114分配表目,以這種方式,使得用于存儲數據的組表目中未用(例如,浪費的)表目的總數目最小。
當收到修改的數據集時解分配和/或分配組表目現(xiàn)在參照圖1-4說明用于存儲器動態(tài)分配的硬件的操作,其中圖4圖示說明了當收到修改的數據集時動態(tài)分配存儲器的新方法。參見圖4,方法400開始于步驟402。此后,可以執(zhí)行步驟304-320(如虛線框A所示)。步驟304-320說明了根據網絡處理器接收的數據從存儲器動態(tài)分配一個尺寸的組表目的新方法。由于步驟304至320已經參照圖3進行了說明,因此這里不再對其進行詳細說明。
在步驟404中,接收修改的數據集。如上述的步驟304所述,硬件100可以接收待存儲在存儲器106的表(例如,路由表)中的數據,諸如硬件100具有通信路由(例如路由信息)的IP和/或MAC地址。數據集可以被存儲在存儲器106中,以便建立唯一標識數據集的每個部分(IP和/或MAC地址)的樹結構。樹結構的不同節(jié)點可以存儲每個IP和/或MAC地址的不同部分。可以用來存儲數據集的樹結構以及用來確定樹結構的每個節(jié)點的尺寸的算法已經在上文中描述,這里將不再進行說明。
硬件100可以在操作期間接收標識到達裝置的新通信路由(例如,路由信息)的數據,或者接收標識到達無效裝置的在前存在的通信路由的數據。硬件100可以適當地更新存儲器106中存儲的數據(例如,路由信息),以反映新接收的數據。因此,通過接收新數據(比如包括建立通信路由的裝置地址或者刪除不再建立通信路由的裝置地址的路由信息),硬件100接收修改的數據集。
在步驟406中,確定是否可以在來自存儲器106的另一區(qū)域110-114的不同尺寸的組表目中更有效地存儲修改的數據集的一部分,以使得組表目中無用表目的數目最小。一個算法可以用來確定存儲已修改數據集的一部分所需的組表目的尺寸,進而確定已修改數據集的一部分可以被存儲在更小的組表目中、相同尺寸的組表目中,還是必須被存儲在更大組表目中并且仍然唯一標識已修改數據集的每個部分。
例如,已修改數據集可包括將要存儲在存儲器106的表中的更少或更多數量的IP和/或MAC地址。如果已修改數據集減少地址相同部分是不同的地址的數量,則對應于該地址部分的樹結構的節(jié)點可以被存儲在更小的組表目中,并且仍然唯一地標識已修改數據集中的每個地址。反之,如果已修改數據集增加了地址相同部分是不同的地址數量,則對應于該地址部分的樹結構的節(jié)點可能需要被存儲在更大的組表目中,以繼續(xù)唯一地標識已修改數據集中的每個地址。
如果確定已修改數據集的一部分沒有被高效地存儲在不同尺寸的組表目中,則執(zhí)行步驟408。在步驟408中,已修改數據集的一部分將被存儲在現(xiàn)存的組表目中。
作為選擇,如果在步驟406中確定(例如,通過使用算法)已修改數據集的一部分可以被高效地存儲在來自存儲器另一區(qū)域的不同尺寸的組表目中,使用來存儲數據的組表目中的未用表目的總數量最小,則動態(tài)分配邏輯108可以對已修改數據集的一部分執(zhí)行步驟306-320。因此,動態(tài)分配邏輯108可以確定先前被分配給已修改數據集的一部分所需的不同尺寸的區(qū)域是否包括自由組表目,未分配尺寸的區(qū)域110-114是否存儲于存儲器106中,和/或尺寸大于已修改數據集的一部分所需的不同尺寸的自由組表目是否存在。由于上文已經詳細說明了步驟306-320,因此這里將不再對其進行說明。在該討論中,假定通過執(zhí)行圖3的步驟306-320,在存儲器中發(fā)現(xiàn)了已修改數據集的一部分所需的不同尺寸的自由組表目。然后執(zhí)行步驟410。
在步驟410中,可以分配來自存儲器的另一區(qū)域的已修改數據集的一部分所需的不同尺寸的組表目,以存儲已修改數據集的一部分。更具體地說,根據上述確定,動態(tài)分配邏輯108可以從先前分配給不同尺寸的存儲器106的區(qū)域110-114、分配給不同尺寸的存儲器106的先前未分配區(qū)域110-114或者先前分配給大于該不同尺寸的尺寸的區(qū)域110-114,分配已修改數據集的該部分所需的不同尺寸的組表目。動態(tài)分配邏輯108可以訪問與區(qū)域110-114對應的NAT 116-120的頭部指針字段206,以確定自由組表目的隊列中的第一組表目,并且分配該組表目來存儲已修改數據集的一部分。這樣,分配了至少與不同尺寸一樣大的最小尺寸的可用組表目,用于存儲已修改數據集的一部分。一旦已修改數據集的一部分所需的不同尺寸的組表目被分配,就把已修改數據集的一部分寫到(例如存入)組表目上。如以上步驟308所述,當動態(tài)分配邏輯108從包含在區(qū)域110-114的自由組表目的隊列分配一個組表目時,動態(tài)分配邏輯108可以訪問對應于區(qū)域110-114的NAT116-120。動態(tài)分配邏輯108可以更新NAT 116-120的頭部指針字段206,使其包含指向隊列中新的第一組表目的指針。在分配之前,該指針已經被包含在所分配的組表目中,以作為指向自由組表目的隊列中下一個組表目的下一個表目指針。如上所述,動態(tài)分配邏輯108還可以把NAT 116的自由空間計數字段204遞減一個數(例如,一),以反映自由組表目的隊列的變化。
在步驟412中,對初始組表目被分配的存儲器區(qū)域解除初始組表目的分配。由于在步驟406中確定已修改數據集的一部分(例如,對應于樹結構的節(jié)點)可以被更有效地存儲于不同尺寸的組表目中,因此與樹結構的節(jié)點對應的、用于存儲一部分原始數據集的初始組表目例如被解除分配。更具體地說,可以清除存儲在初始組表目中的數據(例如,把零寫入初始組表目)。動態(tài)分配邏輯108可以更新與初始組表目被分配的區(qū)域110-114對應的NAT116-120。更具體地說,為了把新近解分配的組表目放置到包含在初始組表目被分配的區(qū)域110-114中的自由組表目隊列的尾部,動態(tài)分配邏輯108可以更新尾部指針字段208,使其包含指向新近解除分配的表目的指針,把包含在隊列的先前的最后組表目中的下一個表目指針更新到指向新近解除分配的組表目,并且將自由空間計數字段204中存儲的值遞增一個數(例如,1),以反映存儲器106的區(qū)域110-114中包含的自由組表目的變化。
如果解除組表目分配導致該被解除分配的表目最初被分配的存儲器106區(qū)域110-114的所有表目成為自由,則動態(tài)分配邏輯108可以分配區(qū)域110-114為一個未分配尺寸。更具體地說,如果動態(tài)分配邏輯108把與解除組表目分配的區(qū)域110-114對應的NAT的自由空間計數字段204遞增到指示區(qū)域110-114中所有表目未被使用的值,則動態(tài)分配邏輯108維護包含在NAT116-120的字段(例如,自由空間計數字段204)中的一個位,以服務于把對應于NAT 116-120的區(qū)域110-114分配給一個未分配的尺寸。這樣,分配給存儲器106的區(qū)域110-114的尺寸可以被調整,以適應于已修改數據集。
方法400結束于步驟414。通過利用圖4的方法400,可以動態(tài)和有效分配連接到硬件的存儲器,以適應于硬件100所接收的已修改數據集。
上述說明僅僅公開了本發(fā)明的示范性實施例。本領域熟練技術人員將容易地明白落入本發(fā)明范圍的本發(fā)明的上述公開的實施例的各種修改。例如,盡管在上述實施例中,存儲器106的區(qū)域110-114可以被分配為一、四、十六或者六十四的尺寸,進而包含在區(qū)域110-114中的組表目可以包括組合在一起的一、四、十六或者六十四表目,但是也可以使用更多或更少數目的尺寸。此外,可以使用不同的尺寸。盡管在上述實施例中,存儲器106中存儲的數據集包括路由信息(例如,IP和/或MAC地址),但是在其它實施例中,其它類型的數據也可以被存儲在存儲器106中。此外,盡管在上述實施例中,組表目對應于用來存儲數據集的樹結構中的節(jié)點,但是在其它實施例中,組表目可以對應于用于存儲數據的另一類型結構中的節(jié)點。此外,盡管在上述實施例中,NAT 116-120存儲描述區(qū)域110-114的結構的數據的21個位,但是在其它實施例中,NAT 116-120可以存儲更多或更少的數據位。
當硬件100準備分配存儲器106時,可以利用一個命令(例如,地址路由表(ART)刷新命令)重新初始化NAT 116-120。ART刷新命令可以維持對應于區(qū)域110-114的NAT 116-120的自由空間計數字段204中的一個位,該位指示區(qū)域110-114的所有表目都未被使用,該刷新命令設置區(qū)域頭部指針字段使其包括指向區(qū)域110-114中的第一表目,設置尾部指針字段208使其包括指向區(qū)域110-114中的最后表目的指針,而把節(jié)點尺寸字段202設置到指示區(qū)域110-114中每個表目是組表目的一個值。
因此,盡管已經結合本發(fā)明的示范性實施例說明了本發(fā)明,但是應當理解是,其它實施例可以落入由以下權利要求所限定的本發(fā)明精神和范圍之內。
權利要求
1.一種方法,包括接收數據集;確定數據集的一部分所需的尺寸的自由組表目是否存在于存儲器的多個區(qū)域之一中;如果數據集的所述部分所需的尺寸的自由組表目不存在于存儲器的多個區(qū)域之一中,則確定存儲器是否包括未分配尺寸的一個或多個區(qū)域;以及如果存儲器包括未分配尺寸的一個或多個區(qū)域,則把未分配尺寸的區(qū)域之一分配給數據集的該部分所需的尺寸,由此建立動態(tài)分配的尺寸的區(qū)域,該動態(tài)分配尺寸的區(qū)域包括數據集的該部分所需尺寸的一個或多個組表目。
2.根據權利要求1所述的方法,其中,確定數據集的該部分所需的尺寸的自由組表目是否存在于存儲器的多個區(qū)域之一中的步驟包括確定用于唯一標識數據集每個部分的該數據集部分所需的尺寸的自由組表目是否存在于存儲器的多個區(qū)域之一中。
3.根據權利要求1所述的方法,其中,確定存儲器是否包括未分配尺寸的一個或多個區(qū)域的步驟包括訪問用于存儲器的一個或多個區(qū)域的控制結構,所述控制結構存儲關于區(qū)域結構的信息。
4.根據權利要求1所述的方法,還包括從動態(tài)分配尺寸的區(qū)域分配數據集的該部分所需尺寸的初始組表目,以存儲數據集的該部分。
5.根據權利要求4所述的方法,還包括接收已修改數據集;確定已修改數據集的一部分是否可以被更有效地存儲在來自存儲器另一區(qū)域的不同尺寸的組表目中,以使得用于存儲已修改數據集的組表目中未用表目的總數最??;從存儲器的另一區(qū)域分配已修改數據集的該部分所需的不同尺寸的組表目,以存儲已修改數據集的該部分;和對分配了初始組表目的存儲器的區(qū)域解除初始組表目的分配。
6.根據權利要求5所述的方法,還包括更新存儲關于其它區(qū)域的結構的信息的控制結構。
7.根據權利要求5所述的方法,還包括更新存儲關于分配了初始組表目的存儲器區(qū)域的結構的信息的控制結構。
8.根據權利要求5所述的方法,其中對分配了初始組表目的存儲器區(qū)域解除初始組表目的分配的步驟留下該區(qū)域的所有表目不使用。
9.根據權利要求8所述的方法,還包括清除區(qū)域的組表目尺寸分配。
10.根據權利要求1所述的方法,還包括如果存儲器不包括未分配尺寸的一個或多個區(qū)域,則確定尺寸大于部分數據所需的尺寸的自由組表目是否存在,其中在區(qū)域分配給更大可用尺寸之前,檢查分配給大于部分數據所需尺寸的最小可用尺寸的區(qū)域。
11.根據權利要求10所述的方法,還包括如果尺寸大于部分數據所需的尺寸的自由組表目存在于分配給尺寸大于部分數據所需尺寸的區(qū)域中,則從分配給尺寸大于部分數據所需尺寸的區(qū)域中,分配尺寸大于數據集的該部分所需尺寸的初始組表目,用于存儲數據集的該部分。
12.根據權利要求10所述的方法,還包括如果尺寸大于部分數據所需的尺寸的自由組表目不存在,則輸出錯誤狀態(tài)。
13.根據權利要求11所述的方法,還包括接收已修改數據集;確定已修改數據集的一部分是否可以被更有效地存儲在來自存儲器另一區(qū)域的不同尺寸的組表目中,以使得用于存儲已修改數據集的組表目中未用表目的總數最??;從存儲器的另一區(qū)域分配已修改數據集的該部分所需的不同尺寸的組表目,以存儲已修改數據集的該部分;和對分配了初始組表目的存儲器的區(qū)域解除初始組表目的分配。
14.根據權利要求13所述的方法,還包括更新存儲關于其它區(qū)域的結構的信息的控制結構。
15.根據權利要求13所述的方法,還包括更新存儲關于分配了初始組表目的存儲器區(qū)域的結構的信息的控制結構。
16.根據權利要求13所述的方法,其中對分配了初始組表目的存儲器區(qū)域解除初始組表目的分配的步驟留下該區(qū)域的所有表目不使用。
17.根據權利要求16所述的方法,還包括清除區(qū)域的組表目尺寸分配。
18.一種設備,包括一個存儲器;多個寄存器;和連接存儲器和多個寄存器的動態(tài)分配邏輯,并且適合于接收數據集;確定數據集的一部分所需的尺寸的自由組表目是否存在于存儲器的多個區(qū)域之一中;如果數據集的所述部分所需的尺寸的自由組表目不存在于存儲器的多個區(qū)域之一中,則確定存儲器是否包括未分配尺寸的一個或多個區(qū)域;以及如果存儲器包括未分配尺寸的一個或多個區(qū)域,則把未分配尺寸的區(qū)域之一分配給數據集的該數據集部分所需的尺寸,由此建立動態(tài)分配的尺寸的區(qū)域。
19.根據權利要求18所述的設備,其中,動態(tài)分配邏輯還適合于確定用于唯一標識數據集每個部分的該部分數據所需的尺寸的自由組表目是否存在于存儲器的多個區(qū)域之一中。
20.根據權利要求18所述的設備,其中,動態(tài)分配邏輯還適合于訪問用于存儲器的一個或多個區(qū)域的控制結構,所述控制結構存儲關于區(qū)域結構的信息。
21.根據權利要求18所述的設備,其中,動態(tài)分配邏輯還適合于從動態(tài)分配尺寸的區(qū)域分配數據集的該部分所需尺寸的初始組表目,以存儲數據集的該部分。
22.根據權利要求21所述的設備,其中,動態(tài)分配邏輯還適合于接收已修改數據集;確定已修改數據集的一部分是否可以被更有效地存儲在來自存儲器另一區(qū)域的不同尺寸的組表目中,以使得用于存儲已修改數據集的組表目中未用表目的總數最?。粡拇鎯ζ鞯牧硪粎^(qū)域分配已修改數據集的該部分所需的不同尺寸的組表目,以存儲已修改數據集的該部分;和對分配了初始組表目的存儲器的區(qū)域解除初始組表目的分配。
23.根據權利要求22所述的設備,其中,動態(tài)分配邏輯還適合于更新存儲關于其它區(qū)域的結構的信息的控制結構。
24.根據權利要求22所述的設備,其中,動態(tài)分配邏輯還適合于更新存儲關于分配了初始組表目的存儲器區(qū)域的結構的信息的控制結構。
25.根據權利要求22所述的設備,其中,動態(tài)分配邏輯還適合于對分配了初始組表目的存儲器區(qū)域解除初始組表目的分配,留下該區(qū)域的所有表目不使用。
26.根據權利要求25所述的設備,其中,動態(tài)分配邏輯還適合于清除區(qū)域的組表目尺寸分配。
27.根據權利要求18所述的設備,其中,動態(tài)分配邏輯還適合于如果存儲器不包括未分配尺寸的一個或多個區(qū)域,則確定尺寸大于部分數據所需的尺寸的自由組表目是否存在,其中在區(qū)域分配給更大可用尺寸之前,檢查分配給大于部分數據所需尺寸的最小可用尺寸的區(qū)域。
28.根據權利要求27所述的設備,其中,動態(tài)分配邏輯還適合于如果尺寸大于部分數據所需的尺寸的自由組表目存在于分配給尺寸大于部分數據所需尺寸的區(qū)域中,則從分配給尺寸大于部分數據所需尺寸的區(qū)域,分配尺寸大于數據集的該部分所需尺寸的初始組表目,用于存儲數據集的該部分。
29.根據權利要求27所述的設備,其中,動態(tài)分配邏輯還適合于如果尺寸大于部分數據所需的尺寸的自由組表目不存在,則輸出錯誤狀態(tài)。
30.根據權利要求23所述的設備,其中,動態(tài)分配邏輯還適合于接收已修改數據集;確定已修改數據集的一部分是否可以被更有效地存儲在來自存儲器另一區(qū)域的不同尺寸的組表目中,以使得用于存儲已修改數據集的組表目中未用表目的總數最小;從存儲器的另一區(qū)域分配已修改數據集的該部分所需的不同尺寸的組表目,以存儲已修改數據集的該部分;和對分配了初始組表目的存儲器的區(qū)域解除初始組表目的分配。
31.根據權利要求30所述的設備,其中,動態(tài)分配邏輯還適合于更新存儲關于其它區(qū)域的結構的信息的控制結構。
32.根據權利要求30所述的設備,其中,動態(tài)分配邏輯還適合于更新存儲關于分配了初始組表目的存儲器區(qū)域的結構的信息的控制結構。
33.根據權利要求30所述的設備,其中,動態(tài)分配邏輯還適合于對分配了初始組表目的存儲器區(qū)域解除初始組表目的分配,留下該區(qū)域的所有表目不使用。
34.根據權利要求33所述的設備,其中,動態(tài)分配邏輯還適合于清除區(qū)域的組表目尺寸分配。
全文摘要
在本發(fā)明的第一方面,提供了第一方法,該第一方法包括以下步驟(1)接收數據集(a set of data);(2)確定數據集的一部分(a portion of the set ofdata)所需的尺寸的自由組表目(free group entry)是否存在于存儲器的多個區(qū)域之一中;(3)如果數據集的所述部分所需的尺寸的自由組表目不存在于存儲器的多個區(qū)域之一中,則確定存儲器是否包括未分配尺寸的一個或多個區(qū)域;(4)如果存儲器包括未分配尺寸的一個或多個區(qū)域,則把未分配尺寸的區(qū)域之一分配給數據集的該部分所需的尺寸,由此建立動態(tài)分配尺寸的區(qū)域。此外還提供多個其它方面。
文檔編號H04L12/56GK1601487SQ20041008266
公開日2005年3月30日 申請日期2004年9月27日 優(yōu)先權日2003年9月25日
發(fā)明者約翰·D·艾里什, 伊布拉希姆·A·烏達, 詹姆斯·A·斯蒂恩伯格, 賈森·A·湯普森 申請人:國際商業(yè)機器公司