哈希表的處理方法及裝置的制造方法
【專利摘要】本發明公開了一種哈希表的處理方法及裝置。基于本發明,Key可以被替換為標簽置入哈希表。由于標簽具有比Key具有更小的長度,因此,當在硬件層使用哈希表時,可以減小哈希表中的哈希桶在硬件層占用的存儲空間,從而可以在不增加硬件層存儲空間的情況下實現更大容量的哈希表。而且,不同長度的Key所分別對應的標簽具有統一的歸一化長度,因此,當在硬件層使用哈希表時,可以使不同哈希表在硬件層的處理機制統一化,從而可以使哈希表在硬件層的使用易于實現。另外,沖突概率目標值或假命中率目標值可以約束標簽的歸一化長度的設定,以滿足對沖突概率或假命中率的需求。
【專利說明】
哈希表的處理方法及裝置
技術領域
[0001] 本發明涉及哈希表的處理(所述的處理可以包括例如添加、查找、以及刪除中的 至少一種操作)方法及裝置。
【背景技術】
[0002] 哈希表是一種具有較高查找性能的數據結構。當在硬件層應用哈希表時,如何利 用硬件層有限的存儲空間實現更大容量的哈希表是目前急需解決的問題。
【發明內容】
[0003] 本發明的實施例提供了哈希表的處理方法及裝置。
[0004] 在一個實施例中,一種哈希表的處理方法包括:
[0005] 根據當前的Key計算哈希地址;
[0006] 利用計算得到的所述哈希地址在所述哈希表中索引對應的哈希桶;
[0007] 根據所述Key計算具有歸一化長度的標簽,所述歸一化長度小于所述Key的長 度;
[0008] 利用所述標簽在索引到的所述哈希桶中匹配表項;
[0009] 根據匹配結果執行對應的操作。
[0010] 可選地,所述處理方法進一步包括:根據預設的沖突概率目標值設定所述歸一化 長度,使所述歸一化長度滿足:
[0011]
[0012] 其中,P(N)表示所述沖突概率目標值,N表示所述哈希表中的當前表項數量,I表 示所述哈希地址的取值范圍,S表示所述標簽的取值范圍。
[0013] 可選地,所述處理方法進一步包括:根據預設的假命中概率目標值設定所述歸一 化長度,使所述歸一化長度滿足:
[0014]
[0015] 其中,MTBF表示所述假命中概率目標值,N表示所述哈希表中的當前表項數量,I 表示所述哈希地址的取值范圍,S表示所述標簽的取值范圍,rate為所述哈希表被訪問的 速率。
[0016] 可選地,當所述對應的操作為添加操作時,若存在匹配的表項,則對匹配到的所述 表項執行添加操作,否則,通過在所述哈希桶的空閑位置插入帶有所述標簽的新表項來執 行添加操作;并且,所述處理方法進一步包括:
[0017] 在根據所述Key計算具有歸一化長度的標簽之前,依據索引到的所述哈希桶中的 算法選擇字段,為所述標簽的計算選擇對應的算法;
[0018] 在對匹配的所述表項執行所述添加操作之前,檢驗當前計算出的所述標簽在被所 哈希地址指向的所述哈希桶中是否存在標簽沖突;
[0019] 若不存所述標簽沖突,使能對匹配到的所述表項執行所述添加操作;
[0020] 若存在所述標簽沖突,則通過更換算法更新當前計算出的所述標簽、以及被所哈 希地址指向的所述哈希桶中所有表項的標簽值,并重新觸發所述匹配;
[0021] 當發生算法更換時,更新對應的哈希桶中的算法選擇字段。
[0022] 可選地,當所述對應的操作為查找操作或刪除操作時,所述處理方法進一步包括: 在根據所述Key計算具有歸一化長度的標簽之前,依據索引到的所述哈希桶中的算法選擇 字段,為所述標簽的計算選擇對應的算法。
[0023] 在一個實施例中,一種哈希表的處理裝置包括:
[0024] 地址計算模塊,根據當前的Key計算哈希地址;
[0025] 地址索引模塊,利用計算得到的所述哈希地址在所述哈希表中索引對應的哈希 桶;
[0026] 標簽轉換模塊,根據所述Key計算具有歸一化長度的標簽,所述歸一化長度小于 所述Key的長度;
[0027] 標簽匹配模塊,利用所述標簽在索引到的所述哈希桶中匹配表項;
[0028] 操作執行模塊,根據匹配結果執行對應的操作。
[0029] 可選地,所述處理裝置進一步包括:第一標簽長度約束模塊,根據預設的沖突概率 目標值設定所述歸一化長度,使所述歸一化長度滿足:
[0030]
[0031] 其中,P(N)表示所述沖突概率目標值,N表示所述哈希表中的當前表項數量,I表 示所述哈希地址的取值范圍,S表示所述標簽的取值范圍。
[0032] 可選地,所述處理裝置進一步包括:第二標簽長度約束模塊,根據預設的假命中概 率目標值設定所述歸一化長度,使所述歸一化長度滿足:
[0033]
[0034] 其中,MTBF表示所述假命中概率目標值,N表示所述哈希表中的當前表項數量,I 表示所述哈希地址的取值范圍,S表示所述標簽的取值范圍,rate為所述哈希表被訪問的 速率。
[0035] 可選地,當所述對應的操作為添加操作時,若存在匹配的表項,則所述操作執行模 塊對匹配到的所述表項執行添加操作,否則,所述操作執行模塊通過在所述哈希桶的空閑 位置插入帶有所述標簽的新表項來執行添加操作;并且,所述處理裝置進一步包括:
[0036] 算法選擇模塊,在所述標簽轉換模塊根據所述Key計算具有歸一化長度的標簽之 前,依據索引到的所述哈希桶中的算法選擇字段,為所述標簽的計算選擇對應的算法;
[0037] 沖突檢驗模塊,在所述操作執行模塊對匹配的所述表項執行所述添加操作之前, 檢驗當前計算出的所述標簽在被所哈希地址指向的所述哈希桶中是否存在標簽沖突;
[0038] 添加使能模塊,若不存所述標簽沖突,使能對匹配到的所述表項執行所述添加操 作;
[0039] 沖突處理模塊,若存在所述標簽沖突,則通過更換算法更新當前計算出的所述標 簽、以及被所哈希地址指向的所述哈希桶中所有表項的標簽,并重新觸發所述匹配;
[0040] 字段維護模塊,當發生算法更換時,更新對應的哈希桶中的算法選擇字段。
[0041] 可選地,當所述對應的操作為查找操作或刪除操作時,所述處理裝置進一步包括: 算法選取模塊,在所述標簽轉換模塊根據所述Key計算具有歸一化長度的標簽之前,依據 索引到的所述哈希桶中的算法選擇字段,為所述標簽的計算選擇對應的算法。
[0042] 由此可見,基于上述的實施例,Key可以被替換為標簽置入哈希表。由于標簽具 有比Key具有更小的長度,因此,當在硬件層使用哈希表時,可以減小哈希表中的哈希桶在 硬件層占用的存儲空間,從而可以在不增加硬件層存儲空間的情況下實現更大容量的哈希 表。而且,不同長度的Key所分別對應的標簽具有統一的歸一化長度,因此,當在硬件層使 用哈希表時,可以使不同哈希表在硬件層的處理機制統一化,從而可以使哈希表在硬件層 的使用易于實現。
[0043] 另外,在上述的實施例中,沖突概率目標值或假命中率目標值可以約束標簽的歸 一化長度的設定,以滿足對沖突概率或假命中率的需求。以及,上述的實施例可以通過調整 計算標簽的算法以避免在同一個哈希桶內發生標簽間的沖突。
【附圖說明】
[0044] 圖1為一個比較例中的哈希表應用架構的示意圖;
[0045] 圖2為一個實施例中的哈希表應用架構的示意圖;
[0046] 圖3為一個實施例中的哈希表的處理方法的流程示意圖;
[0047] 圖4a和圖4b為一個實施例中的哈希表的處理裝置的結構示意圖;
[0048] 圖5為另一個實施例中的哈希表應用架構的示意圖;
[0049] 圖6a和圖6b為另一個實施例中的哈希表的處理方法的流程不意圖;
[0050] 圖7a至圖7d分別為另一個實施例中的哈希表的處理裝置的結構示意圖;
[0051] 圖8為一個實施例中的哈希表的處理裝置的結構示意圖。
【具體實施方式】
[0052] 為使本發明的目的、技術方案及優點更加清楚明白,以下參照附圖并舉實施例,對 本發明進一步詳細說明。
[0053] 首先引入一個比較例,以便于能夠更清楚地體現后續實施例所能夠產生的技術效 果。請參見圖1,在一個比較例中,應用哈希表的架構包括CPU 11、邏輯芯片12、以及第一 內存13和第二內存14。其中,CPU 11可以是單核或多核的處理器,邏輯芯片12可以是例 如FPGA(Field - Programmable Gate Array,現場可編程門陣列)等具有可編程的邏輯器 件,第一內存 13 和第二內存 14 可以是例如 DDR SDRAM (Double Date Rate Synchronous Dynamic Random Access Memory,雙倍速率同步動態隨機存儲器)等存儲介質。
[0054] CPU 11與邏輯芯片12相連,第一內存13連接CPU 11,第二內存14連接邏輯芯片 12,并且,邏輯芯片12與其連接的第二內存14可以被看作是硬件層。
[0055] 在圖1所示的比較例中,CPU 11可以對存放在第一內存13中的哈希表10執行添 加或刪除操作。當第一內存13中的哈希表10被執行添加或刪除操作后,CPU 11可以將該 哈希表10下刷至第二內存14中,以供哈希表10能夠在硬件層被使用。相應地,硬件層中 的邏輯芯片12可以對第二內存14中存放的哈希表10執行查找操作。
[0056] 請再參見圖1,哈希表10包括哈希區10a和沖突區10b。哈希區10a和沖突區 l〇b中分別具有哈希桶100a和100b。每個哈希桶100a或100b中包含有至少一個哈希表 項。每個哈希表項中包含一對相互對應的Key和result (結果),因此,圖1所示的比較 例中將哈希表項表示為Key&result 101。在圖1中,雖然每個哈希桶100a或100b中的 Key&result 101的數量(即,哈希表項的數量)都為一個,但這并不表示哈希桶100a或 100b中的Key&result 101的數量(即,哈希表項的數量)只能為一個,而是應當理解為哈 希桶100a或100b中的Key&result 101的數量(即,哈希表項的數量)可以多于一個。
[0057] 并且,圖1所示的比較例是以鏈地址法形成沖突區10b為例,因此,每個哈希桶 100a或100b中還包括pointer (指針)102。相應地,哈希區10a中的哈希桶100a的pointer 102可以指向沖突區10b中的哈希桶100b,并且,沖突區10b中的哈希桶100b的pointer 102可以指向沖突區10b中的下一級的哈希桶(圖1中并未示出),從而,由一個哈希桶100a 和至少一個哈希桶100b形成哈希桶鏈表。
[0058] (1. 1)、對于上述的哈希表10的添加,首先根據當前的Key (關鍵字)121計算出 Hash_idx(哈希地址或哈希索引)122,并利用計算得到的Hash_idx 122在哈希表10中索 引對應的哈希桶l〇〇a和100b,然后再根據Key 121在索引到的哈希桶100a和100b中匹配 存在相同Key值的Key&result 101。
[0059] 若被Hash_idx 122指向的某個哈希桶100a或100b中存在匹配的Key&result 101,則可以更新匹配到的Key&result 101中的result、以實現添加操作;
[0060] 若被Hash_idx 122指向的所有哈希桶100a和100b中都不存在匹配的 Key&result 101,則可以通過在其中的某個哈希桶100a或100b的空閑位置插入帶有Key 101的新Key&result 101來實現添加操作。
[0061] (1. 2)、對于上述的哈希表10的刪除,首先根據當前的Key 121計算出Hash_idx 122,并利用計算得到的Hash_idx 122在哈希表10中索引對應的哈希桶100a和100b,然 后再根據Key 121在索引到的哈希桶100a和100b中匹配存在相同Key值的Key&result 101〇
[0062] 若被Hash_idx 122指向的某個哈希桶100a或100b中存在匹配的Key&result 101,則可以將匹配到的Keyfcesult 101置為無效、以實現刪除操作;
[0063] 若被Hash_idx 122指向的所有哈希桶100a和100b中都不存在匹配的 Key&result 101,則不能成功完成刪除操作。
[0064] (1. 3)、對于上述的哈希表10的查找,首先根據當前的Key 121計算出Hash_idx 122,并利用計算得到的Hash_idx 122在哈希表10中索引對應的哈希桶100a和100b,然 后再根據Key 121在索引到的哈希桶100a和100b中匹配存在相同Key值的Key&result 101〇
[0065] 若被Hash_idx 122指向的某個哈希桶100a或100b中存在匹配的Key&result 101,則可以讀取匹配到的Key&result 101中的result、以實現查找操作;
[0066] 若被Hash_idx 122指向的所有哈希桶100a和100b中都不存在匹配的 Key&result 101,則不能成功完成查找操作。
[0067] 如上可見,圖1中所示的比較例能夠實現對哈希表10的添加、刪除以及查找。但 是,哈希表10的所有Key&result 101會隨著Key 121的長度增加而變大,從而導致哈希表 10占用的存儲空間隨之增大。這對于硬件層的第二內存14來說,會形成較大的存儲負擔。
[0068] 例如,隨著IPv6的普及,IP地址長度由IPv4的32bit變為128bit后,相應地,對 應IP地址的Key 121也會增長。以流(flow)表為代表的哈希表,五元組的長度也會從IPv4 的104bit變為IPv6的296bit。相應地,Key 121在表示IP地址時的長度就會驟然增加, 并導致KeyfcesultlOl的大小隨之增大,這就使得存儲容量有限的第二內存14中可存放的 Key&result 101條數驟減,從而阻礙了大規格的哈希表10在硬件層的使用。
[0069] 而且,雖然圖1所示的比較例中僅示出了一個哈希表10,但哈希表10的數量可能 是多個,并且,不同的哈希表10中的Key 121的長度可以不同。此時,為了適應具有不同長 度的Key 121的多個哈希表10,硬件層的邏輯芯片12的編程實現就變得困難。
[0070] 除了使用IP地址得到Key 121的情況之外,例如使用MAC地址得到Key 121等其 他所有可能出現的情況同樣會存在Key 121的長度較大、或Key 121的長度多樣化的問題。
[0071] 請參見圖2,在一個實施例中,應用哈希表的架構包括CPU 21、邏輯芯片22、以及 第一內存23和第二內存24。
[0072] 圖2所示實施例中的CPU 21、邏輯芯片22、以及第一內存23和第二內存24可以 分別與比較例中的CPU 11、邏輯芯片12、以及第一內存13和第二內存14相同。并且,圖2 所示實施例中的哈希表20同樣能夠從第一內存23被下刷至硬件層的第二內存24。
[0073] 但是,圖2所示實施例中的哈希表20不同于圖1所示的比較例中的哈希表10。相 應地,CPU 21對存放在第一內存23中的哈希表20執行的添加或刪除操作不同于圖1所示 的比較例,并且,邏輯芯片22對存放在第二內存24中的哈希表20執行的查找操作也不同 于圖1所示的比較例。
[0074] 請再參見圖2,哈希表20包括哈希區20a和沖突區20b。哈希區20a和沖突區 20b中分別具有哈希桶200a和200b。每個哈希桶200a或200b中包含有至少一個哈希 表項。與圖1所示的比較例不同的是,每個哈希表項中的Key被替換為長度小于Key的 Signature (標簽),因此,圖2所示的實施例中將哈希表項表示為Signature&result 201〇 在圖2中,雖然每個哈希桶100a或100b中的Signature&result 201的數量(即,哈希 表項的數量)都為一個,但這并不表示哈希桶100a或100b中的Signature&result 201 的數量(即,哈希表項的數量)只能為一個,而是應當理解為哈希桶l〇〇a或100b中的 Signature&result 201的數量(即,哈希表項的數量)可以多于一個。
[0075] 并且,圖2所示的實施例是以鏈地址法形成沖突區20b為例,因此,每個哈希桶 200a或200b中還包括pointer 202, pointer 202可以使哈希桶200a和至少一個哈希桶 200b形成哈希桶鏈表。
[0076] (2. 1)、對于上述的哈希表20的添加,首先根據當前的Key 221計算出Hash_idx 222,并利用計算得到的Hash_idx 222在哈希表20中索引對應的哈希桶200a和200b,并 且,還需要將Key 221轉換為Signature 223、并根據Signature 223在索引到的哈希桶 200a 和 200b 中匹配存在相同 Signature 值的 Signature&result 201 〇
[0077] 若被Hash_idx 222指向的某個哈希桶200a或200b中存在匹配 的Signature&result 201,則可以利用對應Key 221的result替換匹配到的 Signature&result 201中的result,以實現添加操作;
[0078] 若被Hash_idx 222指向的所有哈希桶200a和200b中都不存在匹配的 Signature&result201,則可以在其中的某個哈希桶200a或200b的空閑位置插入新的 Signature&result 201,新的 Signature&result 201 帶有 Signature 223 以及對應 Key 221的result,從而實現添加操作。
[0079] (2. 2)、對于上述的哈希表20的刪除,首先根據當前的Key 221計算出Hash_idx 222,并利用計算得到的Hash_idx 222在哈希表20中索引對應的哈希桶200a和200b,并 且,還需要將Key 221轉換為Signature 223、并根據Signature 223在索引到的哈希桶 200a 和 200b 中匹配存在相同 Signature 值的 Signature&result 201 〇
[0080] 若被Hash_idx 222指向的某個哈希桶200a或200b中存在匹配的 Signature&result 201,則可以將匹配到的Signature&result 201置為無效、以實現刪除 操作;
[0081] 若被Hash_idx 222指向的所有哈希桶200a和200b中都不存在匹配的 Signature&result201,則不能成功完成刪除操作。
[0082] (2. 3)、對于上述的哈希表20的查找,首先根據當前的Key 221計算出Hash_idx 222,并利用計算得到的Hash_idx 222在哈希表20中索引對應的哈希桶200a和200b,并 且,還需要將Key 221轉換為Signature 223、并根據Signature 223在索引到的哈希桶 200a 和 200b 中匹配存在相同 Signature 值的 Signature&result 201 〇
[0083] 若被Hash_idx 222指向的某個哈希桶200a或200b中存在匹配的 Signature&result 201,則可以讀取匹配到的 Signature&result 201 中的 result、以實現 查找操作;
[0084] 若被Hash_idx 222指向的所有哈希桶200a和200b中都不存在匹配的 Signature&result201,則不能成功完成查找操作。
[0085] 如上可見,圖2中所示的實施例能夠利用具有更小長度的Signature 223替 代Key 221實現對哈希表20的添加、刪除以及查找。因此,可以避免哈希表20中的 Signature&result 201隨著Key 221的長度增加而變大,從而避免哈希表20占用的存儲 空間隨著Key 221的長度增加而增大。由此,可以避免硬件層的第二內存14的存儲負擔增 加。
[0086] 而且,在圖2所示的實施例中,對于Key 221所可能具有的不同長度,Signature 223的長度都是一致的。即,不同長度的Key 221在圖2所示的實施例中可以被轉換為同一 長度的Signature 223。由此,Key 221轉換為Signature 223的過程不但可以看作是一個 長度縮減的過程,而且還可以看作是一個長度歸一化的過程。相應地,Signature 223的長 度可以認為是歸一化長度。
[0087] 此時,即便圖2所示的實施例中的哈希表20可以為多個,在第二內存24中存放 的多個哈希表20中的Signature 223的長度也都是統一的。因此,可以避免為了適應Key 221的不同長度而使硬件層的邏輯芯片12的編程實現復雜化。
[0088] 另外,隨著Key 221被具有更小長度的Signature 223替代,有可能存在添加沖突 概率和假命中概率提升的風險。為此,上述圖2中示出的實施例可以對Signature 223的 歸一化長度施加約束。
[0089] -種可選的約束方式為:利用預先設定的沖突概率目標值約束Signature 223的 歸一化長度的設定。
[0090] 具體說,在添加哈希表20時,若對應相同Hash_idx 222、但具有不同Key值的至少 兩個Key 221的Signature 223相同,則可以認為發生了上述的沖突。反之,則可以認為未 發生沖突。
[0091] 相應地,不發生沖突的概率P(N)可以表示為
[0092] 其中,P(N)表示沖突概率目標值,N表示哈希表20中當前存在的 Signature&result 201 的數量,I 表不 Hash_idx 222 的取值范圍,S 表不 Signature 223 的取值范圍。
[0093] 上述的不發生沖突的概率P(N)可以隨著哈希表20中的Signature&result 201 的數量N的增大而逐漸減小:
[0094] 當 N = 1 時,哈希表 20 中只存在 1 個 Signature&result 201,.戶_(1)_ = 1,:即,不沖 突的概率為100% ;
[0095] 當 N = 2 時,哈希表 20 中存在 2 個 Signature&result 201
[0096] 當 N = 3 時,哈希表 20 中存在 3 個 Signature&result 201,
Lb
[0097] 以此類推,
[0098] 相應地,發生沖突的概率
[0099] 假設,N = 22。,I = 22。,S = 2°4( SP,Signature 223 的歸一化長度為 64bit),則取 40 位有效位的 P(N) =0· 0000000000005684341615028642778715783961。
[0100] 再假設,N = 22。,I = 22。,S = 212S( 即,Signature 223 的歸一化長度為 128bit), 則取 40 位有效位的 P(N) =0· 0000000000000000000000000000000308148776。
[0101] 由此可知,Signature 223的歸一化長度與P(N)之間存在約束關系,因此,可以預 先設定P (N)、并將預先設定的P (N)作為沖突概率目標值約束Signature 223的歸一化長 度。
[0102] 另一種可選的約束方式為:利用預先設定的假命中率目標值約束Signature 223 的歸一化長度的設定。
[0103] 具體說,在添加、刪除、或查找哈希表20時,若出現具有不同Key值的至少Key 221 同時對應相同的Hash_idx 222和Signature 223,則可以認為發生了上述的假命中。
[0104] -次添加(存在匹配Signature&result 201的情況)、一次刪除、或一次查找可 能出現的最大假命中概率為INS,其中,N表示哈希表20中當前存在的Signature&result 201的數量,I表示Hash_idx 222的取值范圍,S表示Signature 223的取值范圍。
[0105] 并且,對于哈希表20以給定的速率rate被訪問的情況,發生假命中的間隔MTBF 可以表示為:
[0106]
其中,MTBF的單位可以為"年"。
[0107] 假設,S和I均取264( 即,Hash_idx 222的長度、以及Signature 223的歸一化長 度均為64bit),并且rate取150Mpps,則MTBF約為3899年。
[0108] 由此可知,Signature 223的歸一化長度與MTBF之間存在約束關系,因此,可以預 先設定MTBF、并將預先設定的MTBF作為假命中概率目標值約束Signature 223的歸一化長 度。
[0109] 基于圖2中示出的實施例的上述原理,分別提供了一種哈希表的處理方法及其對 應的裝置。下面分別予以詳細說明。
[0110] 請參見圖3, 一種哈希表的處理方法可以包括如下步驟:
[0111] S311,根據當前的Key計算Hash_idx。其中,當前的Key可以是從例如報文中獲 取,并可以觸發添加操作、刪除操作、或查找操作。
[0112] S312,利用計算得到的Hash_idx在哈希表中索引對應的哈希桶。其中,若哈希區 和沖突區中形成對應Hash_idx的哈希桶鏈表,貝lj本步驟中檢索到的哈希桶可以包括哈希 桶鏈表中的多個哈希桶。
[0113] S313,根據當前的Key (與S311中的Key相同)計算具有歸一化長度的Signature, 該歸一化長度小于Key的長度。
[0114] S314,利用Signature在索引到的哈希桶中匹配表項(即,Signature&result)。 其中,若S312索引到的哈希桶包括哈希桶鏈表中的多個哈希桶,則本步驟可以在多個哈希 桶中匹配表項。
[0115] S315,根據匹配結果執行對應的操作,然后結束本流程。
[0116] 當S315執行的所述對應的操作為添加操作時,若匹配結果為存在匹配的表項 (即,Signature&result),則S315對匹配到的表項執行添加操作;若匹配結果為不存在匹 配的表項(即,Signature&result),則S315通過在哈希桶的空閑位置插入帶有所述標簽的 新表項(即,Signature&result)來執行添加操作。
[0117] 當S315執行的所述對應的操作為刪除操作時,若匹配結果為存在匹配的表項 (即,Signature&result),則S315對匹配到的表項執行刪除操作。否則,S315刪除失敗。
[0118] 當S315執行的所述對應的操作為查找操作時,若匹配結果為存在匹配的表項 (即,Signature&result),則S315對匹配到的表項(即,Signature&result)執行查找操 作;否則,S315查找失敗。
[0119] 優選地,添加操作或刪除操作在如圖2所示的架構中可以是由CPU 21執行,查找 操作在如圖2所示的架構中可以是由邏輯芯片12執行。相應地,當上述的處理方法在圖2 中的CPU21中運行時,上述S315執行的操作可能為添加操作或刪除操作;而當上述的處理 方法由圖2所示的邏輯芯片12中形成的邏輯陣列實現時,上述S315所執行的操作可能為 查找操作。
[0120] 上述的優選方式是為了適應CPU 21負責維護哈希表并向邏輯芯片12下刷的應用 場景。對于調試場景,CPU 21也可以執行查找操作;并且,對于邏輯芯片12自行維護哈希 表的應用場景,邏輯芯片12也可以執行添加操作或刪除操作。
[0121] 另外,在圖3所示的處理方法中,都可以進一步按照前文所述的方式,根據預設的 沖突概率目標值或假命中概率目標值設定Signature的歸一化長度。
[0122] 請參見圖4a和圖4b,一種哈希表的處理裝置可以包括如下的模塊:
[0123] 地址計算模塊411,根據當前的Key計算Hash_idx。其中,當前的Key可以是從例 如報文中獲取,并可以觸發添加操作、刪除操作、或查找操作。
[0124] 地址索引模塊412,利用計算得到的Hash_idx在哈希表中索引對應的哈希桶。其 中,若哈希區和沖突區中形成對應Hash_idx的哈希桶鏈表,則地址索引模塊412檢索到的 哈希桶可以包括哈希桶鏈表中的多個哈希桶。
[0125] 標簽計算模塊413,根據上述的Key計算具有歸一化長度的Signature,該歸一化 長度小于Key的長度。
[0126] 標簽匹配模塊414,利用Signature在索引到的哈希桶中匹配表項(即, Signature&result)。其中,若地址索引模塊412索引到的哈希桶包括哈希桶鏈表中的多個 哈希桶,則標簽匹配模塊414可以在多個哈希桶中匹配表項。
[0127] 操作執行模塊415,根據匹配結果執行對應的操作。
[0128] 當操作執行模塊415執行的所述對應的操作為添加操作時,若匹配結果為存在 匹配的表項(即,Signature&result),則操作執行模塊415對匹配到的表項執行添加操 作,否則,操作執行模塊415通過在哈希桶的空閑位置插入帶有所述標簽的新表項(即, Signature&result)來執行添加操作。
[0129] 當操作執行模塊415執行的所述對應的操作為刪除操作時,若匹配結果為存在匹 配的表項(即,Signature&result),則操作執行模塊415對匹配到的表項執行刪除操作,否 貝1J,操作執行模塊415確認刪除失敗。
[0130] 當操作執行模塊415執行的所述對應的操作為查找操作時,若匹配結果為存在匹 配的表項(即,Signature&result),則操作執行模塊415對匹配到的表項執行查找操作,否 貝1J,操作執行模塊415確認查找失敗。
[0131] 當添加操作、刪除操作、或查找操作在如圖2所示的架構中由CPU 21執行時,上述 的處理裝置可以如圖4a所示的那樣被模塊化地存放在圖2所示的第一內存23、并被圖2中 的CPU21調用運行;
[0132] 當添加操作、刪除操作、或查找操作在如圖2所示的架構中由邏輯芯片12執行時, 上述的處理裝置可以如圖4b所示的那樣被模塊化地集成在圖2所示的邏輯芯片12中。
[0133] 另外,在圖4a和圖4b所示的處理裝置中,都可以進一步包括第一、或第二標簽長 度約束模塊,第一、第二標簽長度約束模塊可以分別按照前文所述的兩種方式,根據預設的 沖突概率目標值或假命中概率目標值設定Signature的歸一化長度。
[0134] 請參見圖5,在另一個實施例中,應用哈希表的架構包括CPU 51、邏輯芯片52、以 及第一內存53和第二內存54。
[0135] 圖5所示實施例中的CPU 51、邏輯芯片52、以及第一內存53和第二內存54可以分 別與圖2所示實施例中的CPU 21、邏輯芯片22、以及第一內存23和第二內存24相同。并 且,圖5所示實施例中的哈希表50同樣能夠從第一內存53被下刷至硬件層的第二內存54。
[0136] 與圖2所示實施例中的哈希表20相比,圖5所示實施例中的哈希表50的哈希桶 500a和500b中除了 Signature&result 501和pointer 502(可以分別與圖2所不實施例 中的Signature&result 201和pointer 202相同)之外,還可以進一步包括算法選擇sel 字段503。
[0137] 并且,第一內存53中除了存放哈希表50之外,還可以進一步存放圖1所示比較例 中的哈希表10。CPU 51可以將第一內存53中的哈希表10內的Key值與哈希表50內的 Signature值同步維護,但哈希表10可以不下發至第二內存54。
[0138] 對于上述的哈希表50的添加、刪除和查找,與圖2示出的實施例相比,圖5示出的 實施例需要進一步利用索引到的哈希桶500a和500b中的sel字段503選擇對應的算法, 再利用選擇的算法將Key 521轉換為Signature 523。
[0139] 并且,對于上述的哈希表50的添加,在圖5示出的實施例中,若被Hash_idx 522 指向的某個哈希桶500a或500b中存在匹配的Signature&result 501,則在對匹配到的 Signature&result501執行添加操作之前,先利用哈希表10驗證當前的匹配是否屬于沖 突,即,利用哈希表10中的Key&result 101的Key值檢驗,即將執行的添加操作是否會導 致被當前的Hash_idx 522所指向的哈希桶500a和500b中發生標簽沖突;
[0140] 當不存在標簽沖突時,利用對應Key 521的result替換匹配到的 Signature&result 501中的result,以實現添加操作,并且,還將當前計算Signature 523 所使用的算法的類型標記在sel字段503中;
[0141] 當存在標簽沖突時,更換當前選用的算法,并利用更換的算法更新Signature 523、以及哈希表50中被當前的Hash_idx 522所指向的哈希桶500a和500b中所有的 Signature值,然后利用更新的Signature 523重新在當前的Hash_idx 522所指向的哈希 桶500a和500b中執行Signature&result 501的匹配,并且,當前的Hash_idx 522所指向 的所有哈希桶500a和500b中的sel字段503會被同步更新。
[0142] 其中,哈希桶500a和500b中所有的Signature值的更新可以借助同步維護的哈 希表10中的Key&result 101的Key值來實現。
[0143] 對于添加時不存在匹配的Signature&result 501的處理方式,以及刪除和查找 時的處理方式,則圖5示出的實施例都可以與圖2所示實施例相同。
[0144] 如上可見,圖5所示實施例中,除了可以通過前文所述的約束歸一化長度的方式 來降低沖突概率和假命中率之外,還可以進一步在添加時即通過更換算法來進一步降低沖 突發生的概率。
[0145] 相應地,圖5中示出的實施例基于上述原理,分別提供了哈希表的處理方法及對 應的裝置。下面分別予以詳細說明。
[0146] 請參見圖6a,對于添加操作,該哈希表的添加方法可以應用在圖5中的CPU 51,并 且,該添加處理方法可以包括如下步驟:
[0147] S611,根據當前的 Key 計算 Hash_idx。
[0148] S612,利用計算得到的Hash_idx在哈希表中索引對應的哈希桶。其中,若哈希區 和沖突區中形成對應Hash_idx的哈希桶鏈表,貝lj本步驟中檢索到的哈希桶可以包括哈希 桶鏈表中的多個哈希桶。
[0149] S613,依據索引到的哈希桶中的算法選擇字段,為選擇對應的算法。其中,當S612 索引到哈希桶鏈表中的多個哈希桶時,該哈希桶鏈表中的各哈希桶的算法選擇字段的算法 類型標識相同。
[0150] S614,根據當前的Key (與S611中的Key相同)、并利用選擇的算法計算具有歸一 化長度的Signature,該歸一化長度小于Key的長度。
[0151] S615,利用Signature在索引到的哈希桶中匹配表項(即,Signature&result)。 其中,若S312索引到的哈希桶包括哈希桶鏈表中的多個哈希桶,則本步驟可以在多個哈希 桶中匹配表項。
[0152] S616,若存在匹配的表項(即,Signature&result),則檢驗當前計算出的 Signature在被Hash_idx指向的哈希桶中是否存在標簽沖突。其中,可以利用以Key值為 匹配元素的傳統哈希表實現上述的檢驗。
[0153] S617,若不存標簽沖突,則使能對匹配到的表項(即,Signature&result)執行添 加操作,即,對匹配到的表項執行添加操作,然后結束本流程。
[0154] S618,若存在標簽沖突,貝lj通過更換算法更新當前計算出的Signature、以及被 Hash_idx指向的哈希桶中所有表項(即,Signature&result)的Signature值,并返回S615 重新匹配。
[0155] S619,當發生算法更換時,更新對應的哈希桶中的算法選擇字段。
[0156] S620,若不存在匹配的表項(即,Signature&result),則通過在哈希桶的空閑位 置插入帶有所述標簽的新表項(即,Signature&result)來執行添加操作,然后結束本流 程。
[0157] 請參見圖6b,對于刪除操作,該處理方法可以應用在圖5中的CPU 51 ;對于查找操 作,該處理方法可以應用在圖5中的邏輯芯片52 ;并且,對于刪除操作或查找操作,該處理 方法可以包括如下步驟:
[0158] S621,根據當前的 Key 計算 Hash_idx。
[0159] S622,利用計算得到的Hash_idx在哈希表中索引對應的哈希桶。其中,若哈希區 和沖突區中形成對應Hash_idx的哈希桶鏈表,貝lj本步驟中檢索到的哈希桶可以包括哈希 桶鏈表中的多個哈希桶。
[0160] S623,依據索引到的哈希桶中的算法選擇字段,為選擇對應的算法。其中,當S622 索引到哈希桶鏈表中的多個哈希桶時,該哈希桶鏈表中的各哈希桶的算法選擇字段的算法 類型標識相同。
[0161] S624,根據當前的Key (與S621中的Key相同)、并利用選擇的算法計算具有歸一 化長度的Signature,該歸一化長度小于Key的長度。
[0162] S625,利用Signature在索引到的哈希桶中匹配表項(即,Signature&result)。 其中,若S622索引到的哈希桶包括哈希桶鏈表中的多個哈希桶,則本步驟可以在多個哈希 桶中匹配表項。
[0163] S626,若存在匹配的表項(即,Signature&result),則對匹配到的表項執行刪除 或查找操作,然后結束本流程。否則,刪除或查找失敗、并結束本流程。
[0164] 另外,在圖6a和圖6b所示的處理方法中,都可以進一步按照前文所述的方式,根 據預設的沖突概率目標值或假命中概率目標值設定Signature的歸一化長度。
[0165] 請參見圖7a,一種哈希表的處理裝置,其可以適用于添加操作、并包括與圖4a中 的地址計算模塊411、地址索引模塊412、標簽計算模塊413、標簽匹配模塊414、以及操作執 行模塊415分別相同的模塊,并且,該處理裝置還可以進一步包括如下的模塊:
[0166] 第一算法選擇模塊711,在標簽計算模塊413根據上述的Key計算具有歸一化長度 的Signature之前,依據第一地址模塊412索引到的哈希桶中的sel字段,為標簽計算模塊 413選擇對應的算法,用于標簽計算模塊413計算Signature ;
[0167] 沖突檢驗模塊712,在添加執行模塊415對標簽匹配模塊414匹配到的表項(即, Signature&result)執行添加操作之前,檢驗當前計算出的標簽在被Hash_idx指向的哈希 桶中是否存在標簽沖突;
[0168] 添加使能t旲塊713,右沖關檢驗_旲塊712判斷出不存標簽沖關,使能添加執彳丁_旲塊 415對匹配到的表項執行添加操作;
[0169] 沖突處理模塊714,若存在標簽沖突,則通過更換算法使第一標簽計算模塊 413更新當前計算出的Signature、以及被Hash_idx指向的哈希桶中所有表項(即, Signature&result)的Signature值,并重新觸發標簽匹配模塊414執行匹配;
[0170] 字段維護模塊715,當發生算法更換時,更新對應的哈希桶中的sel字段。
[0171] 當添加操作在如圖5所示的架構中由CPU 51執行時,上述的處理裝置可以如圖7a 所示的那樣被模塊化地存放在圖5所示的第一內存53、并被圖5中的CPU 51調用運行;
[0172] 當添加操作在如圖5所示的架構中由邏輯芯片52執行時,上述的處理裝置可以如 圖7b所示的那樣被模塊化地集成在圖5所示的邏輯芯片52中。
[0173] 請參見圖7b,一種哈希表的處理裝置,其可以適用于刪除操作、并包括與圖4a中 的地址計算模塊411、地址索引模塊412、標簽計算模塊413、標簽匹配模塊414、以及操作執 行模塊415分別相同的模塊,并且,該處理裝置還可以進一步包括如下的模塊:
[0174] 第二算法選擇模塊720,依據第二地址模塊422索引到的哈希桶中的sel字段,為 第二標簽計算模塊423選擇對應的算法,用于第二標簽計算模塊423計算Signature。
[0175] 當刪除操作、或查找操作在如圖5所示的架構中由CPU 51執行時,上述的處理裝 置可以如圖7c所示的那樣被模塊化地存放在圖5所示的第一內存53、并被圖5中的CPU 51 調用運行;
[0176] 當刪除操作、或查找操作在如圖5所示的架構中由邏輯芯片52執行時,上述的處 理裝置可以如圖7d所示的那樣被模塊化地集成在圖5所示的邏輯芯片52中。
[0177] 另外,在圖7a至圖7d所示的處理裝置中,同樣可以進一步包括前文所述的第一、 或第二標簽長度約束模塊。
[0178] 基于對上述的實施例的理解,上述的實施例提出的技術方案既可以以硬件的形式 體現出來,也可以以軟件產品的形式體現出來。
[0179] 具體說,當該技術方案以軟件產品的形式體現出來時,可以提供配有機器可讀的 存儲介質的系統或者裝置,在該存儲介質上存儲著實現上述處理方法或處理裝置的功能的 軟件程序代碼,且使該系統或者裝置的處理器讀出并執行存儲在存儲介質中的程序代碼。
[0180] 在此情況下,從存儲介質讀取的程序代碼本身可實現上述處理方法活處理裝置的 功能,因此程序代碼和存儲程序代碼的存儲介質構成了實現上述處理方法或處理裝置的技 術方案的一部分。
[0181] 其中,用于提供程序代碼的存儲介質實施例包括軟盤、硬盤、磁光盤、光盤(如 CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁帶、非易失性存儲卡和 ROM。可 選擇地,可以由通信網絡從服務器計算機上下載程序代碼。
[0182] 應該清楚的是,不僅可以通過執行計算機所讀出的程序代碼,而且可以通過基于 程序代碼的指令使計算機上操作的操作系統等來完成部分或者全部的實際操作,從而實現 上述實例中任意一項實施例的功能。
[0183] 此外,可以理解的是,將由存儲介質讀出的程序代碼寫到插入計算機內的擴展板 中所設置的存儲器中或者寫到與計算機相連接的擴展單元中設置的存儲器中,隨后基于程 序代碼的指令使安裝在擴展板或者擴展單元上的處理器等來執行部分和全部實際操作,從 而實現上述處理方法或處理裝置的功能。
[0184] 例如,請參見圖8, 一種哈希表的處理裝置包括內存801 (即上述的存儲器)和與內 存801通過內部總線800連接的處理器802,并且,程序代碼可以通過從存儲介質中讀取或 從通信網絡下載的方式存入在內存801中,處理器802從內存801讀取并運行程序代碼可 實現上述處理方法活處理裝置的功能。從而,可以認為,一種哈希表的處理裝置可以包括用 于存放程序代碼的內存801、以及通過內部總線800連接內存801并讀取程序代碼的處理器 802〇
[0185] 該處理器802通過運行程序代碼的指令:
[0186] 根據當前的Key計算哈希地址;
[0187] 利用計算得到的哈希地址在哈希表中索引對應的哈希桶;
[0188] 根據上述的Key計算具有歸一化長度的標簽,該歸一化長度小于上述Key的長 度;
[0189] 利用計算得到的標簽在索引到的哈希桶中匹配表項;
[0190] 根據匹配結果執行對應的操作。
[0191] 在一個例子中,進一步地,所述處理器802讀取指令執行:
[0192] 根據預設的沖突概率目標值設定所述歸一化長度,使所述歸一化長度滿足:
[0193]
[0194] 其中,P(N)表示所述沖突概率目標值,N表示所述哈希表中的當前表項數量,I表 示所述哈希地址的取值范圍,S表示所述標簽的取值范圍。
[0195] 在一個例子中,進一步地,所述處理器802讀取指令執行:
[0196] 根據預設的假命中概率目標值設定所述歸一化長度,使所述歸一化長度滿足:
[0197]
[0198] 其中,MTBF表示所述假命中概率目標值,N表示所述哈希表中的當前表項數量,I 表示所述哈希地址的取值范圍,S表示所述標簽的取值范圍,rate為所述哈希表被訪問的 速率。
[0199] 在一個例子中,進一步地,所述處理器802讀取指令執行:
[0200] 當所述對應的操作為添加操作時,若存在匹配的表項,則對匹配到的所述表項執 行添加操作,否則,通過在所述哈希桶的空閑位置插入帶有所述標簽的新表項來執行添加 操作;
[0201] 在根據所述Key計算具有歸一化長度的標簽之前,依據索引到的所述哈希桶中的 算法選擇字段,為所述標簽的計算選擇對應的算法;
[0202] 在對匹配的所述表項執行所述添加操作之前,檢驗當前計算出的所述標簽在被所 哈希地址指向的所述哈希桶中是否存在標簽沖突;
[0203] 若不存所述標簽沖突,使能對匹配到的所述表項執行所述添加操作;
[0204] 若存在所述標簽沖突,則通過更換算法更新當前計算出的所述標簽、以及被所哈 希地址指向的所述哈希桶中所有表項的標簽值,并重新觸發所述匹配;
[0205] 當發生算法更換時,更新對應的哈希桶中的算法選擇字段。
[0206] 在一個例子中,進一步地,所述處理器802讀取指令執行:
[0207] 當所述對應的操作為查找操作或刪除操作時,所述處理方法進一步包括:在根據 所述Key計算具有歸一化長度的標簽之前,依據索引到的所述哈希桶中的算法選擇字段, 為所述標簽的計算選擇對應的算法。
[0208] 以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精 神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明保護的范圍之內。
【主權項】
1. 一種哈希表的處理方法,其特征在于,所述處理方法包括: 根據當前的Key計算哈希地址; 利用計算得到的所述哈希地址在所述哈希表中索引對應的哈希桶; 根據所述Key計算具有歸一化長度的標簽,所述歸一化長度小于所述Key的長度; 利用所述標簽在索引到的所述哈希桶中匹配表項; 根據匹配結果執行對應的操作。2. 根據權利要求1所述的處理方法,其特征在于,所述處理方法進一步包括:根據預設 的沖突概率目標值設定所述歸一化長度,使所述歸一化長度滿足:其中,P(N)表示所述沖突概率目標值,N表示所述哈希表中的當前表項數量,I表示所 述哈希地址的取值范圍,S表示所述標簽的取值范圍。3. 根據權利要求1所述的處理方法,其特征在于,所述處理方法進一步包括:根據預設 的假命中概率目標值設定所述歸一化長度,使所述歸一化長度滿足:其中,MTBF表示所述假命中概率目標值,N表示所述哈希表中的當前表項數量,I表示 所述哈希地址的取值范圍,S表示所述標簽的取值范圍,rate為所述哈希表被訪問的速率。4. 根據權利要求1所述的添加方法,其特征在于,當所述對應的操作為添加操作時,若 存在匹配的表項,則對匹配到的所述表項執行添加操作,否則,通過在所述哈希桶的空閑位 置插入帶有所述標簽的新表項來執行添加操作;并且,所述處理方法進一步包括: 在根據所述Key計算具有歸一化長度的標簽之前,依據索引到的所述哈希桶中的算法 選擇字段,為所述標簽的計算選擇對應的算法; 在對匹配的所述表項執行所述添加操作之前,檢驗當前計算出的所述標簽在被所哈希 地址指向的所述哈希桶中是否存在標簽沖突; 若不存所述標簽沖突,使能對匹配到的所述表項執行所述添加操作; 若存在所述標簽沖突,則通過更換算法更新當前計算出的所述標簽、W及被所哈希地 址指向的所述哈希桶中所有表項的標簽值,并重新觸發所述匹配; 當發生算法更換時,更新對應的哈希桶中的算法選擇字段。5. 根據權利要求1所述的添加方法,其特征在于,當所述對應的操作為查找操作或刪 除操作時,所述處理方法進一步包括:在根據所述Key計算具有歸一化長度的標簽之前,依 據索引到的所述哈希桶中的算法選擇字段,為所述標簽的計算選擇對應的算法。6. -種哈希表的處理裝置,其特征在于,所述處理裝置包括: 地址計算模塊,根據當前的Key計算哈希地址; 地址索引模塊,利用計算得到的所述哈希地址在所述哈希表中索引對應的哈希桶; 標簽轉換模塊,根據所述Key計算具有歸一化長度的標簽,所述歸一化長度小于所述 Key的長度; 標簽匹配模塊,利用所述標簽在索引到的所述哈希桶中匹配表項; 操作執行模塊,根據匹配結果執行對應的操作。7. 根據權利要求6所述的處理裝置,其特征在于,所述處理裝置進一步包括:第一標 簽長度約束模塊,根據預設的沖突概率目標值設定所述歸一化長度,使所述歸一化長度滿 足:其中,P(N)表示所述沖突概率目標值,N表示所述哈希表中的當前表項數量,I表示所 述哈希地址的取值范圍,S表示所述標簽的取值范圍。8. 根據權利要求6所述的處理裝置,其特征在于,所述處理裝置進一步包括:第二標簽 長度約束模塊,根據預設的假命中概率目標值設定所述歸一化長度,使所述歸一化長度滿 足:其中,MTBF表示所述假命中概率目標值,N表示所述哈希表中的當前表項數量,I表示 所述哈希地址的取值范圍,S表示所述標簽的取值范圍,rate為所述哈希表被訪問的速率。9. 根據權利要求6所述的處理裝置,其特征在于,當所述對應的操作為添加操作時, 若存在匹配的表項,則所述操作執行模塊對匹配到的所述表項執行添加操作,否則,所述操 作執行模塊通過在所述哈希桶的空閑位置插入帶有所述標簽的新表項來執行添加操作;并 且,所述處理裝置進一步包括: 算法選擇模塊,在所述標簽轉換模塊根據所述Key計算具有歸一化長度的標簽之前, 依據索引到的所述哈希桶中的算法選擇字段,為所述標簽的計算選擇對應的算法; 沖突檢驗模塊,在所述操作執行模塊對匹配的所述表項執行所述添加操作之前,檢驗 當前計算出的所述標簽在被所哈希地址指向的所述哈希桶中是否存在標簽沖突; 添加使能模塊,若不存所述標簽沖突,使能對匹配到的所述表項執行所述添加操作; 沖突處理模塊,若存在所述標簽沖突,則通過更換算法更新當前計算出的所述標簽、W 及被所哈希地址指向的所述哈希桶中所有表項的標簽,并重新觸發所述匹配; 字段維護模塊,當發生算法更換時,更新對應的哈希桶中的算法選擇字段。10. 根據權利要求6所述的處理裝置,其特征在于,當所述對應的操作為查找操作或刪 除操作時,所述處理裝置進一步包括:算法選取模塊,在所述標簽轉換模塊根據所述Key計 算具有歸一化長度的標簽之前,依據索引到的所述哈希桶中的算法選擇字段,為所述標簽 的計算選擇對應的算法。
【文檔編號】G06F17/30GK106033420SQ201510105315
【公開日】2016年10月19日
【申請日】2015年3月11日
【發明人】葛長忠, 任凱, 宋建明, 趙云峰, 安紹亮
【申請人】杭州華三通信技術有限公司