当前位置: 首页 > 专利查询>英特尔公司专利>正文

高性能散列系统技术方案

技术编号:2921314 阅读:166 留言:0更新日期:2012-04-11 18:40
公开了一种使用散列函数的高性能、低延迟的数据检索系统。给定一组输入数据,数据检索系统可根据预定的散列函数生成一个或多个索引值和一个签名值。索引值可被应用到各个数据阵列以访问其中的数据单元。在填充阵列时数据单元可包括先前开发的签名。如果来自数据单元的签名与从散列函数生成的签名匹配,那么相关的索引可被应用于各个数据阵列的第二部分以检索请求的数据。

【技术实现步骤摘要】

本专利技术的实施例涉及使用散列函数的存储器查找操作,尤其涉及为大规模存储器设计的此类操作。
技术介绍
“散列”通常描述一种用于在存储系统中查找数据的技术。给定一组输入数据,散列函数生成索引值。当散列值被应用于存储器时,索引值应当使得所请求的数据从其上读取。不幸的是,根据使用的散列函数,索引值不能唯一地识别请求的数据。散列函数有可能可以为两个或更多的唯一输入值生成相同的索引值。这叫做“冲突”。为了防止冲突的可能性,索引值通常用作指向数据链表的指针。链表中的每个元素通常包含正在寻找的数据(这里称为“有效负载”数据),与它相关的输入数据的副本,和指向链表中下一个元素的指针。在这样的系统中,必须连续地检查链表中每个元素,直到输入数据的副本确定已经找到响应数据或者直到链表穷尽。在上面描述的那些系统,连续检查链表中的每个元素浪费了时间。对于高性能应用或者那些所涉及的大型数据集(几百万条或更多的存储条目)尤其不利。例如,考虑查找一个已建立的连接表的过程以支持著名的传输控制协议(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说明了根据本专利技术的另一个实施例的数据检索本文档来自技高网...

【技术保护点】
装置,包括:散列值生成器,具有索引值和签名值的输出,第一存储阵列,具有与索引值输出耦合的输入,比较器,具有与签名值和来自第一阵列的输出耦合的输入,第二存储阵列,具有与索引值输出以及比较器的输出耦合的输入。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:JH克吕格尔WK费格哈利G沃尔里希
申请(专利权)人:英特尔公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1