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

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

【技术领域】
[0001] 本发明涉及网络通信领域,具体地,涉及一种用于网络处理器的建表和查找方法。

【背景技术】
[0002] 随着因特网速度的不断提高、网络流量的不断增加和路由表项数目的不断增大, 使得查表效率越来越成为网络处理器设备性能的瓶颈。影响查表效率的因素主要有两个方 面:一是表的结构即建表的方法,二是查表的方法,即以尽可能少的存储资源,获得较快的 查表速度。
[0003] 在传统的数据结构中,如线性表、trie等,记录在结构中的相对位置是随机的,和 记录的关键字key之间不存在确定的关系,查找过程中需要大量的存储器访问操作。建立 在比较基础上的这一类的查找算法,随着数据的增长,查找的速度由于查找过程中所进行 的比较次数的增加而下降,而且也将占有更多的存储资源。
[0004] 理想的情形是不经过任何比较,一次访存就能得到所查的结果。这就要求在key 和其存储位置之间建立一个确定的对应关系,在查找时,只要根据这个对应关系即可找到 给定key的映射f (key),直接获得结果,这种对应关系称为hash函数,建立的表称为hash 表。而hash函数是一个压缩映射函数,在hash表中不同的key可能得到同一 hash地址, 即不可避免的会产生冲突(Collision)。
[0005] 现有技术中可以通过选择一个较好的hash函数来减少冲突,例如假定选择的 hash函数发生冲突的概率为20%,对冲突的key采用传统多次hash的方式加以区分。那 么,经过第一次查找,命中率为80%,此时将有20%的key需要第二次查找。经过第二次查 找后,命中率将提高到96%。然而,此时仍将有4%的key需要再一次查找,通常,需要多达 10次甚至更多次才能解决完全查找到这些冲突的key。而且通常在这种情形下,每一次查 找所对应的hash表的填充率只能达到20%左右,这就意味着一个存储位置被key填充的概 率只有20%,从而浪费了 80 %的存储资源。因此,现有数据结构的建表、查表方法存在查找 次数多、查表速度慢且浪费存储资源的缺点。


【发明内容】

[0006] 针对现有技术中的缺陷,本发明的目的是提供一种用于网络处理器的建表和查找 方法。
[0007] 根据本发明的一个方面,提供一种用于网络处理器的建表和查找方法,包括以下 步骤:
[0008] 步骤1 :根据所需建立的表项的容量大小,分别建立内部int_hash表、外部ext_ hash表和内外部混合mix_hash表,分配各个表的存储空间,指定各个索引表的大小和首地 址;
[0009] 步骤2 :建立hash表,每个hash表均由索引表和结果表两个子表构成,确定索引 表中每个表项的容量大小,并为每个hash表配置一个空闲地址队列,每个队列存放结果表 的所有地址,索引表的一个存储位置对应一个page,结果表的每个表项entry中存放关键 字key和相应的结果;
[0010] 步骤3 :建立冲突解决策略,对关键字key进行两次hash转换,第一次把key转换 成一个偏移量,第二次把key转换成一个标签,首地址和偏移量共同确定一个page在索引 表中的位置;
[0011] 步骤4:建表
[0012] 步骤41 :根据关键字key和其类型,获取所属的hash表类型以及该表的首地址信 息,根据hash表的类型信息,确定待建立的表属于内部int_hash表、外部ext_hash表还是 内外部混合mix_hash表;
[0013] 步骤42 :把key转换成一个地址偏移量和一个标签,首地址和这个偏移量确定了 该标签在索引表中的存放位置,然后读出该存放位置中的page信息,同时,从空闲地址队 列中读出一个空闲地址作为索引值;
[0014] 步骤43 :若page中存放的标签已满,此时下一页地址有效,标签和索引值存放于 下一个page中;否则,找出第一个标签为空的行,把标签和索引值存放于该行中;
[0015] 步骤5:查表
[0016] 步骤51 :从接收的报文中提取用于查表的关键字key以及hash表的类型和该表 的首地址信息,根据hash表的类型信息,确定待查找的表项位于内部int_hash表、夕卜部 ext_hash表还是内外部混合mix_hash表,把key转换成一个地址偏移量和一个标签,该偏 移量和首地址共同确定一个page在索引表中的位置;
[0017] 步骤52 :采用两级查找的方式进行查找,第一次查找时读出page信息,遍历比较 该page下的所有标签,第二次查找时通过与标签相匹配所对应的索引值读出结果表中的 表项entry,如果该entry中存放的key和查找的key相同,说明查找成功,返回相应的结 果,查找结束;否则,如果尚有其它标签匹配的表项,则以相同的方式读出下一个entry进 行匹配,如果没有其它标签匹配的表项,而此时下一页有效,则读出该page继续进行查找, 否则返回查找失败的结果,查找结束。
[0018] 优选地,步骤3中,当key发生hash冲突时,所有的相关信息都存放在一个page 下,但位于不同的行,通过标签加以区分。
[0019] 优选地,步骤1中所述的内部int_hash表为索引表和结果表容量都较小的表, 其存放在访存速度高但存储容量小的内部存储器中;所述外部ext_hash表为索引表和结 果表容量都较大的表,其存放在访存速度不高但存储容量大的外部存储器中;内外部混合 mix_hash表为索引表容量较小而结果表容量较大的表,其分别存放于内、外部存储器中。
[0020] 优选地,步骤2中,所述空闲地址的数目为索引表大小的4倍。
[0021] 优选地,每个所述page包括η行的两列信息:标签label和索引值entry_addr。
[0022] 优选地,每个所述page还包括下一页有效位link_page_valid和下一页地址 link_page_addr 信息。
[0023] 优选地,η的取值范围为2?8。
[0024] 优选地,对于内部int_hash表和内外部混合mix_hash表,η的典型值为8,对于外 部 ext_hash 表,η 为 6。
[0025] 优选地,所述结果表的一个存储位置对应一个entry,每个entry包括两行信息: 关键字key和结果result。
[0026] 本发明在存取速度高的内部存储器中存放数据较小的表,在容量大的外部存储器 中存放数据较大的表,以此建立不同类型的hash表,合理地利用内外部存储资源,以解决 存储资源和查找速度的平衡问题。并优化hash表的结构,建立两级查找表,解决hash表填 充率和查找效率的问题。
[0027] 当发生hash冲突时,冲突项都存放在一个相同的存储位置上,对各个冲突项打上 标签加以区分,解决hash冲突的问题。同时,采用两级查找的方式,减少存储器的访存次 数,以缩短查找时间,解决hash查找速度的问题。与现有技术相比,本发明具有如下的有益 效果:
[0028] 1、本发明根据表项所需容量的大小和对查找速度的要求,建立不同类型的hash 表,把关键字key及其索引值分块存放,有效地利用了内部存储器访存速度高和外部存储 器容量大的特点,兼顾了存储资源和查找速度的均衡。
[0029] 2、本发明建立两级hash查找表,有效的提高了 hash表填充率和查找效率。
[0030] 如相对于填充率仅有20%的传统多hash方式的hash表,本发明通过建立两级 hash表,其索引表的大小只有关键字key数量的1/4,相应地,hash表的填充概率达到传统 方式的4倍,即80%。假设所有的key散列均匀,则每个page中平均可存放4个key的信 肩、。
[0031] 在查找时,首先对关键字key进行两次hash转换,所有相冲突的key的索引值都 存放在第一个hash函数所确定的位置,而这些冲突的key,可以很容易地通过第二个hash 函数产生的标签label来加以区分,那么经过两次存储器的访问,查找成功的概率将达到 98%以上,在极少的情形下,才需要多次的存储器的访问。
[0032] 3、通过建立两级hash表,进一步提高了存储资源的利用率。
[0033] 虽然索引表的地址是通过hash散列计算得到的,然而在索引表中并不存放实际 的关键字key,而是用来存放key的索引值等少量数据,并且所有的冲突项都存放在同一地 址下的不同行,所需存储空间较小。同时在结果表中,存放key和相应结果的地址是通过空 闲地址队列获得的,从而保证了其地址的连续性,即key和结果是顺序存放的。和传统的多 hash方式相比,有效地节省了存储资源。
[0034] 4、在98 %以上的情形下,只需两次存储器的访问即可查找到所期望的结果 result,从而有效地减少了存储器的访存次数,极大地提高了网络处理器的查找速度。

【专利附图】

【附图说明】
[0035] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、 目的和优点将会变得更明显:
[0036] 图1是本发明的hash表的索引表结构示意图;
[0037] 图2是本发明的hash表的结果表结构示意图;
[0038] 图3是本发明的hash表的两个子表间的链接关系结构不意图;
[0039] 图4是本发明的hash表的索引表中两个page间的链接关系结构示意图;
[0040] 图5是本发明的建表过程的流程原理图;
[0041] 图6是本发明的查表过程的流程原理图。

【具体实施方式】
[0042] 下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术 人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术 人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明 的保护范围。
[0043] 一种用于网络处理器的建表和查找方法,包括以下步骤:
[0044] 步骤1 :根据所需建立的表项的容量大小,分别建立内部int_hash表、外部ext_ hash表和内外部混合mix_hash表,分配各个表的存储空间,指定各个索引表的大小和首地 址。
[0045] 具体地,根据待建的hash表的容量大小,兼顾查找速度和存储资源的平衡,把索 引表和结果表容量都较小的表都存放在访存速度高但存储容量小的内部存储器中,把索 引表和结果表容量都较大的表都存放在访存速度不高但存储容量大的外部存储器中,把索 引表容量较小而结果表容量较大的表分别存放于内、外部存储器中,即分别建立内部int_ hash表、夕卜部ext_hash表和内外部混合mix_hash表。同时,分配各个表的存储空间,输出 各个索引表的大小和首地址等信息。
[0046] 步骤2 :建立hash表,每个hash表均由索引表和结果表两个子表构成,确定索引 表中每个表项的容量大小,并为每个hash表配置一个空闲地址队列,每个队列存放结果表 的所有地址,索引表的一个存储位置对应一个page,结果表的每个表项entry中存放关键 字key和相应的结果。
[0047] 本发明建立一种新型结构的hash表,每个hash表由两个子表构成,其中,第一个 子表为索引表,第二个子表为结果表,可根据实际需要确定索引表中每个表项的容量大小。 同时为每个hash表配置一个空闲地址队列,空闲地址队列的个数和hash表 对应,每 个队列存放结果表的所有地址,这些地址作为空闲地址,空闲地址的数目为索引表大小的4 倍。
[0048] 索引表的一个存储位置对应一个page,结果表的每个表项entry中存放关键字 key和相应的结果。
[0049] 在索引表中,每个page包括η行的两列信息:标签label和索引值entry_addr。 η的取值范围为2?8,典型地,对于内部hash表和内外部混合hash表,η为8,对于外部 hash 表,η 为 6〇
[0050] 每个述page还包括下一页有效位link_page_valid和下一页地址link_page_ addict·。
[0051] 结果表的一个存储位置对应一个entry,每个entry包括两行信息:关键字key和 结果 result。
[0052] 步骤3 :建立冲突解决策略,对关键字key进行两次hash转换,第一次把key转换 成一个偏移量,第二次把key转换成一个标签,首地址和偏移量共同确定一个page在索引 表中的位置。
[0053] 对于所有产生hash冲突的key,相关信息都存入一个page,但位于不同的行,通过 标签加以区分。如,当key发生hash冲突时,所有的相关信息都存放在一个page下,位于 不同的行,通过标签加以区分。
[0054] 步骤4:建表
[0055] 步骤41 :根据关键字key和其类型,获取所属的hash表类型以及该表的首地址信 息,根据hash表的类型信息,确定待建立的表属于内部int_hash表、外部ext_hash表还是 内外部混合mix_hash表;
[0056] 步骤42 :把key转换成一个地址偏移量和一个标签,首地址和这个偏移量确定了 该标签在索引表中的存放位置,然后读出该存放位置中的page信息,同时,从空闲地址队 列中读出一个空闲地址作为索引值;
[0057] 步骤43 :若page中存放的标签已满,此时下一页地址有效,标签和索引值存放于 下一个page中;否则,找出第一个标签为空的行,把标签和索引值存放于该行中;
[0058] 步骤5:查表
[0059] 查表时采用两级查找的方式,第一次查找其在索引表中的索引值,第二次根据这 个索引值查找其在结果表中的匹配值。
[0060] 步骤51 :从接收的报文中提取用于查表的关键字key以及hash表的类型和该表 的首地址等信息,根据hash表的类型信息,确定待查找的表项位于内部int_hash表、外部 ext_hash表还是内外部混合mix_hash表,把key转换成一个地址偏移量和一个标签,该偏 移量和首地址共同确定一个page在索引表中的位置;
[0061] 步骤52 :采用两级查找的方式进行查找,第一次查找时读出page信息,遍历比较 该page下的所有标签,第二次查找时通过与标签相匹配所对应的索引值读出结果表中的 表项entry,如果该entry中存放的key和查找的key相同,说明查找成功,返回相应的结 果,查找结束;否则,如果尚有其它标签匹配的表项,则以相同的方式读出下一个entry进 行匹配,如果没有其它标签匹配的表项,而此时下一页有效,则读出该page继续进行查找, 否则返回查找失败的结果,查找结束。
[0062] 具体地,以下同时结合图1至图6对本发明进行进一步详细说明:
[0063] 1.构造两级结构的hash表,每个hash表由两个子表构成,其中,第一个子表为索 引表,第二个子表为结果表。同时为每个hash表配置一个空闲地址队列,空闲地址的数目 为索引表大小的4倍。
[0064] 索引表的一个存储位置对应一个page,如图1所示,每个page包括η行的两列信 息:标签label和索引值entry_addr,此外还包括下一页有效位link_page_valid和下一 页地址link_page_addr等一行信息。
[0065] 结果表的一个存储位置对应一个entry,如图2所示,每个entry包括两行信息: 关键字key和结果result。
[0066] label用来区分hash冲突,当key发生冲突时,通过和label位于同一行的索引值 entry_addr确定key和result在结果表中的存放位置,如图3所示。
[0067] 当多于η个key产生hash冲突时,表明该page已满,此时link_page_valid置1, 通过link_page_addr来链接下一个page,如图4所示,label和entry_addr存放于该page 下。
[0068] 在索引表中,η的取值范围为2?8,典型地,对于内部hash表和内外部混合hash 表,η为8,对于外部hash表,η为6。
[0069] 2.建表过程,如附图5所示:
[0070] a.从接收的报文中提取用于建表的关键字key以及hash表的类型hash_type和 该表的首地址base_address等信息,根据hash表的类型信息,确定待建立的表属于内部 inthash表、外部ext hash表还是内外部混合mix hash表。
[0071] b.把关键字key转换成一个地址偏移量offset和一个标签label,该偏移量和首 地址共同确定了一个page在索引表中的存放位置。
[0072] c.读出索引表中的page信息。
[0073] d.如果该page中标签未满,从空闲地址队列中获得一个空闲地址作为索引值。把 标签和索引值等信息存放在标签为空的第一行,把key和result写入结果表中索引值所指 向的位置。
[0074] e.如果该page中标签已满,而此时下一页有效位link_page_valid为0,则创建 下一个page。首先从空闲地址队列中获得两个空闲地址,其中第一个空闲地址作为下一页 地址link_page_addr,第二个作为索引值,然后把标签和索引值等信息存放在该page的第 一行,把key和result写入结果表中索引值所指向的位置。
[0075] f.如果该page中标签已满,此时link_page_valid为1,重复上述步骤。
[0076] 3.查找过程,如附图6所示:
[0077] a.从接收的报文中提取用于建表的关键字key以及hash表的类型hash_type和 该表的首地址base_address等信息,根据hash表的类型信息,确定待建立的表属于内部 hash表、夕卜部hash表还是内外部混合hash表。
[0078] b.把key转换成一个地址偏移量offset和一个标签label,该偏移量和首地址共 同确定了一个page在索引表中的存放位置。
[0079] c.读出索引表中的page信息。
[0080] d.如果该page中至少有一个标签匹配,则根据位于标签同一行的索引值读出结 果表中的表项entry。
[0081] e.如果该entry中的key和查找的key相匹配,说明查找成功,返回entry中的结 果result,查找结束。
[0082] f.如果key不匹配,而此时尚有其它的标签匹配项,转入向骤d,否则转向步骤g。
[0083] g.该 page 中下一页有效位 link_page_valid 为 1,根据 link_page_addr 读出相 应的page信息,转向步骤d,否则,返回查找失败的结果,查找结束。
[0084] 本发明根据表项所需容量的大小和对查找速度的要求,建立不同类型的hash表, 把关键字key及其索引值分块存放,有效地利用了内部存储器访存速度高和外部存储器容 量大的特点,兼顾了存储资源和查找速度的均衡,有效的提高了 hash表填充率和查找效 率,查找成功的概率将达到98%以上,提高了存储资源的利用率,极大地提高了网络处理器 的查找速度。
[0085] 以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述 特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影 响本发明的实质内容。
【权利要求】
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信息,同时,从空闲地址队列中 读出一个空闲地址作为索引值; 步骤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继续进行查找,否则 返回查找失败的结果,查找结束。
2. 根据权利要求1所述的用于网络处理器的建表和查找方法,其特征在于,步骤3中, 当key发生hash冲突时,所有的相关信息都存放在一个page下,但位于不同的行,通过标 签加以区分。
3. 根据权利要求1所述的用于网络处理器的建表和查找方法,其特征在于,步骤1中所 述的内部int_hash表为索引表和结果表容量都较小的表,其存放在访存速度高但存储容 量小的内部存储器中;所述外部ext_hash表为索引表和结果表容量都较大的表,其存放在 访存速度不高但存储容量大的外部存储器中;内外部混合mix_hash表为索引表容量较小 而结果表容量较大的表,其分别存放于内、夕卜部存储器中。
4. 根据权利要求1所述的用于网络处理器的建表和查找方法,其特征在于,步骤2中, 所述空闲地址的数目为索引表大小的4倍。
5. 根据权利要求1所述的用于网络处理器的建表和查找方法,其特征在于,每个所述 page包括η行的两列信息:标签label和索引值entry_addr。
6. 根据权利要求5所述的用于网络处理器的建表和查找方法,其特征在于,每个所述 page还包括下一页有效位link_page_valid和下一页地址link_page_addr信息。
7. 根据权利要求5所述的用于网络处理器的建表和查找方法,其特征在于,η的取值范 围为2?8。
8. 根据权利要求7所述的用于网络处理器的建表和查找方法,其特征在于,对于内部 int_hash表和内外部混合mix_hash表,η为8,对于外部ext_hash表,η为6。
9. 根据权利要求1所述的用于网络处理器的建表和查找方法,其特征在于,所述结果 表的一个存储位置对应一个entry,每个entry包括两行信息:关键字key和结果result。
【文档编号】H04L12/743GK104158744SQ201410326150
【公开日】2014年11月19日 申请日期:2014年7月9日 优先权日:2014年7月9日
【发明者】张辉, 李苗 申请人:中国电子科技集团公司第三十二研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1