專利名稱:高性能散列系統的制作方法
技術領域:
本發明的實施例涉及使用散列函數的存儲器查找操作,尤其涉及為大規模存儲器設計的此類操作。
背景技術:
“散列”通常描述一種用于在存儲系統中查找數據的技術。給定一組輸入數據,散列函數生成索引值。當散列值被應用于存儲器時,索引值應當使得所請求的數據從其上讀取。不幸的是,根據使用的散列函數,索引值不能唯一地識別請求的數據。散列函數有可能可以為兩個或更多的唯一輸入值生成相同的索引值。這叫做“沖突”。為了防止沖突的可能性,索引值通常用作指向數據鏈表的指針。鏈表中的每個元素通常包含正在尋找的數據(這里稱為“有效負載”數據),與它相關的輸入數據的副本,和指向鏈表中下一個元素的指針。在這樣的系統中,必須連續地檢查鏈表中每個元素,直到輸入數據的副本確定已經找到響應數據或者直到鏈表窮盡。
在上面描述的那些系統,連續檢查鏈表中的每個元素浪費了時間。對于高性能應用或者那些所涉及的大型數據集(幾百萬條或更多的存儲條目)尤其不利。例如,考慮查找一個已建立的連接表的過程以支持著名的傳輸控制協議(TCP)。給定一個包括IP源地址、IP目的地址、TCP源端口和TCP目的端口的輸入元組,該過程需要查找存儲器以檢索代表連接狀態的數據。使用傳統的鏈表實現,當有效連接的數量增加時,沖突率和鏈表的長度也增加。假設,如果檢索命中帶有六個條目的鏈表,系統必須讀取每個條目以便檢測匹配。因為表中的每個條目包括指向列表下一個條目的指針,不同的條目不能并行讀取。在確定輸入數據是命中還是未命中存儲器之前要求多達六個的連續存儲器的讀取。于是,此類實現的延遲問題會很嚴重。
在一個著名的TCP實現中,IP源和目的地址的每個都被表示成32位的量,并且TCP源和目的端口被表示成16位的量。為了適應這些值中的所有可能變化,如果不用散列函數實現,TCP連接表需要296個條目。然而,生成32位散列值的散列函數將該連接表的大小減小到232個條目(大概四百三十萬個條目)。在另一個TCP實現中,IP源和目的地址的每個被表示成128位的量,TCP連接表需要2228個條目。32位散列值再次將連接表的大小減小到232個條目。在這個后面的實現中,輸入數據的非常巨大數量的唯一組合將映射到相同的四百三十萬個散列值上,與第一個實現比較,沖突率成比例地增加。
發明者察覺到在本領域中需要高性能散列算法,來為大規模存儲器提供改善的性能。他們還察覺到在本領域中需要一個基于散列的查找系統,其可以避免連續讀取整個鏈表數據結構的問題。
圖1是根據本發明的實施例的系統100的框圖。
圖2是根據本發明的實施例的系統200的框圖。
圖3是根據本發明的實施例的方法1000的流程圖。
圖4(a)和4(b)是說明根據本發明的實施例的存儲空間。
圖5說明根據本發明的實施例的方法。
具體實施例方式
本發明的實施例提供了一個使用散列的高性能、低延遲數據檢索系統。給定一組輸入數據,數據檢索系統可根據預定的散列函數生成一個或多個索引值和一個簽名值。索引值可被應用到各個數據陣列以訪問其中的數據單元。在填充系統時數據單元可包括先前開發的簽名。如果來自數據單元的簽名與從散列函數生成的簽名匹配,那么相關的索引可被應用于相應數據陣列的第二部分以檢索有效負載數據。
圖1說明了根據本發明的實施例的數據檢索系統100。系統100可包括散列值生成器110,主和輔助數據陣列120、130和比較器140。散列值生成器110,如它的名字所表明的,可將預定的散列函數應用于輸入數據,在線路112上生成索引值和在線路114上生成簽名值。主數據陣列120可為使用的地址的每個唯一的值存儲數據單元122,該數據單元122存儲一個或多個簽名值(S0-S3)。輔助數據陣列130可存儲與每個輸入數據值相關的有效負載數據(例如132、134)。
系統100可響應外部查找命令,以查找響應其的有效負載數據。查找命令可包括識別有效負載數據的輸入值。當輸入值應用到系統100時,散列函數生成器110可生成索引和簽名值112、114。索引值112可作為地址應用到主數據陣列120。響應索引值112,主數據陣列120可將數據單元120輸出到比較器140。數據單元122可包括多個用于存儲簽名值的槽。
比較器140可將線路114上的簽名值與存在于檢索的數據單元122中的任一簽名比較。比較器140可不僅可檢測簽名之間的匹配還可檢測數據單元122內的匹配簽名的槽的位置。在圖1所示的例子中,數據單元被示例成包括四個槽位置S0-S3。如果在位置S2的簽名與線路114上的簽名匹配,比較器可在線路142上生成一個輸出,指明在第三個槽位置處發生簽名匹配。
索引值112和位置值142可被輸入到輔助數據陣列130并合成為地址信號。作為響應,輔助數據陣列130可從陣列130內輸出一個單位的有效負載數據132。響應查找命令返回該有效負載數據。
前面的實施例避免了上面提到的鏈表散列系統中固有的延遲。不考慮索引值之間的沖突率,只需要兩個存儲器讀取就可以從存儲器系統中檢索有效負載數據。這樣,當給定的索引值仍然不能唯一地表示輸入數據時,前面的實施例解決了在主數據陣列中使用簽名時的多義性。簽名的位置有助于確定有效負載數據在存儲器中的位置并使系統避免了在鏈表系統中的多個條目之上拖拽。
實施例還允許系統設計者管理系統中存在的數據陣列的大小。考慮一個例子,其中散列函數將IP/TCP輸入數據的2228個組合減少到128位的散列值。在這個例子中,可將32位的散列值作為索引值,以及將另外8位的散列值作為簽名值。32位的索引值得出一個232的主陣列大小(同樣,大約為4百三十萬個條目)。為了這個例子的目的,可以選擇在每個條目中提供8個槽以便存儲簽名值。這會使輔助陣列具有大概三千四百萬個條目。作為對比,如果只簡單地將32位的索引和8位的簽名值考慮為一個集合的索引值,這就需要具有大概十一億個條目的陣列表--大概是聯合的主和輔助陣列大小的28倍。這樣,前面的實施例能保留存儲資源。
期望在實踐中能夠設計本實施例的主數據陣列120以包括足夠數量的簽名位置,來適應由于散列值生成器110所使用的散列函數而引起的期望的沖突率。沖突率越高,槽的數量就越大。
如所解釋的,散列值生成器110可根據散列函數運行。可在本發明的各種實施例中使用任意的各種散列函數。已知各種散列函數,并且它們的每一個按照它們的復雜度和輸入值之間的沖突概率而變化。在更高層,散列函數根據不可歸約的多項式生成散列值。例如,從如上所述的128位IP地址和16位TCP端口指示符,散列函數可生成128位的散列值。這里的索引值和簽名值可簡單地從該128的值的預定部分提取。雖然允許,但是如果索引值和簽名值是從散列值的未重疊部分提取,則可最小化沖突率。
根據使用的散列函數,可能在簽名值之中發生沖突。在另一個實施例中,如圖1中所示的剖視圖,簽名沖突可通過將有效負載數據和它的相關輸入值一起存儲到輔助數據陣列130的條目136中來解決。當從輔助數據陣列130讀取數據時,第二比較器150可將接收的輸入數據和從選擇的條目136輸出的輸入數據比較。如果它們匹配,那么響應查找命令返回來自條目136的有效負載數據。如果不匹配,那么根據散列函數的錯誤沖突來選擇數據,并且可能不響應查找命令。
圖2說明了根據本發明的另一個實施例的數據檢索系統200。在這個實施例中,系統可包括多個獨立的主和輔助數據陣列集合。兩個集合(集合1和集合2)在圖2的例子中示出,但是因為適應不同的索引值和簽名值之間的任何期望的沖突率的需要這個數字還會增加。
系統200可包括散列值生成器210,一對主數據陣列220、230和一對輔助數據陣列240、250。在這個實施例中,散列值生成器可將散列函數應用到輸入數據以從其中生成散列值。散列值的第一部分可用作要被應用于第一主數據陣列220的索引(索引1)。散列值的第二部分可用作要被應用于第二主數據陣列230的第二索引(索引2)。散列值的第三部分可選擇用作簽名。
響應索引1的值,第一主數據陣列220可輸出包括多個簽名的數據單元,該簽名由其間預定的槽位置提供。每個來自第一主數據陣列220的簽名可與來自散列值生成器210的簽名比較。在匹配時,索引1的值和指明匹配簽名的槽位置的槽位置值可被應用于第一輔助數據陣列240。這些輸入可引起第一輔助數據陣列240從其中輸出數據值。第一輔助數據陣列240的輸出可響應查找命令。
根據一個實施例,在主和輔助數據陣列的附加集合中(例如230,250)會發生一個互補過程。當把索引2的值施加到第二主數據陣列230時,會使得從中輸出數據。該數據包括多個先前在其中預定位置處存儲的簽名值。對所輸出的簽名值和來自散列值生成器210的簽名值輸出進行比較。在匹配時,索引2的值和匹配簽名的位置可被應用于第二輔助數據陣列250。第二輔助數據陣列250可輸出響應查找命令的數據。
圖2的實施例還減少了輸出數據之間沖突的可能性。如在圖1的實施例中,索引值(即,索引)和簽名值的使用減少了系統允許多個輸入數據集合引用主數據陣列中相同條目的可能性。另外,圖2的實施例通過多個索引值(索引1,索引2)和簽名值的一起使用而為防止沖突提供了附加保護。
根據本發明的實施例,在圖2的虛線部分所示,系統200可包括與輔助數據陣列240、250的輸出相耦合的比較器260、270的附加層。在這個實施例中,輔助數據陣列的條目可包括有效負載數據和同有效負載數據對應的輸入數據兩者。比較器260、270可確定輸入到散列值生成器210的數據是否與從相應輔助數據陣列240、250輸出的值匹配。如果匹配,那么可確定有效負載數據響應于輸入數據。否則,有效負載數據可被認作沒有響應。
圖3是根據本發明的實施例的方法1000的流程圖。當新輸入數據可用時,散列函數對輸入數據進行操作(框1010)。索引值和簽名值可從由其獲得的散列值選擇。索引值可被用于從數據陣列檢索第一數據單元(框1020)。之后,簽名值可與包含在數據單元內的簽名值進行比較,以確定是否匹配(框1030,1040)。如果發生匹配,那么可將索引值和被檢索的數據單元內的匹配簽名的位置作為地址從存儲器檢索第二數據單元(框1050)。第二數據單元可包含響應查找命令的數據(框1060)。
如果沒有來自第一數據單元的簽名匹配新生成的簽名,那么系統返回對查找命令的響應,指明請求的數據不在存儲器中(框1070)。
在可替換的實施例中,當從存儲器檢索第二數據單元時,該方法可比較輸入數據和存在于第二數據單元的輸入數據段,并且確定它們之間是否匹配(框1080)。如果匹配,該方法進行到框1060,將存儲在第二數據單元中的有效負載數據作為對查找命令的響應。如果不匹配,該方法進行到框1080并返回查找命令未命中存儲器的指示(框1070)。
在涉及到從散列函數獲取多個索引值的實施例中,例如來自圖2的索引1和索引2,方法1000可為每個索引值獨立地執行由框1020-1080說明的操作。在圖3中提供界限框1090以說明這一功能。
在特定應用中,如果查找命令未命中存儲系統,將新的條目分配給查找命令的輸入數據。例如,在TCP應用中,如果輸入數據不訪問有效連接,那么可建立新連接。這樣,一個實施例在未命中時允許新條目被分配給存儲系統。新實施例的分配能使簽名被存儲在主數據陣列中未占用的槽中(框1100)而有效負載數據被存儲在對應輔助數據陣列的一個條目中,其位置由索引和所生成的簽名當前占用的槽識別(框1110)。
前面的描述已經在解釋了在離散數據陣列環境中本發明的運行。在一個實施例中,這些陣列的每一個可分布到圖4中所示的通用存儲系統。圖4(a)說明存儲空間中的主和輔助數據陣列410、420,其中每個數據陣列是可通過基存儲地址識別。在這個實施例中,從主數據陣列410訪問數據單元可與將索引值用作第一基地址的偏移量一樣簡單。在這個實施例中,從輔助數據陣列420訪問數據單元可通過將索引值和位置值作為輔助數據陣列的基地址的偏移量而發生。當然,不要求主和輔助數據陣列410、420在存儲器的連續空間中提供或要去它們如圖4(a)中所示互相鄰接。在一個實施例中,較小的主數據陣列410可在SRAM存儲器中給出,而輔助數據陣列420可在DRAM存儲器中給出。根據需要,前面的實施例的原則能與其它存儲管理策略聯合地使用。
在另一個實施例中,如圖4(b)說明的,存儲的簽名和對應的有效負載數據可被存儲為存儲器中相連的單元430、440。在這個系統中,簽名可存儲在從基地址偏移了N*L*index量的存儲器位置上,其中N表示每個主陣列條目所存儲的簽名的數量(在圖4(b)的例子中N=4)和L表示以字節為單位的簽名段的長度。相關的有效負載數據可存儲在存儲器中與存儲的簽名相鄰的位置處。如果發生簽名匹配,有效負載部分可從主陣列條目偏移匹配簽名的槽位置(例如,(N*L*index)+1,(N*L*index)+2等)。
圖5是根據本發明的實施例,選擇數據陣列多個集合的其中一個以存儲新的有效負載數據的方法2000的流程圖。如提到的,在查找操作期間,不同的索引值可引起從每個主數據陣列檢索數據單元。根據實施例,該方法計算在每個這些數據單元中未占用的槽的數量(框2010);未占用的槽可用于存儲新的簽名值。該方法還可確定在查找期間在任一位置中有多少產生簽名匹配的數據單元(框2020)。如果沒有數據單元能引起與生成的簽名值的匹配,那么該方法可確定哪個數據單元具有最大數量的空槽(框2030)。該方法可引起在查找期間生成的簽名值被存儲在對應主數據陣列的數據單元的空槽中(框2040)。該方法還可引起有效負載數據被存儲在相關輔助數據陣列的一個位置中(框2050),該位置由索引值和在主數據陣列中當前占用的槽所指明的位置所指示。如果對于系統中所有的主數據陣列均發生了數據匹配,還可使用在框2030、2040和2050中描述的操作。
如果一些數據單元引起匹配,那么有效負載數據可存儲在沒有引起匹配的集合之一中(框2060)。簽名值可存儲在主陣列的空槽中,并且有效負載數據可存儲在對應于現在占用的槽的索引和位置的輔助陣列的條目中(框2070、2080)。如果存在多個不引起與簽名匹配的數據條目,那么在其中可選擇對應于具有最大空槽數量的數據單元的集合,按照與框2030的一致的方式使用。
在這里特別說明和描述了本發明的幾個實施例。但是,需要理解本發明的修改和變化可由上面的教導覆蓋,并落在所附權利要求的范圍內,而不偏離本發明的思想和期望的范圍。
權利要求
1.裝置,包括散列值生成器,具有索引值和簽名值的輸出,第一存儲陣列,具有與索引值輸出耦合的輸入,比較器,具有與簽名值和來自第一陣列的輸出耦合的輸入,第二存儲陣列,具有與索引值輸出以及比較器的輸出耦合的輸入。
2.權利要求1的裝置,其中第一存儲陣列包括多個條目,每個條目具有存儲簽名值的段。
3.權利要求1的裝置,其中第二存儲陣列包括多個條目,每個條目具有響應于將被輸入到散列值生成器的輸入數據值而存儲有效負載數據的段。
4.權利要求3的裝置,其中第二存儲陣列的條目還包括存儲與有效負載數據相關的輸入數據的副本的段。
5.權利要求4的裝置,還包括與散列值生成器的輸入以及第二存儲陣列耦合的比較器。
6.權利要求1的裝置,其中比較器的輸出包括位置標識符,其指明在陣列條目中引起與簽名值的匹配的段。
7.權利要求1的裝置,還包括到散列值生成器的輸入。
8.權利要求1的裝置,其中散列值生成器具有IP源和目的地址和TCP源和目的端口指示符的輸入。
9.權利要求8的裝置,其中IP源和目的地址具有32位長度。
10.權利要求8的裝置,其中IP源和目的地址具有128位長度。
11.權利要求1的裝置,其中從通用散列值的未重疊部分選擇索引值和簽名值。
12.權利要求1的裝置,其中第一存儲陣列在SRAM中給出,而第二存儲陣列在DRAM中給出。
13.權利要求1的裝置,其中第一和第二存儲陣列是通用存儲系統中的混合的成員。
14.裝置,包括散列值生成器,具有至少兩個索引值和一個簽名值的輸出,對于每個來自散列值生成器的索引值輸出第一存儲陣列,具有與各個索引值輸出耦合的輸入,比較器,具有與簽名值以及來自第一陣列的輸出耦合的輸入,第二存儲陣列,具有與各個索引值輸出以及比較器的輸出耦合的輸入。
15.權利要求14的裝置,其中第一存儲陣列的條目包括多個段以存儲簽名值。
16.權利要求14的裝置,還包括比較器,其具有一對分別與第二存儲陣列的輸出以及散列值生成器的輸入耦合的輸入。
17.權利要求14的裝置,其中第二存儲陣列的條目只存儲有效負載數據。
18.權利要求14的裝置,其中第二存儲陣列的條目具有段,以存儲有效負載數據以及與有效負載數據對應的輸入數據。
19.權利要求14的裝置,其中散列值生成器具有IP源和目的地址以及TCP源和目的端口指示符的輸入。
20.權利要求19的裝置,其中IP源和目的地址具有32位長度。
21.權利要求19的裝置,其中IP源和目的地址具有128位長度。
22.權利要求14的裝置,其中從通用散列值的未重疊部分選擇索引值和簽名值。
23.權利要求14的裝置,其中第一存儲陣列在SRAM中給出和第二存儲陣列在DRAM中給出。
24.權利要求14的裝置,其中第一和第二存儲陣列是通用存儲系統中的混合的成員。
25.一種數據檢索方法,包括響應輸入數據,通過散列函數生成索引值和簽名值,使用索引值檢索第一數據單元,比較第一數據單元中的簽名值和生成的簽名值,如果發生匹配,利用索引值和簽名值的位置來檢索第二數據單元。
26.權利要求25的數據檢索方法,還包括比較輸入數據和第二數據單元的一部分數據,并且如果它們匹配,輸出該數據單元的第二部分。
27.權利要求26的數據檢索方法,還包括,如果輸入數據和所述數據部分不匹配,輸出輸入數據未命中存儲器的指示。
28.權利要求25的數據檢索方法,還包括,如果生成的簽名與第一數據單元中的任何簽名都不匹配,將新的條目分配給輸入數據并且將生成的簽名存儲到第一數據單元的未占用位置中。
29.權利要求25的數據檢索方法,其中從通用散列值的未重疊部分選擇索引值和簽名值的每一個。
30.權利要求25的數據檢索方法,其中輸入數據是IP源和目的地址以及TCP源和目的端口指示符。
31.權利要求30的數據檢索方法,其中IP源和目的地址具有32位長度。
32.權利要求30的數據檢索方法,其中IP源和目的地址具有128位長度。
33.一種數據檢索方法,包括響應輸入數據,通過散列函數生成多個索引值和一個簽名值,對于每個索引值使用索引值從對應的第一存儲陣列檢索數據單元,比較第一數據單元中的簽名值和生成的簽名值,如果發生匹配,利用索引值和簽名值的位置從對應的第二存儲陣列檢索第二數據單元。
34.權利要求33的數據檢索方法,還包括比較輸入數據和第二數據單元的一部分數據,并且如果它們匹配,輸出該數據單元的第二部分。
35.權利要求34的數據檢索方法,還包括,如果輸入數據和任何第二數據單元都不匹配,輸出輸入數據未命中存儲器的指示。
36.權利要求33的數據檢索方法,還包括,如果生成的簽名與第一數據單元中的任何簽名都不匹配,將新的條目分配給輸入數據并且將生成的簽名存儲到第一數據單元的未占用的位置中。
37.權利要求33的數據檢索方法,其中從通用散列值的未重疊部分選擇索引值和簽名值的每一個。
38.權利要求33的數據檢索方法,其中輸入數據是IP源和目的地址以及TCP源和目的端口指示符。
39.權利要求38的數據檢索方法,其中IP源和目的地址具有32位長度。
40.權利要求38的數據檢索方法,其中IP源和目的地址具有128位長度。
全文摘要
公開了一種使用散列函數的高性能、低延遲的數據檢索系統。給定一組輸入數據,數據檢索系統可根據預定的散列函數生成一個或多個索引值和一個簽名值。索引值可被應用到各個數據陣列以訪問其中的數據單元。在填充陣列時數據單元可包括先前開發的簽名。如果來自數據單元的簽名與從散列函數生成的簽名匹配,那么相關的索引可被應用于各個數據陣列的第二部分以檢索請求的數據。
文檔編號G06F17/30GK1577326SQ200410054520
公開日2005年2月9日 申請日期2004年7月22日 優先權日2003年7月23日
發明者J·H·克呂格爾, W·K·費格哈利, G·沃爾里希 申請人:英特爾公司