高性能散列系统的制作方法

文档序号:6411701阅读:181来源:国知局
专利名称:高性能散列系统的制作方法
技术领域
本发明的实施例涉及使用散列函数的存储器查找操作,尤其涉及为大规模存储器设计的此类操作。
背景技术
“散列”通常描述一种用于在存储系统中查找数据的技术。给定一组输入数据,散列函数生成索引值。当散列值被应用于存储器时,索引值应当使得所请求的数据从其上读取。不幸的是,根据使用的散列函数,索引值不能唯一地识别请求的数据。散列函数有可能可以为两个或更多的唯一输入值生成相同的索引值。这叫做“冲突”。为了防止冲突的可能性,索引值通常用作指向数据链表的指针。链表中的每个元素通常包含正在寻找的数据(这里称为“有效负载”数据),与它相关的输入数据的副本,和指向链表中下一个元素的指针。在这样的系统中,必须连续地检查链表中每个元素,直到输入数据的副本确定已经找到响应数据或者直到链表穷尽。
在上面描述的那些系统,连续检查链表中的每个元素浪费了时间。对于高性能应用或者那些所涉及的大型数据集(几百万条或更多的存储条目)尤其不利。例如,考虑查找一个已建立的连接表的过程以支持著名的传输控制协议(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·沃尔里希 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1