用于网络处理器的建表和查找方法技术

技术编号:10658103 阅读:165 留言:0更新日期:2014-11-19 18:21
本发明专利技术提供了一种应用于网络处理器中的建表和查表方法,采用建立不同类型的hash表,各表互不相干,独立进行两级查找,首先,根据待建表项的大小建立不同类型的hash表,为各个表分配不同的存储空间,指定表的大小和首地址,然后在查找时,根据从报文提取的信息获得查找关键字key、查找表的类型和该表的首地址,同时对关键字key进行两次hash转换,第一次把key转换成偏移地址以确定其在索引表中的索引值,第二次把key转换成标签用来区分冲突项,接着根据该索引值从结果表中读取内容进行匹配,以获得查找的结果。本发明专利技术有效地降低了对存储器的访存次数,进一步提高了网络处理器的查表速度和存储器的资源利用率。

【技术实现步骤摘要】
用于网络处理器的建表和查找方法
本专利技术涉及网络通信领域,具体地,涉及一种用于网络处理器的建表和查找方法。
技术介绍
随着因特网速度的不断提高、网络流量的不断增加和路由表项数目的不断增大,使得查表效率越来越成为网络处理器设备性能的瓶颈。影响查表效率的因素主要有两个方面:一是表的结构即建表的方法,二是查表的方法,即以尽可能少的存储资源,获得较快的查表速度。在传统的数据结构中,如线性表、trie等,记录在结构中的相对位置是随机的,和记录的关键字key之间不存在确定的关系,查找过程中需要大量的存储器访问操作。建立在比较基础上的这一类的查找算法,随着数据的增长,查找的速度由于查找过程中所进行的比较次数的增加而下降,而且也将占有更多的存储资源。理想的情形是不经过任何比较,一次访存就能得到所查的结果。这就要求在key和其存储位置之间建立一个确定的对应关系,在查找时,只要根据这个对应关系即可找到给定key的映射f(key),直接获得结果,这种对应关系称为hash函数,建立的表称为hash表。而hash函数是一个压缩映射函数,在hash表中不同的key可能得到同一hash地址,即不可避免的会产生冲突(Collision)。现有技术中可以通过选择一个较好的hash函数来减少冲突,例如假定选择的hash函数发生冲突的概率为20%,对冲突的key采用传统多次hash的方式加以区分。那么,经过第一次查找,命中率为80%,此时将有20%的key需要第二次查找。经过第二次查找后,命中率将提高到96%。然而,此时仍将有4%的key需要再一次查找,通常,需要多达10次甚至更多次才能解决完全查找到这些冲突的key。而且通常在这种情形下,每一次查找所对应的hash表的填充率只能达到20%左右,这就意味着一个存储位置被key填充的概率只有20%,从而浪费了80%的存储资源。因此,现有数据结构的建表、查表方法存在查找次数多、查表速度慢且浪费存储资源的缺点。
技术实现思路
针对现有技术中的缺陷,本专利技术的目的是提供一种用于网络处理器的建表和查找方法。根据本专利技术的一个方面,提供一种用于网络处理器的建表和查找方法,包括以下步骤:步骤1:根据所需建立的表项的容量大小,分别建立内部int_hash表、外部ext_hash表和内外部混合mix_hash表,分配各个表的存储空间,指定各个索引表的大小和首地址;步骤2:建立hash表,每个hash表均由索引表和结果表两个子表构成,确定索引表中每个表项的容量大小,并为每个hash表配置一个空闲地址队列,每个队列存放结果表的所有地址,索引表的一个存储位置对应一个page,结果表的每个表项entry中存放关键字key和相应的结果;步骤3:建立冲突解决策略,对关键字key进行两次hash转换,第一次把key转换成一个偏移量,第二次把key转换成一个标签,首地址和偏移量共同确定一个page在索引表中的位置;步骤4:建表步骤41:根据关键字key和其类型,获取所属的hash表类型以及该表的首地址信息,根据hash表的类型信息,确定待建立的表属于内部int_hash表、外部ext_hash表还是内外部混合mix_hash表;步骤42:把key转换成一个地址偏移量和一个标签,首地址和这个偏移量确定了该标签在索引表中的存放位置,然后读出该存放位置中的page信息,同时,从空闲地址队列中读出一个空闲地址作为索引值;步骤43:若page中存放的标签已满,此时下一页地址有效,标签和索引值存放于下一个page中;否则,找出第一个标签为空的行,把标签和索引值存放于该行中;步骤5:查表步骤51:从接收的报文中提取用于查表的关键字key以及hash表的类型和该表的首地址信息,根据hash表的类型信息,确定待查找的表项位于内部int_hash表、外部ext_hash表还是内外部混合mix_hash表,把key转换成一个地址偏移量和一个标签,该偏移量和首地址共同确定一个page在索引表中的位置;步骤52:采用两级查找的方式进行查找,第一次查找时读出page信息,遍历比较该page下的所有标签,第二次查找时通过与标签相匹配所对应的索引值读出结果表中的表项entry,如果该entry中存放的key和查找的key相同,说明查找成功,返回相应的结果,查找结束;否则,如果尚有其它标签匹配的表项,则以相同的方式读出下一个entry进行匹配,如果没有其它标签匹配的表项,而此时下一页有效,则读出该page继续进行查找,否则返回查找失败的结果,查找结束。优选地,步骤3中,当key发生hash冲突时,所有的相关信息都存放在一个page下,但位于不同的行,通过标签加以区分。优选地,步骤1中所述的内部int_hash表为索引表和结果表容量都较小的表,其存放在访存速度高但存储容量小的内部存储器中;所述外部ext_hash表为索引表和结果表容量都较大的表,其存放在访存速度不高但存储容量大的外部存储器中;内外部混合mix_hash表为索引表容量较小而结果表容量较大的表,其分别存放于内、外部存储器中。优选地,步骤2中,所述空闲地址的数目为索引表大小的4倍。优选地,每个所述page包括n行的两列信息:标签label和索引值entry_addr。优选地,每个所述page还包括下一页有效位link_page_valid和下一页地址link_page_addr信息。优选地,n的取值范围为2~8。优选地,对于内部int_hash表和内外部混合mix_hash表,n的典型值为8,对于外部ext_hash表,n为6。优选地,所述结果表的一个存储位置对应一个entry,每个entry包括两行信息:关键字key和结果result。本专利技术在存取速度高的内部存储器中存放数据较小的表,在容量大的外部存储器中存放数据较大的表,以此建立不同类型的hash表,合理地利用内外部存储资源,以解决存储资源和查找速度的平衡问题。并优化hash表的结构,建立两级查找表,解决hash表填充率和查找效率的问题。当发生hash冲突时,冲突项都存放在一个相同的存储位置上,对各个冲突项打上标签加以区分,解决hash冲突的问题。同时,采用两级查找的方式,减少存储器的访存次数,以缩短查找时间,解决hash查找速度的问题。与现有技术相比,本专利技术具有如下的有益效果:1、本专利技术根据表项所需容量的大小和对查找速度的要求,建立不同类型的hash表,把关键字key及其索引值分块存放,有效地利用了内部存储器访存速度高和外部存储器容量大的特点,兼顾了存储资源和查找速度的均衡。2、本专利技术建立两级hash查找表,有效的提高了hash表填充率和查找效率。如相对于填充率仅有20%的传统多hash方式的hash表,本专利技术通过建立两级hash表,其索引表的大小只有关键字key数量的1/4,相应地,hash表的填充概率达到传统方式的4倍,即80%。假设所有的key散列均匀,则每个page中平均可存放4个key的信息。在查找时,首先对关键字key进行两次hash转换,所有相冲突的key的索引值都存放在第一个hash函数所确定的位置,而这些冲突的key,可以很容易地通过第二个hash函数产生的标签label来加以区分,那么经过两次存储器的访问,查找成功的本文档来自技高网
...
用于网络处理器的建表和查找方法

【技术保护点】
一种用于网络处理器的建表和查找方法,其特征在于,包括以下步骤:步骤1:根据所需建立的表项的容量大小,分别建立内部int_hash表、外部ext_hash表和内外部混合mix_hash表,分配各个表的存储空间,指定各个索引表的大小和首地址;步骤2:建立hash表,每个hash表均由索引表和结果表两个子表构成,确定索引表中每个表项的容量大小,并为每个hash表配置一个空闲地址队列,每个队列存放结果表的所有地址,索引表的一个存储位置对应一个page,结果表的每个表项entry中存放关键字key和相应的结果;步骤3:建立冲突解决策略,对关键字key进行两次hash转换,第一次把key转换成一个偏移量,第二次把key转换成一个标签,首地址和偏移量共同确定一个page在索引表中的位置;步骤4:建表步骤41:根据关键字key和其类型,获取所属的hash表类型以及该表的首地址信息,根据hash表的类型信息,确定待建立的表属于内部int_hash表、外部ext_hash表还是内外部混合mix_hash表;步骤42:把key转换成一个地址偏移量和一个标签,首地址和这个偏移量确定了该标签在索引表中的存放位置,然后读出该存放位置中的page信息,同时,从空闲地址队列中读出一个空闲地址作为索引值;步骤43:若page中存放的标签已满,此时下一页地址有效,标签和索引值存放于下一个page中;否则,找出第一个标签为空的行,把标签和索引值存放于该行中;步骤5:查表步骤51:从接收的报文中提取用于查表的关键字key以及hash表的类型和该表的首地址信息,根据hash表的类型信息,确定待查找的表项位于内部int_hash表、外部ext_hash表还是内外部混合mix_hash表,把key转换成一个地址偏移量和一个标签,该偏移量和首地址共同确定一个page在索引表中的位置;步骤52:采用两级查找的方式进行查找,第一次查找时读出page信息,遍历比较该page下的所有标签,第二次查找时通过与标签相匹配所对应的索引值读出结果表中的表项entry,如果该entry中存放的key和查找的key相同,说明查找成功,返回相应的结果,查找结束;否则,如果尚有其它标签匹配的表项,则以相同的方式读出下一个entry进行匹配,如果没有其它标签匹配的表项,而此时下一页有效,则读出该page继续进行查找,否则返回查找失败的结果,查找结束。...

【技术特征摘要】
1.一种用于网络处理器的建表和查找方法,其特征在于,包括以下步骤:步骤1:根据所需建立的表项的容量大小,分别建立内部int_hash表、外部ext_hash表和内外部混合mix_hash表,分配各个表的存储空间,指定各个索引表的大小和首地址;步骤2:建立hash表,每个hash表均由索引表和结果表两个子表构成,确定索引表中每个表项的容量大小,并为每个hash表配置一个空闲地址队列,每个队列存放结果表的所有地址,索引表的一个存储位置对应一个page,结果表的每个表项entry中存放关键字key和相应的结果;步骤3:建立冲突解决策略,对关键字key进行两次hash转换,第一次把key转换成一个偏移量,第二次把key转换成一个标签,首地址和偏移量共同确定一个page在索引表中的位置;步骤4:建表:步骤41:根据关键字key和其类型,获取所属的hash表类型以及该表的首地址信息,根据hash表的类型信息,确定待建立的表属于内部int_hash表、外部ext_hash表还是内外部混合mix_hash表;步骤42:把key转换成一个地址偏移量和一个标签,首地址和这个偏移量确定了page在索引表中的存放位置,然后读出该存放位置中的page信息,同时,从空闲地址队列中读出一个空闲地址作为索引值;步骤43:若page中存放的标签已满,此时下一页地址有效,标签和索引值存放于下一个page中;否则,找出第一个标签为空的行,把标签和索引值存放于该行中;步骤5:查表:步骤51:从接收的报文中提取用于查表的关键字key以及hash表的类型和该表的首地址信息,根据hash表的类型信息,确定待查找的表项位于内部int_hash表、外部ext_hash表还是内外部混合mix_hash表,把key转换成一个地址偏移量和一个标签,该偏移量和首地址共同确定一个page在索引表中的位置;步骤52:采用两级查找的方式进行查找,第一次查找时读出page信息,遍历比较该page下的所有标签,第二次查找时通过与标签...

【专利技术属性】
技术研发人员:张辉李苗
申请(专利权)人:中国电子科技集团公司第三十二研究所
类型:发明
国别省市:上海;31

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

1