通过软件搬移降低hash冲突的方法及装置制造方法

文档序号:6516681阅读:196来源:国知局
通过软件搬移降低hash冲突的方法及装置制造方法
【专利摘要】本发明揭示了一种通过软件搬移降低HASH冲突的方法及装置,在将任意长度的二进制值(key)存入RAM中时,首先将RAM分成至少两个存储块,每个存储块采用不同的哈希函数将所述二进制值映射至其中不同的存储位置;当所述待存储的第一二进制值在所有存储块中相应的存储位置都已被已存储的第二二进制值占用时,则通过搬移模块将其中一个存储块中的已存储的第二二进制值搬移至其他存储块中对应的为空的存储位置进行存储,进而使得第一二进制值能够存储在搬移出第二二进制值的存储位置。本发明通过二进制值的搬移,最大化的利用了RAM的规格,并且减少了TCAM的使用,节省了处理器的成本。
【专利说明】通过软件搬移降低HASH冲突的方法及装置
【技术领域】
[0001]本发明涉及通信领域,尤其是涉及网络通信中对单播、组播、广播业务进行分层队 列调度的方法。
【背景技术】
[0002]在网络处理器(如ASIC)中进行表项查找并存储二级制数的方法有很多,包括使 用最为广泛的基于TCAM (ternary content addressable memory,三态内容寻址存储器) 进行查找的方法,以及一些通过SRAM软件的查找方法如HASH(哈希函数)查找方法。其中 TCAM查找方法是通过TCAM的第三种状态掩码来实现,因此其既能进行精确匹配查找,又能 进行模糊匹配查找,且具有查找速度快、操作简单的优点,然TCAM查找的缺点也很明显,SP 成本高,功耗大。因此,目前网络处理器中的一部分查找改用HASH查找方法来实现,因为使 用HASH查找方法只需要使用RAM,而RAM价格比TCAM低。
[0003]然而通过使用HASH算法的查找方法克服了使用TCAM查找成本高的缺点,但是现 有技术中使用的HASH算法也有其本身的缺陷,即使用HASH算法进行查找时会产生HASH冲 突,从而导致RAM的利用率变低,且HASH冲突率越高,RAM的利用率就越低。而目前一般解 决HASH冲突的方法是使用TCAM,HASH冲突率越高,需要使用的TCAM就越多,这样又会导致 增大网络处理器成本的问题出现。因此,针对在网络处理器中进行表项查找的问题,有待于 提出一种既能降低查找成本,又能尽大可能地降低HASH冲突的查找方法。

【发明内容】

[0004]本发明的目的在于克服现有技术的缺陷,提出了一种通过软件搬移减低HASH冲 突的方法,其在发生HASH冲突时,通过在不同的存储块间搬移某一已存储的二进制值,使 得原来存放该已存储的二进制值的存储位置为空,从而可以将待存储的二进制继续存入, 达到降低HASH冲突概率的目的。
[0005]为实现上述目的,本发明提出如下技术方案:一种通过软件搬移降低HASH冲 突的方法,其在将任意长度的二进制值(key)存入RAM中时,首先将RAM分成至少两 个存储块(图1中的RAM1,...RAMn),每个存储块采用不同的哈希函数(indexl = fund (key),...1ndexn = funcn(key))将所述二进制值映射至其中不同的存储位置;所述 二进制值包括某一待存储的第一二进制值(key_wl)和已存储的第二二进制值(key_al), 当所述待存储的第一二进制值在所有存储块中相应的存储位置都已被已存储的第二二进 制值占用时,则将其中一个存储块中的已存储的第二二进制值搬移至其他存储块中对应的 为空的存储位置进行存储,进而使得第一二进制值能够存储在搬移出第二二进制值的存储 位置。
[0006]更进一步地,所述将第二二进制值搬移至其他存储块中对应的为空的存储位置进 行存储包括以下步骤:
[0007]SI,定义第二二进制值在原存储块中的存储位置为第一存储位置,在另一存储块中的存储位置为第二存储位置,将第二二进制值从其原存储位置中取出,通过所述对应的 哈希函数映射后,查找到所述第二存储位置,判断第二存储位置为空时,则将第二二进制值 存入所述第二存储位置;
[0008]S2,删除所述第一存储位置上的第二二进制值,使第一存储位置为空;
[0009]S3,将所述第一二进制值存入所述第一存储位置。
[0010]其中,所述SI中,当查找到的第二存储位置为非空时,则继续在其他存储块中进 行查找,并在找到为空的存储位置时将所述第二二进制值存入。
[0011]当查遍所述的存储块后未发现为空的存储位置时,则循环进行其他存储块中第 二二进制值的搬移。
[0012]所述每一存储块中包括复数个存储桶,每一存储桶中包括至少一个存储位置。
[0013]所述存储块中采用的哈希函数为:
[0014]index = func (key)
[0015]其中,key为二进制值,index为通过哈希函数映射后得到的哈希值,所述哈希值 与对应存储块中的存储桶相对应。
[0016]本发明还提出一种通过软件搬移降低HASH冲突的装置,其包括存储任意长度二 进制值的RAM,哈希映射模块,判断存储位置是否为空的判断模块以及对已存储的二进制值 进行搬移的搬移模块,其中:
[0017]所述RAM分为至少两个存储块,每一存储块中包括复数个存储桶,每一存储桶中 包括至少一存储位置;
[0018]所述哈希映射模块用于将待存储的二进制值通过哈希函数映射成与所述存储块 中的存储桶相应的哈希值;
[0019]所述判断模块用于判断所述哈希值对应的存储桶中的存储位置是否为空,如果为 空,则将所述二进制值存入所述存储位置;
[0020]所述搬移模块用于将已存储于其中一个存储块中存储位置的二进制值搬移至其 他存储块中相应为空的存储位置。
[0021]所述哈希映射模块中,不同的存储块采用不同的哈希函数,从而使二进制值映射 在不同的存储块的哈希值不相同。
[0022]本发明的有益效果是:通过二进制值的搬移,最大化的利用了 RAM(相同规格,减 少了 RAM的使用),并且减少了 TCAM的使用,节省了处理器的成本。对于已经在使用的处理 器,则可以最大化的利用处理器的RAM和TCAM,增大规格。
【专利附图】

【附图说明】
[0023]图1是本发明通过软件搬移降低HASH冲突的示意图;
[0024]图2是本发明实施例中将二进制值通过查找存入RAM中的示意图;
[0025]图3是图3发生HASH冲突时进行搬移的示意图;
[0026]图4是通过软件搬移图3中二进制值后的示意图。
【具体实施方式】
[0027]下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。[0028]本发明提出的降低HASH冲突的方法,其通过HASH搬移二进制值的存储位置来降 低HASH冲突的概率。HASH搬移的过程涉及到哈希算法,哈希算法是将任意长度的二进制值 key映射为固定长度的较小二进制值,这个较小的二进制值称为哈希值index。哈希函数也 就是把任意长度的二进制值key映射为哈希值index的一个函数,设为func。
[0029]本实施例以将RAM分成两块存储块为例来说明HASH搬移的过程。如图2所示,在 采用HASH算法进行搬移时,首先将RAM平均分成两块存储块,一块称之为左桶,另一块称之 为右桶。左桶和右桶都具有一定的桶深,该桶深表示桶里可以放置的哈希值index相同的 二进制值key的数量。而左右桶的主要区别是它们使用的哈希函数不一样。左桶使用的哈 希函数设为函数funcl,右桶使用的哈希函数设为函数func2。
[0030]如图1所示,左桶和右桶分别包括8个桶,分别表示为第一左桶1,第二左桶 2....,第七右桶7',第八右桶8',每个桶的桶深为2,表示每一个桶可存放两个哈希值 index相同的二进制值key,且存储位置分别为第一存储位置和第二存储位置。当要存放一 个二进制值key时,先下入到左桶,即用indexl = funcl (key),计算得到哈希值indexl, 然后判断哈希值indexl所在的两条二进制值key的存储位置是否为空,只要有一个为空, 就可以把二进制值key下到相应的位置。如果两条存储位置都不为空,则下到右桶,即用 index2 = func2 (key),计算得到哈希值index2,然后判断哈希值index2所在的两条二进制 值key的存储位置是否为空,只要有一个为空,就可以把key存放到相应的位置。
[0031]以图2中各个key的存储位置为例来说,对于二进制值keyl,先使用哈希函数 indexl = funcl (keyl),计算得到哈希值indexl为5,即哈希值indexl的存储位置为第五 左桶5,然后查找到第五左桶5并判断第五左桶5所在的两条二进制值key的存储位置是否 为空,发现都是空的,就将二进制值keyl存放到第五左桶5的第一存储位置。
[0032]同理,对于二进制值key2,先使用哈希函数indexl = funcl (key2),计算得到哈希 值indexl为4,即哈希值indexl的存储位置为第四左桶4,然后查找到第四左桶4并判断 第四左桶4所在两条key的存储位置是否为空,发现都是空的,就将二进制值key2存放到 第四左桶4的第一存储位置。
[0033]对于二进制值key3,先使用哈希函数indexl = funcl (key3),计算得到哈希值 indexl为2,即哈希值indexl的存储位置为第二左桶2,然后查找到第二左桶2并判断第二 左桶2所在两条key的存储位置是否为空,发现都是空的,就将二进制值key3存放到第二 左桶2的第一存储位置。
[0034]对于二进制值key4,先使用哈希函数indexl = funcl (key4),计算得到哈希值 indexl为4,即哈希值indexl的存储位置为第四左桶4,然后查找到第四左桶4并判断第四 左桶4所在两条key的存储位置是否为空,发现第二存储位置为空,就将二进制值key4存 放到第四左桶4的第二存储位置。
[0035]对于二进制值key5,先使用哈希函数indexl = funcl (key5),计算得到哈希值 indexl为2,即哈希值indexl的存储位置为第二左桶2,然后查找到第二左桶2并判断第二 左桶2所在两条key的存储位置是否为空,发现第二存储位置为空,就将二进制值key5存 放到第二左桶2的第二存储位置。
[0036]对于二进制值key6,先使用哈希函数indexl = funcl (key6),计算得到哈希值 indexl为2,即哈希值indexl的存储位置为第二左桶2,然后查找到第二左桶2并判断第二左桶2所在两条key的存储位置是否为空,发现都不为空,此时,接着使用哈希函数index2 =func2(key6),计算得到哈希值index2为4,然后在右桶中查找第四右桶4'并判断第四 右桶4'所在两条key的存储位置是否为空,发现都是空的,就将二进制值key6存放到第四 右桶4'的第一存储位置。
[0037]对于二进制值key7, key8,采用与二进制值key6相同的方法进行计算、查找及判 断后,分别存放于第二右桶2'的第一存储位置及第四右桶4'的第二存储位置。
[0038]然而对于二进制值key9,先使用第一哈希函数indexl = funcl (key9),计算得 到哈希值indexl为2,即哈希值indexl的存储位置为第二左桶2,然后查找到第二左桶 2并判断得知第二左桶的两个存储位置都不为空,因此接着使用第二哈希函数index2 = funC2(key9),计算得到哈希值index2为第四右桶4',然后查找到第四右桶4并判断得知 第四右桶4的两条key的存储位置都不为空,此时就发生了 hash冲突,二进制值key9无法 下到RAM里。
[0039]出现这种情况后,即可采用本发明的HASH搬移方法进行搬移后,key9就可以下到 RAM里的,如图3所示,通过软件进行HASH搬移的具体步骤如下:
[0040]Stepl:先取出key9对应的第二左桶2第一存储位置中已经存放的第一条key,即 key3,然后使用第二哈希函数index2 = func2 (key3),计算key3在右桶中的位置为第七右 桶7',然后查找到第七右桶7'并判断第七右桶7'的两个存储位置是否为空,发现都是 空的,就将key3存放到第七右桶T的第一存储位置。
[0041]Step2:将左桶里的原来存放的key3删除,使得原来存放key3的存储位置(第二 左桶2的第一存储位置)为空;
[0042]Step3:把key9下到第二左桶2的第一存储位置,即原来key3的存储位置。
[0043]通过上面三个步骤后,就实现了把key9下到RAM里,如图2所示。
[0044]然而,在一些特殊情况下,使用本发明的软件搬移方法时可能出现搬不动的情况, 如图4所示,对于二进制值keylO,使用与存放key9相同的方法进行存放时,即先使用第一 哈希函数indexl = funcl (keylO),计算得到哈希值indexl为第二左桶2,然后经查找并判 断发现第二左桶2的两个存储位置都不为空,则接着使用index2 = func2 (keylO),计算得 到index2为第四右桶4',然后经查找并判断发现第四右桶4'所在两个存储位置也都不 为空。此时也发生hash冲突了,采用本发明的软件搬移方法进行如下搬移:
[0045]Stepl:先取出第二左桶2第一存储位置存放的第一条key,即key9,然后使用第二 哈希函数index2 = func2 (key9),计算key9在右桶的位置为第四右桶4',然后判断第四 右桶4'所在两条key的存储位置是否为空,发现都不为空,即key9搬不动。
[0046]St印2:取出第二左桶2的第二存储位置存放的第二条key,即key5,然后使用第二 哈希函数index2 = func2 (key5),计算key5在右桶的位置为第四右桶4',然后判断第四 右桶4'所在两条key的存储位置是否为空,发现都不为空,即key5搬不动。
[0047]Step3:前面两个步骤搬移左桶indexl为第二左桶2中两个存储位置的两条key, 都无法搬动,这个步骤开始搬移右桶,即取出第四右桶4'里第一存储位置的第一条key, 即key6,然后使用第一哈希函数indexl = funcl (key6),计算key6在左桶的位置为第二左 桶2,然后判断第二左桶2所在的两个存储位置是否为空,发现都不为空,即key6搬不动。
[0048]St印4:取出第四右桶4'第二存储位置的第二条key,即key8,然后使用第一哈希函数indexl = funcl(key8),计算key8在左桶的位置为第二左桶2,然后判断第二左桶2 的两个存储位置是否为空,发现都不为空,即key8搬不动。
[0049]至此,keylO在左桶和右桶的indexl和index2位置,都被占满了,并且这些占满 的key都搬不动,此时通过软件搬移无法把keylO下到RAM里,keylO可以选择存放到TCAM 中,即此时就需要使用TCAM来解决冲突了。
[0050]对于软件搬移搬不动的情况,一般在RAM利用率已经很高时才会出现,在RAM利用 率低时,一般都是可以搬得动的。
[0051]本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基 于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围 应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申 请权利要求所涵盖。
【权利要求】
1.一种通过软件搬移降低HASH冲突的方法,其特征在于:在将任意长度的二进制值 (key)存入RAM中时,首先将RAM分成至少两个存储块,每个存储块采用不同的哈希函数将所述二进制值映射至其中不同的存储位置;所述二进制值包括某一待存储的第一二进制值和已存储的第二二进制值,当所述待存储的第一二进制值在所有存储块中相应的存储位置都已被已存储的第二二进制值占用时,则将其中一个存储块中的已存储的第二二进制值搬移至其他存储块中对应的为空的存储位置进行存储,进而使得第一二进制值能够存储在搬移出第二二进制值的存储位置。
2.根据权利要求1所述的通过软件搬移降低HASH冲突的方法,其特征在于:所述将第二二进制值搬移至其他存储块中对应的为空的存储位置进行存储包括以下步骤:SI,定义第二二进制值在原存储块中的存储位置为第一存储位置,在另一存储块中的存储位置为第二存储位置,将第二二进制值从其原存储位置中取出,通过所述对应的哈希函数映射后,查找到所述第二存储位置,判断第二存储位置为空时,则将第二二进制值存入所述第二存储位置;S2,删除所述第一存储位置上的第二二进制值,使第一存储位置为空;S3,将所述第一二进制值存入所述第一存储位置。
3.根据权利要求2所述的通过软件搬移降低HASH冲突的方法,其特征在于:所述SI 中,当查找到的第二存储位置为非空时,则继续在其他存储块中进行查找,并在找到为空的存储位置时将所述第二二进制值存入。
4.根据权利要求3所述的通过软件搬移降低HASH冲突的方法,其特征在于:当查遍所述的存储块后未发现为空的存储位置时,则循环进行其他存储块中第二二进制值的搬移。
5.根据权利要求1所述的通过软件搬移降低HASH冲突的方法,其特征在于:所述每一存储块中包括复数个存储桶,每一存储桶中包括至少一个存储位置。
6.根据权利要求5所述的通过软件搬移降低HASH冲突的方法,其特征在于:所述存储块中采用的哈希函数为:index = func(key)其中,key为二进制值,index为通过哈希函数映射后得到的哈希值,所述哈希值与对应存储块中的存储桶相对应。
7.—种通过软件搬移降低HASH冲突的装置,其特征在于:包括存储任意长度二进制值的RAM,哈希映射模块,判断存储位置是否为空的判断模块以及对已存储的二进制值进行搬移的搬移模块,其中:所述RAM分为至少两个存储块,每一存储块中包括复数个存储桶,每一存储桶中包括至少一存储位置;所述哈希映射模块用于将待存储的二进制值通过哈希函数映射成与所述存储块中的存储桶相应的哈希值;所述判断模块用于判断所述哈希值对应的存储桶中的存储位置是否为空,如果为空, 则将所述二进制值存入所述存储位置;所述搬移模块用于将已存储于其中一个存储块中存储位置的二进制值搬移至其他存储块中相应为空的存储位置。
8.—种通过软件搬移降低HASH冲突的装置,其特征在于:所述哈希映射模块中,不同的存储块采用不同 的哈希函数,从而使二进制值映射在不同的存储块的哈希值不相同。
【文档编号】G06F17/30GK103577564SQ201310512899
【公开日】2014年2月12日 申请日期:2013年10月25日 优先权日:2013年10月25日
【发明者】周志洪, 何志川, 赵茂聪, 徐志欣 申请人:盛科网络(苏州)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1