CN106294191B - 处理表的方法、访问表的方法和装置 - Google Patents

处理表的方法、访问表的方法和装置 Download PDF

Info

Publication number
CN106294191B
CN106294191B CN201510274566.8A CN201510274566A CN106294191B CN 106294191 B CN106294191 B CN 106294191B CN 201510274566 A CN201510274566 A CN 201510274566A CN 106294191 B CN106294191 B CN 106294191B
Authority
CN
China
Prior art keywords
memory
hash bucket
sub
storage unit
entry
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510274566.8A
Other languages
English (en)
Other versions
CN106294191A (zh
Inventor
王小忠
龚钧
郑远明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XFusion Digital Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201510274566.8A priority Critical patent/CN106294191B/zh
Publication of CN106294191A publication Critical patent/CN106294191A/zh
Application granted granted Critical
Publication of CN106294191B publication Critical patent/CN106294191B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种处理表的方法、访问表的方法和装置。该处理表的方法包括:处理器在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储器的第一存储单元中的第一子表存储到第二存储器的第二存储单元中,第二存储器的剩余带宽高于第一子表被访问时占用的带宽,且第二存储器的剩余存储空间大于所述第一子表占用的存储空间;处理器在第一存储单元中删除第一子表;处理器将第一子表与第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的第一子表与第一存储单元的对应关系更新为第一子表与第二存储单元的对应关系。本发明通过将已存储在存储器中的部分子表搬移到其他存储器中,能够减小高性能网络处理器对内存的容量需求。

Description

处理表的方法、访问表的方法和装置
技术领域
本发明涉及通信领域,尤其涉及处理表的方法、访问表的方法和装置。
背景技术
移动网络的蓬勃发展和物联网的兴起,使网络流量***式增长,并且在可预见的一段时间内将维持这种高速增长趋势,网络流量的快速增长导致网络设备的性能成为瓶颈,这对网络设备商来说既是挑战也是机遇。
通常网络处理器是路由器的核心,其性能是路由器竞争力的关键。目前,单链路接口的速率将要突破50吉比特每秒(Gigabit per second,缩写Gbps),这意味着,未来网络处理器的单芯片吞吐能力将可以做到2太比特每秒(Terabits per second,缩写Tbps)甚至更高,比现在提高4到8倍以上。如此高的吞吐量,对网络处理器内部的处理性能提出了更高的要求。
内存带宽作为网络处理器的性能瓶颈,相比于接口性能的快速提高,这些年来的增长速度相对缓慢,尤其是双倍速率(Double Data Rate,简称DDR)同步动态随机存储器(Synchronous Dynamic Random Access Memory,简称SDRAM)的带宽,随机访问模式下,在多存储阵列(bank)复制下,目前***DDR(DDR4)单芯片只能提供最高125*128兆比特(Megabit,缩写Mb)左右的稳定访问速率。一个报文从入到出,大多数场景下需要访问业务表所在的内存10次以上,每次读取128位(bit)的表项,在750百万包每秒(Million PacketPer Second,缩写MPPS)的包速下,内存共需要提供超过750*10*128Mb的带宽,如果所有表的表项都放在DDR里,则需要60片以上的DDR芯片,这是不现实的。
目前,路由器需要支持的转发业务有几十种,每种转发业务会访问约8~20张业务表,路由器上共有超过400张业务表。但是,在任何一种场景下,一台设备上,同时只会有一种或几种转发业务处于高速运行状态,其他大多数转发业务处于低速或空闲状态。也就是说,现实场景下,只有少数业务表被高速访问,大多数业务表被访问的频率很低甚至处于空闲状态。即使高速访问的业务表,并不是所有表项被访问的频率都一样。研究表明,90%以上的流量集中在5%~10%的大流上,其中20%~40%的流量集中在0.1%~0.5%的超大流上,这意味着,大多数流量会命中少数表项,而大多数表项被访问的频率很低甚至没有访问。然而,当前通用的方案是,按照整表的访问性能需求预先选择整表的存储位置,当表的容量很大时,就需要很大的高带宽的内存,超出了下一代网络处理器的支持能力。
发明内容
本发明提供了一种处理表的方法、访问表的方法和装置,能够减小高性能网络处理器对内存的容量需求,使下一代高性能网络处理器容易实现。
第一方面,提供了一种处理表的方法,第一表包括多个子表,第一存储器包括多个存储单元,所述多个子表中包括第一子表,所述多个存储单元中包括第一存储单元,该方法包括:处理器在第一存储器的运行状态达到预设条件的情况下,将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中,所述第二存储器的剩余带宽高于所述第一子表被访问时占用的带宽,且所述第二存储器的剩余存储空间大于所述第一子表占用的存储空间;所述处理器在所述第一存储单元中删除所述第一子表;所述处理器将所述第一子表与所述第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的所述第一子表与所述第一存储单元的对应关系更新为所述第一子表与所述第二存储单元的对应关系。
结合第一方面,在第一种可能的实现方式中,所述处理器在第一存储器的运行状态达到预设条件的情况下,将已存储在所述第一存储单元中的第一子表存储到第二存储器的第二存储单元中包括:所述处理器确定第一存储器占用的带宽;所述处理器在所述第一存储器占用的带宽大于或等于第一预设值的情况下,将所述第一子表存储到第二存储器的第二存储单元中;或者,
所述处理器获取所述第一存储器的剩余存储空间;在所述第一存储器的剩余存储空间小于或等于第二预设值的情况下,所述处理器将所述第一子表存储到所述第二存储器的第二存储单元中。
结合第一种可能的实现方式,在第二种可能的实现方式中,所述在所述第一存储器占用的带宽大于或等于第一预设值的情况下,所述处理器将已存储在所述第一存储单元的所述第一子表存储到所述第二存储器的第二存储单元中,包括:所述处理器获取所述第一存储器中每个存储单元的被访问次数;所述处理器根据所述被访问次数,从所述第一存储器中确定所述第一存储单元,所述第一存储单元的被访问频率高于所述第一存储器中所述第一存储单元之外的其他存储单元的被访问频率;所述处理器从多个存储器中确定所述第二存储器,所述第二存储器的剩余带宽高于所述多个存储器中所述第二存储器之外的其他存储器的剩余带宽;所述处理器将所述第一子表存储到所述第二存储器的第二存储单元中。
结合第一种可能的实现方式,在第三种可能的实现方式中,所述在第一存储器的运行状态达到预设条件的情况下,所述处理器将已存储在所述第一存储单元中的第一子表存储到第二存储器的第二存储单元中包括:所述处理器确定所述第一存储器占用的带宽;所述处理器在所述第一存储器占用的带宽小于第三预设值的情况下,获取所述第一存储器中每个存储单元的被访问次数;所述处理器根据所述每个存储单元的被访问次数,确定所述第一存储单元,所述第一存储单元的被访问频率低于所述第一存储器中所述第一存储单元之外的其他存储单元的被访问频率;所述处理器从多个存储器中确定所述第二存储器,所述第二存储器的剩余存储空间高于所述多个存储器中所述第二存储器之外的其他存储器的剩余存储空间;所述处理器将所述第一子表存储到所述第二存储器的第二存储单元中。
结合第一方面或第一种至第三种可能的实现方式中的任一种可能的实现方式,在第四种可能的实现方式中,在所述在第一存储器的运行状态达到预设条件的情况下,所述处理器将已存储在所述第一存储单元中的第一子表存储到第二存储器中的第二存储单元中之前,所述方法还包括:所述处理器获取第一写请求,所述第一写请求用于请求对第一表的第一表项进行写操作;所述处理器根据所述第一写请求为所述第一子表分配所述第一存储单元,所述第一子表包括所述第一表项。
结合第四种可能的实现方式,在第五种可能的实现方式中,还包括:所述处理器获取第二写请求,所述第二写请求用于请求对第二子表的第二表项进行写操作,所述多个子表中还包括所述第二子表;如果所述处理器确定所述第二子表未分配存储单元,则所述处理器根据所述第二写请求为所述第二子表分配第三存储单元。
结合第一方面的上述任一种可能的实现方式,在第六种可能的实现方式中,所述第一表采用哈希的方式进行存储,所述第一表的表项的关键字key存储在哈希桶的表项中,所述方法还包括:
处理器在第一哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储到所述第一哈希桶中;
所述处理器在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储到所述第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第二哈希桶采用不同的哈希函数;
所述处理器在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储到所述第三哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数;
所述处理器在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储到第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数,所述第二哈希桶和所述第四哈希桶采用相同的哈希函数。
结合第六种可能的实现方式在,在第七种可能的实现方式中,还包括:
所述处理器在所述第一哈希桶的被访问次数与所述第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配所述第三哈希桶,再匹配所述第一哈希桶;
所述处理器在所述第二哈希桶的被访问次数与所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第四哈希桶,再匹配所述第二哈希桶;
所述处理器在所述第一哈希桶和所述第三哈希桶的被访问次数与所述第二哈希桶和所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第二哈希桶和所述第四哈希桶,再匹配所述第一哈希桶和所述第三哈希桶。
第二方面,提供了一种访问表的方法,包括:网络处理器所述第一表对应的内存块映射信息表的基址,所述内存块映射信息表包括所述第一表中的各个子表与存储单元的对应关系;所述网络处理器根据所述基址和所述第一表的第一表项的索引访问所述内存块映射信息表,并根据所述内存块映射信息表确定所述第一表项所在的第一子表对应的存储单元的索引,所述第一子表为所述第一表中的任意子表;所述网络处理器根据所述存储单元的索引和所述第一表项的索引,确定所述第一表项的物理地址;所述网络处理器根据所述第一表项的物理地址访问所述第一表项。
结合第二方面,在第二方面的第一种可能的实现方式中,所述网络处理器获取第一表对应的内存块映射信息表的基址包括:所述网络处理器根据所述第一表的表标识TID访问内存块映射基址表,并根据所述内存块映射基址表确定所述内存储块映射信息表的基址。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,还包括:所述网络处理器更新所述存储单元的被访问次数。
结合第二方面或第二方面的第一种或第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述网络处理器根据所述基址和所述第一表项的索引访问所述内存块映射信息表包括:所述网络处理器根据下式确定的地址访问所述内存块映射信息表,
其中,base为所述基址,entry index为所述第一表项的索引,block size为所述第一子表包含的表项的数量。
结合第二方面或第二方面的第一种或第二种或第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述网络处理器根据所述存储单元的索引和所述第一表项的索引,确定所述第一表项的物理地址,包括:所述网络处理器根据下式确定所述第一表项的物理地址,
real block index*block size+entry index%block size
其中,real block index为所述存储单元的索引,block size为所述第一子表包含的表项的数量,所述第一子表包含的表项的数量与所述存储单元存储的表项的数量相同,entry index为所述第一表项的索引。
第三方面,提供了一种处理表的装置,第一表包括多个子表,第一存储器包括多个存储单元,所述多个子表中包括第一子表,所述多个存储单元中包括第一存储单元,所述装置包括:处理单元,用于在第一存储器的运行状态达到预设条件的情况下,将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中,所述第二存储器的剩余带宽高于所述第一子表被访问时占用的带宽,且所述第二存储器的剩余存储空间大于所述第一子表占用的存储空间;删除单元,用于在所述第一存储单元中删除所述第一子表;发送单元,用于将所述第一子表与所述第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的所述第一子表与所述第一存储单元的对应关系更新为所述第一子表与所述第二存储单元的对应关系。
结合第三方面,在第三方面的第一种可能的实现方式中,所述处理单元具体用于:确定所述第一存储器占用的带宽;在所述第一存储器占用的带宽大于或等于第一预设值的情况下,将所述第一子表存储到第二存储器中;或者,获取所述第一存储器的剩余存储空间;在所述第一存储器的剩余存储空间小于或等于第二预设值的情况下,将所述第一子表存储到所述第二存储器的第二存储单元中。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述处理单元具体用于:获取所述第一存储器中的每个存储单元的被访问次数;根据所述每个存储单元的被访问次数,从所述第一存储器中确定所述第一存储单元,所述第一存储单元的被访问频率高于所述第一存储器中所述第一存储单元之外的其他存储单元的被访问频率;从多个存储器中确定所述第二存储器,所述第二存储器的剩余带宽高于所述多个存储器中所述第二存储器之外的其他存储器的剩余带宽;将所述第一子表存储到所述第二存储器的第二存储单元中。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述处理单元具体用于:确定所述第一存储器占用的带宽;在所述第一存储器占用的带宽小于第三预设值的情况下,获取所述第一存储器中每个存储单元的被访问次数;根据所述每个存储单元的被访问次数,确定所述第一存储单元,所述第一存储单元的被访问频率低于所述第一存储器中所述第一存储单元之外的其他存储单元的被访问频率;从多个存储器中确定所述第二存储器,所述第二存储器的剩余存储空间高于所述多个存储器中所述第二存储器之外的其他存储器的剩余存储空间;将所述第一子表存储到所述第二存储器的第二存储单元中。
结合第三方面或第三方面的第一种至第三种可能的实现方式中的任一种可能的实现方式,在第三方面的第四种可能的实现方式中,所述处理单元还用于:在所述第一存储器的运行状态达到预设条件的情况下,将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中之前,获取第一写请求,所述第一写请求用于请求对第一表的第一表项进行写操作;根据所述第一写请求为所述第一子表分配所述第一存储单元,所述第一子表包括所述第一表项。
结合第三方面的第四种可能的实现方式,在第三方面的第五种可能的实现方式中,所述处理单元还用于:获取第二写请求,所述第二写请求用于请求对第二子表的第二表项进行写操作,所述多个子表中还包括所述第二子表;如果确定所述第二子表未分配存储单元,则根据所述第二写请求为所述第二子表分配第三存储单元。
结合第三方面或第三方面的上述任一种可能的实现方式,在第三方面的第六种可能的实现方式中,所述第一表采用哈希的方式进行存储,所述第一表的表项的关键字key存储在哈希桶的表项中,所述处理单元还用于:
在第一哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至所述第一哈希桶;
在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至所述第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第二哈希桶采用不同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至所述第三哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数,所述第二哈希桶和所述第四哈希桶采用相同的哈希函数。
结合第三方面的第六种可能的实现方式,在第三方面的第七种可能的实现方式中,还包括:控制单元,用于:
在所述第一哈希桶的被访问次数与所述第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配所述第三哈希桶,再匹配所述第一哈希桶;
在所述第二哈希桶的被访问次数与所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第四哈希桶,再匹配所述第二哈希桶;
在所述第一哈希桶和所述第三哈希桶的被访问次数与所述第二哈希桶和所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第二哈希桶和所述第四哈希桶,再匹配所述第一哈希桶和所述第三哈希桶。
第四方面,提供了一种访问表的装置,包括:处理单元,用于:获取第一表对应的内存块映射信息表的基址,所述内存块映射信息表包括所述第一表中的各个子表与存储单元的对应关系;根据所述基址和所述第一表的第一表项的索引访问所述内存块映射信息表,并根据所述内存块映射信息表确定所述第一表项所在的第一子表对应的存储单元的索引,所述第一子表为所述第一表中的任意子表;根据所述存储单元的索引和所述第一表项的索引,确定所述第一表项的物理地址;访问单元,用于根据所述第一表项的物理地址访问所述第一表项。
结合第四方面,在第四方面的第一种可能的实现方式中,所述处理单元具体用于:根据第一表的表标识TID访问内存块映射基址表,并根据所述内存块映射基址表确定所述内存储块映射信息表的基址。
结合第四方面或第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,还包括:记录单元,用于更新所述存储单元的被访问次数。
结合第四方面或第四方面的第一种或第二种可能的实现方式,在第四方面的第三种可能的实现方式中,所述处理单元具体用于:根据下式确定的地址访问所述内存块映射信息表,
其中,base为所述基址,entry index为所述第一表项的索引,block size为所述第一子表包含的表项的数量。
结合第四方面或第四方面的第一种或第二种或第三种可能的实现方式,在第四方面的第四种可能的实现方式中,所述处理单元具体用于:根据下式确定所述第一表项的物理地址,
real block index*block size+entry index%block size
其中,real block index为所述存储单元的索引,block size为所述第一子表包含的表项的数量,所述第一子表包含的表项的数量与所述存储单元存储的表项的数量相同,entry index为所述第一表项的索引。
基于上述技术方案,通过在存储器的运行状态达到预设条件情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对内存的容量需求,使下一代高性能网络处理器容易实现。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例的表和存储器的示意图。
图2是根据本发明一个实施例的处理表的方法的示意性流程图。
图3是根据本发明另一实施例的处理表的方法的示意性流程图。。
图4是根据本发明另一实施例的处理表的方法的统计单元的示意图。
图5是根据本发明另一实施例的处理表的方法的示意性流程图。
图6是根据本发明另一实施例的处理表的方法的示意性流程图。
图7是路由器的哈希桶的示意图。
图8a、8b、8c和8d是根据本发明实施例的处理表的方法的示意图。
图9是根据本发明实施例的访问表的方法的示意性流程图。
图10是根据本发明实施例的访问表的方法的存储***架构示意图。
图11是根据本发明实施例的访问表的方法的内存映射单元的示意图。
图12是根据本发明一个实施例的处理表的装置的示意性框图。
图13是根据本发明另一实施例的处理表的装置的示意性框图。
图14是根据本发明一个实施例的访问表的装置的示意性框图。
图15是根据本发明另一实施例的访问表的装置的示意性框图。
图16是根据本发明另一实施例的处理表的装置的示意性框图。
图17是根据本发明另一实施例的访问表的装置的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
本申请的说明书和权利要求书及附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”不是排他的。例如包括了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,还可以包括没有列出的步骤或单元。
本发明实施例中,一个表包括多个子表,一个存储器包括多个存储单元,如图1所示。应理解,本发明实施例中的存储器的物理空间可以根据物理结构进行划分,也可以根据逻辑进行划分。
图2是根据本发明实施例的处理表的方法200的示意性流程图。如图2所示,方法200包括如下内容。
210、处理器在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储单元中的第一子表存储到第二存储器的第二存储单元中,第二存储器的剩余带宽高于第一子表被访问时占用的带宽,且第二存储器的剩余存储空间大于第一子表占用的存储空间。
本发明实施例中,第一表包括多个子表,第一存储器包括多个存储单元,多个子表中包括第一子表,多个存储单元中包括第一存储单元。如图1所示,第一表中的多个子表可以都存储在第一存储器中,也可以存储在不同的存储器中。其中,一个存储单元用于存储一个子表,一个子表包含固定数量的连续的表项。
其中,存储器的运行状态可以包括占用的带宽和存储空间。第二存储单元是第二存储器的多个存储单元中任意一个没有存储子表的存储单元。
应理解,本发明实施例中的处理器指的是控制面的处理器。
220、处理器在第一存储单元中删除第一子表。
230、处理器将第一子表与第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的第一子表与第一存储单元的对应关系更新为第一子表与第二存储单元的对应关系。
现有技术中,通常按照同时满足所有典型业务场景的线速要求选择整表的存储位置,这要求转发面的网络处理器提供大容量高带宽的内存***。这种通过静态预分配内存满足所有场景性能要求的方式,无法支持1Tbps以上网络处理器对内存带宽和内存容量的需求,成为高性能网络处理器的瓶颈。而本发明实施例中,在存储器的运行状态达到预设条件的情况下,能够灵活地选择该存储器中存储的部分子表的存储位置,使得能够减小高性能网络处理器对高带宽内存的容量需求,进而提高网络处理器的处理性能。
因此,本发明实施例的处理表的方法,通过在存储器的运行状态达到预设条件的情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对内存的容量需求,使下一代高性能网络处理器容易实现。
本发明实施例中仅以处理器将第一子表搬移至第二存储器的过程为例进行描述,本发明实施例中处理器可以将多个存储单元存储的多个子表搬移至一个存储器,或者可以将多个子表搬移至多个存储器,本发明实施例对此并不限定。
可选地,如图3所示,步骤210中,处理器在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储单元中的第一子表存储到第二存储器的第二存储单元中包括:
211、处理器确定第一存储器占用的带宽;
212、处理器在第一存储器占用的带宽大于或等于第一预设值的情况下,将第一子表存储到第二存储器的第二存储单元中。
该第一预设值可以作为存储器的带宽是否接近用完的判断标准。
本发明实施例对处理器确定存储器占用的带宽的方法不作限定。例如:处理器可以轮询网络处理器获取存储器的被访问次数,进一步确定存储器的被访问频率,然后根据被访问频率确定存储器占用的带宽。处理器还可以轮询网络处理器获取存储器的占用的带宽。需要说明的是,本发明实施例并不限定网络处理器确定存储器占用的带宽的方法。例如,网络处理器还可以由硬件通过判断入口队列长度触发终端确定存储器占用的带宽。
可选地,步骤212中,处理器将第一子表存储到第二存储器的第二存储单元中包括:
处理器获取第一存储器中每个存储单元的被访问次数;
处理器根据每个存储单元的被访问次数,从第一存储器中确定第一存储单元,第一存储单元的被访问频率高于第一存储器中第一存储单元之外的其他存储单元的被访问频率;
处理器将第一存储单元中的第一子表存储到第二存储器的第二存储单元中。
具体地,控制面的处理器可以通过轮询转发面的网络处理器获取存储器中每个存储单元的被访问次数。例如,网络处理器中可以设置统计单元,如图4所示,该统计单元包括多个计数器,该多个计数器分别与存储器中的各个存储单元相关联,记录各个存储单元的被访问次数。处理器根据获取到的每个存储单元在一定周期内的被访问次数即可确定每个存储单元的被访问频率。
需要说明的是,在存储器占用的带宽大于或等于第一预设值的情况下,只要将该存储器中存储的部分子表搬移到其他存储器上,即可达到降低该存储器占用的带宽的目的。因此处理器不仅可以将存储器中的一个或多个被访问频率最高的存储单元上存储的子表搬移到一个或多个其他存储器中,还可以将存储器中的任意一个或多个存储单元上存储的子表搬移至其他存储器,本发明实施例对此并不限定。
本发明实施例中,在运行过程中,处理器根据各存储器的带宽的实际占用情况和存储单元的被访问次数的统计进行子表的搬移,能够满足网络处理器对内存带宽的需求。
可选地,步骤212中,在处理器将第一子表存储到第二存储器的第二存储单元中之前,方法200还包括:处理器从多个存储器中确定第二存储器,第二存储器的剩余带宽高于多个存储器中第二存储器之外的其他存储器的剩余带宽。
在本发明实施例中,通过将被访问频率最高的子表搬移到有足够剩余带宽的存储器上,能够使得具有高带宽的存储器上存储被访问频率高的子表,这样能够大大减小网络处理器对高性能存储器容量的需求。
换句话说,通过统计存储器和子表的被访问频率,把被访问频率高的子表放置到高带宽内存,访问频率低的子表放置在低带宽内存,与按照整表的访问性能选择整表的存储位置相比,能有效减少对高带宽内存的容量需求,使下一代高性能网络处理器容易实现。
例如,基于子表的访问统计选择子表的存储位置,经过不断地搬移,使例如片上内存只存储高速访问的表项,能够大大减小网络处理器对片上内存容量的需求。其中,片上内存,也称片上存储器,指与处理器集成在同一芯片上的存储器。相应地,没有与处理器集成在同一芯片上的存储器称为片外内存,也称片外存储器。片上内存相对于片外内存具有更高的带宽。
在片上内存采用高速缓冲存储器(cache)的情况下,初始状态,表数据存储在片外内存,片上内存用作片外内存的备份。处理器优先访问片上内存,当cache未命中时才访问片外内存,连续访问的数据会长时间保留在cache中。片上内存,即cache,可以很小,在cache命中率较高的情况下,能够提供很高的访问性能。cache适用于数据访问具有较强局部性的应用场景,但是路由器报文处理过程中的内存访问不具有局部性特点,报文处理过程中要访问数十个不同的表,每个表的大小从几兆比特(megabit,缩写Mb)到几百Mbs不等,而且,不同报文访问同一个表时可能命中的表项大多数情况下也没有局部性的特征,报文处理的这些访问特点导致cache命中率可能非常低,从而使报文转发性能较低。这样,高速表项之间、以及高速表项和低速表项之间,都会存在cache冲突的可能。也许在某种场景下,cache命中率很高,但很可能在另一种场景下,cache命中率可能非常低,其原因是cache采用静态的哈希(Hash)机制进行内存映射。因此,cache无法保证转发业务性能。
本发明实施例通过实时统计存储器中各个子表的被访问频率,根据实际的被访问频率,将子表在不同的存储器之间进行搬移,使得高性能存储器(例如片上内存)只存储高速访问的子表,使得采用较小的片上内存支持所有场景的高速转发业务成为可能。因此本发明实施例的方案要优于cache机制。
举例说明,存储器的带宽接近用完时,假设大于80%,首先找出该存储器访问频率最高的那些存储单元(例如,前几个、几十个或几百个等等),然后采取某种策略把其中的一部分存储单元上的子表搬移到其他有足够剩余带宽的存储器上。可以在任意存储器之间进行子表的搬移,例如:可以从第一片上存储器搬到第二片上存储器上,或者从片上存储器搬到片外存储器上,或者从第一片外存储器搬到第二片外存储器上,或者从片外存储器搬到片上存储器上。搬移完成后,更新网络处理器的内存映射表上存储单元和子表之间的映射关系。
另外,存储器也可以关联一个计数器,处理器能够获取该计数器的值并确定该存储器的被访问频率,进而能够确定该存储器占用的带宽。
可选地,如图5所示,步骤210中,处理器在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储单元中的第一子表存储到第二存储器的第二存储单元中,包括:
213、处理器获取第一存储器的剩余存储空间;
例如,处理器可以通过轮询转发面的网络处理器获取存储器的剩余存储空间。
214、处理器在第一存储器的剩余存储空间小于或等于第二预设值的情况下,将第一子表存储到第二存储器的第二存储单元中。
本发明实施例中,在运行过程中,处理器根据各存储器的存储空间的实际占用情况进行子表的搬移,能够满足网络处理器内存容量的需求。
具体地,在步骤214中,处理器将第一子表存储到第二存储器的第二存储单元中包括:
处理器确定第一存储器占用的带宽;
处理器在第一存储器占用的带宽小于第三预设值的情况下,获取第一存储器中每个存储单元的被访问次数;
处理器根据每个存储单元的被访问次数,确定第一存储单元,第一存储单元的被访问频率低于第一存储器中第一存储单元之外的其他存储单元的被访问频率;
处理器将第一存储单元中的第一子表存储到第二存储器的第二存储单元中。
在本发明实施例中,当存储器的带宽占用小于预设值,但该存储器的容量已经接近占满时,通过把该存储器上占用带宽最小的一个或多个子表搬移到其它有较大空余容量同时具有足够剩余带宽的存储器上,能够满足网络处理器对高带宽内存的容量需求。
可选地,步骤214中,在处理器将第一子表存储到第二存储器的第二存储单元中之前,方法200还可以包括:处理器从多个存储器中确定第二存储器,第二存储器的剩余存储空间高于多个存储器中第二存储器之外的其他存储器的剩余存储空间。本发明实施例中,将子表搬移到剩余存储空间最大的存储器中,能够使得存储资源的分配更加均衡。
在步骤210之前,方法200还可以包括:处理器为第一子表分配第一存储单元。
具体地,处理器为第一子表分配第一存储单元包括:
处理器获取第一写请求,第一写请求用于请求对第一表的第一表项进行写操作;
处理器根据第一写请求为第一子表分配第一存储单元,第一子表包括第一表项。
应理解,在为第一子表分配第一存储单元之后,处理器可以根据第一写请求将第一表项写入第一存储单元。
本发明实施例中,表的内存不再预先静态分配,表和存储器被划分成多个块,即表被划分成多个子表,存储器被划分成多个存储单元。可选地,存储器中的各个存储单元的容量相同,表中各个子表的大小相同,但本发明实施例对此并不限定。例如,存储器中各个存储单元的容量也可以不同,表中各个子表的大小也可以不同。
初始状态下,处理器不会预先为整表分配存储空间,在写表项的时候才从存储器中按需动态地以子表为单位分配存储单元,并记录子表与存储单元之间的映射关系。这样能够大大减小网络处理器对内存的总需求。
因此,本发明实施例的处理表的方法,通过为表按需增量动态分配内存,能够避免为表预留内存空间而导致的内存空间浪费,从而能够减少网络处理器对内存的需求。
由于在不同场景下,各个表的实际大小是不相同的,比如在场景1下转发信息库(Fowarding Information Base,简称FIB)表很大多协议标签交换(Multi-Protocol LabelSwitching,简称MPLS)表很小,而场景2下FIB表很小MPLS表很大。如果采用静态预分配内存的方案,为了同一个版本即能够支持场景1又能支持场景2,就需要同时为FIB表和MPLS表预分配足够大的空间,而事实上,任何场景下,都有很多内存空间是完全空闲的,采用本发明实施例处理表的方法就能避免此问题。
可选地,方法200还可以包括:
处理器获取第二写请求,第二写请求用于请求对第二子表的第二表项进行写操作;
如果处理器确定第二子表未分配存储单元,则处理器根据第二写请求为第二子表分配第三存储单元。
其中,第二子表可以是第一表的多个子表中除第一子表外的任一子表,第二子表还可以是第二表的多个子表中的任一子表。第三存储单元可以位于第一存储器中,也可以位于第二存储器中,还可以位于第一存储器和第二存储器之外的第三存储器中。
本发明实施例中在写表项时,能够按需动态地为表分配存储空间。
本发明实施例中,处理器可以根据存储器的占用情况,确定为子表分配哪个存储器的存储单元。处理器可以优先为子表分配已部分存储了子表的存储器,当该存储器已用完时,再为需要分配存储空间的子表分配其他存储器。例如,当处理器确定第一存储器未满时,则处理器在第一存储器中为第二子表分配第三存储单元;当处理器确定第一存储器已满,第二存储器未满时,则处理器在第二存储器中为第二子表分配第三存储单元。当处理器确定第一存储器和第二存储器均已满时,则处理器在第三存储器中为第二子表分配第三存储单元。以此类推,不再赘述。
处理器还可以根据子表的类型,确定为子表分配哪个存储器的存储单元。例如,第二子表为第二表的多个子表中的任一子表,第二表为非线速业务的表,相应地,第二子表为非线速业务的表。当第一存储器用于存储线速业务的表,第二存储器和第三存储器用于存储非线速业务的表时,如果第二存储器已部分存储了子表,则处理器可以优先在第二存储器中为第二子表分配第三存储单元。如果处理器确定第二存储器已满,则处理器在第三存储器中为第二子表分配第三存储单元。可选地,第一存储器的带宽高于第二存储器或第三存储器的带宽。
需要说明的是,这里存储器的带宽指的是存储器本身能够提供的总带宽。
在初始存储业务表时,线速业务的表优先存储在带宽较高的存储器中,当该带宽较高的存储器用完时,才将线速业务的表存储在带宽较低的存储器中,非线速业务的表优先存储在带宽较低的存储器中。
例如,在第一子表对应线速业务、第二子表对应非线速业务的情况下,将第一子表存储至片上内存,将第二子表存储至片外内存。
可选地,在选择初始存储位置时,如果在任意一个转发业务中任意两个表会被同时访问,则将该两个表存储在不同的存储器上。
本发明实施例提供的处理表的方法可以和通常的静态预分配内存的方法一起使用,例如,部分很小的线速表可以仍然采用静态预分配内存的方案,这种静态预分配的方案也可以应用于算法树中内存占用较小的层级,以减少访问内存映射表的次数,进而减小报文处理时延。
因此,本发明实施例的处理表的方法,通过在存储器的运行状态达到预设条件的情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对高带宽内存的容量需求,使下一代高性能网络处理器容易实现。
可选地,第一表可以采用哈希(Hash)的方式进行存储,第一表的表项的关键字key存储在哈希桶的表项中,如图6所示,方法200还可以包括以下内容。
240、处理器在第一哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至第一哈希桶。
应注意,key可以是压缩key,也可以是完整key,本发明实施例对此并不限定。
250、处理器在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储到第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,第一哈希桶和第二哈希桶采用不同的哈希函数。
260、处理器在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储到第三哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函数。
270、处理器在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储到第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函数,第二哈希桶和第四哈希桶采用相同的哈希函数。
应理解,在240之前,将现有技术中的两个哈希桶中的每个哈希桶的规格缩小,并为每个哈希桶增加至少一个扩展桶。
还应理解,哈希桶中的每个表项的内容包括关键字和值,即键值对(key-value),处理器在将待存储的key存储到哈希桶中的同时会将该key对应的value存储到哈希桶中。为了描述简洁,本发明实施例中仅以key为例进行说明,但并非要限制本发明实施例的范围。
现有技术中,在路由器里,很多业务表采用哈希(Hash)的方式进行存储和匹配,比如介质访问控制(Media Access Control,简称MAC)表、地址解析协议(AddressResolution Protocol,简称ARP)表等。为了减少Hash冲突,一般采用两个哈希桶的方案,该两个哈希桶对应不同的哈希函数,如图7所示。但是由于Hash的随机性,key随机分布在各个哈希桶中,极少的(如1%)的key也会迫使驱动申请出所有的哈希桶内存,降低哈希桶内存的利用率。而本发明实施例中,采用步骤240、250、260、270描述的策略将key存储到哈希桶中,不仅可以有效保证本发明实施例提供的增量分配内存的方式处理表,提高内存利用率;同时能够提高哈希桶内存的利用率,有效地解决该问题。
因此,本发明实施例的处理表的方法,当key的数量较少时,能够大大减少占用的内存,并减少哈希桶访问的次数。
应理解,第一哈希桶和第三哈希桶对应现有技术两个哈希桶中的一个哈希桶,第二哈希桶和第四哈希桶对应现有技术中两个哈希桶中的另一哈希桶。
可选地,第一哈希桶和第三哈希桶的大小相同,第二哈希桶和第四哈希桶的大小相同,但本发明并不限定于此。
下面举例说明,将图7所示每个哈希桶的规格缩小一半,同时为每个哈希桶增加一个同样大小的扩展桶,即如图8a、8b、8c和8d所示,哈希桶1和哈希桶3对应图7中的哈希桶1,哈希桶2和哈希桶4对应图7中的哈希桶2。假设哈希桶中的每个表项能存储M条Key(比如M=6),第一阈值为M/2。
当哈希桶1的每个表项中的key的数量小于M/2时,新Key存储在哈桶1里。如图8a所示,此时哈希桶3、哈希桶2和哈希桶4都是空的,不占用内存,即最多只占用1/4内存,表查找只需要访问哈希桶一次。
当哈希桶1的每个表项中的key的数量大于等于M/2时,新Key存储在哈希桶1和哈希桶2中Key的数量少的那个桶的表项里。如图8b所示,此时哈希桶3和哈希桶4都是空的,不占用内存。也就是说此时最多只占用1/2内存,表查找最坏需要访问哈希桶2次。
当哈希桶1和哈希桶2的所有表项已满,且哈希桶3的表项中的key的数量小于M/2时,新key存储在哈希桶3里。如图8c所示,此时哈希桶4是空的,不占用内存。也就是说此时最多只占用3/4内存,表查找最坏需要访问哈希桶3次。
当哈希桶1和哈希桶2的所有表项已满,且哈希桶3的表项中的key的数量大于或等于M/2时,新Key存储在哈希桶3和哈希桶4中key的数量较少的那个哈希桶的表项里。如图8d所示,此时哈希桶1、哈希桶3、哈希桶2和哈希桶4都占用内存,即此时占用整个内存,表查找最坏需要访问哈希桶4次。
因此,在本发明实施例中,通过将现有技术中的两个哈希桶中的每个哈希桶的规格缩小,并为每个哈希桶增加至少一个扩展桶,并根据设定的策略进行存储,当key的数量较少时,能够大大减少占用的内存,并减少哈希桶访问的次数。
可选地,第一哈希桶、第二哈希桶、第三哈希桶和第四哈希桶可以关联计数器,计数器用于分别记录第一哈希桶、第二哈希桶、第三哈希桶和第四哈希桶的被访问次数。
本发明实施例中,也可以统计各个哈希桶的被访问次数,然后通过搬移,将高速访问的业务表放置到对应高带宽存储器(如片上内存)的哈希桶中。
方法200还可以包括:
处理器在第一哈希桶的被访问次数与第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第三哈希桶,再匹配第一哈希桶;
处理器在第二哈希桶的被访问次数与第四哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第四哈希桶,再匹配第二哈希桶;
处理器在第一哈希桶和第三哈希桶的被访问次数与第二哈希桶和第四哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第二哈希桶和第四哈希桶,再匹配第一哈希桶和第三哈希桶。
处理器可以通过轮询的方式获取各个哈希桶的被访问次数并比较,然后根据哈希桶的被访问次数的比值,控制转发面的网络处理器匹配哈希桶的顺序。
具体地,处理器可以根据哈希桶的被访问次数的比值配置转发面的寄存器的值(比如0或1),转发面的网络处理器读取该寄存器的值,并根据寄存器的值决定哈希桶的匹配顺序。
其中寄存器的值是预先设定的,例如寄存器的值可以为0或1。两个哈希桶的被访问次数的比值小于或等于第二阈值,说明该两个哈希桶的被访问次数接近。
需要说明的是,现有技术中,通过哈希函数查找数据时,首先匹配两个哈希桶中的第一个哈希桶,若匹配不成功,才会继续匹配第二个哈希桶。依次类推,可以理解,本发明实施例中,首先匹配第一哈***,若匹配不成功,继续匹配第三哈希桶(即第一哈希桶的扩展桶);若匹配不成功,则继续匹配第二哈希桶;若匹配还不成功,则继续匹配第四哈希桶(即第二哈希桶的扩展桶)。因此,如果第一哈希桶的被访问次数与第三哈希桶的被访问次数接近,则说明第一哈希桶的匹配成功率很低。同理,如果第一哈希桶和第三哈希桶的被访问次数与第二哈希桶和第四哈希桶的被访问次数接近,则说明第一哈希桶和第三哈希桶的匹配成功率很低。
在本发明实施例中,通过根据哈希桶的被访问次数控制网络处理器匹配哈希桶的顺序,能够减少哈希桶的访问次数,进而能够减少网络处理器对内存带宽的需求。
图9是根据本发明实施例的访问表的方法900的示意性流程图。如图9所示,方法900包括如下内容。
910、网络处理器获取第一表对应的内存块映射信息表的基址,内存块映射信息表包括第一表中的各个子表与存储单元的对应关系。
其中,内存块映射基址表中记录了表与内存块映射信息表的对应关系。
920、网络处理器根据基址和第一表的第一表项的索引访问内存块映射信息表,并根据内存块映射信息表确定第一表项所在的第一子表对应的存储单元的索引,第一子表为该第一表中的任意子表。
930、网络处理器根据存储单元的索引和第一表项的索引,确定第一表项的物理地址。
940、网络处理器根据第一表项的物理地址访问第一表项。
在本发明实施例中,网络处理器通过根据表项的索引在内存块映射信息表中确定表项的物理地址,能够根据表项的物理地址访问表项。
可选地,在步骤910中,网络处理器获取第一表对应的内存块映射信息表的基址包括:网络处理器根据第一表的表标识(Table Identifier,简称TID)访问内存块映射基址表,并根据内存块映射基址表确定内存块映射信息表的基址。
应理解,网络处理器还可以采用其他方法获取内存块映射信息表的基址,本发明实施例对此不进行限定。
可选地,在步骤910之前,方法900还包括:
网络处理器接收处理器发送的第一表的各个子表与存储单元的对应关系。
网络处理器接收到该对应关系之后可以将该对应关系写入内存映射单元中。
可选地,方法900还包括:网络处理器更新存储单元的被访问次数。
当然,网络处理器还可以更新存储器的被访问次数。
可选地,步骤920中,网络处理器根据基址和第一表项的索引访问内存块映射信息表包括:
网络处理器根据算式(1)确定的地址访问内存块映射信息表;
其中,base为内存块映射信息表基址,entry index为第一表项的索引,blocksize为第一子表包含的表项的数量。
其中,符号表示向下取整,为第一子表的索引。
可选地,步骤940包括:网络处理器根据算式(2)确定第一表项的物理地址;
real block index*block size+entry index%block size (2)
其中,real block index为存储单元的索引,block size为第一子表包含的表项的数量,第一子表包含的表项的数量与存储单元存储的表项的数量相同,entry index为第一表项的索引。
其中,符号“%”表示取余运算,符号“*”表示乘法运算,(entry index%blocksize)为第一表项在第一子表中的偏移量。
下面结合图10和图11描述根据本发明实施例的访问表的方法。
图10所示为根据本发明实施例的存储器***架构示意图。当网络处理器要访问某个表时,首先把要访问的表的表标识和表项的索引,即(tid,entry_index),发给内存映射单元,内存映射单元把表项索引转换成真实的存储器地址,然后访问存储器。同时,内存映射单元把访问请求发给统计单元,统计单元对相应存储器和存储单元的被访问次数进行计数。为了支持高性能处理能力,内存映射单元和统计单元可以采用多份复制的方式,如图10所示,比如8份复制。
内存映射单元可以实现任意表的索引到存储器的物理地址的转换。如图11所示,首先根据TID访问内存块映射基址表获得内存块映射信息表的基址,然后根据算式(1)得到的地址访问内存块映射信息表,从内存块映射信息表中获取该子表对应的存储单元的物理地址,然后根据算式(2)计算出待访问的表项的物理地址。
因此,本发明实施例的处理表的方法,网络处理器通过根据表项的索引在内存块映射信息表中确定表项的物理存储地址,能够根据表项的物理地址访问表项。
应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
上文详细描述了根据本发明实施例的处理表的方法和访问表的方法,下面详细描述根据本发明实施例的处理表的装置和访问表的装置。
图12是根据本发明实施例的处理表的装置1200的示意性框图。如图12所示,装置1200包括处理单元1210和发送单元1220。应理解,本发明实施例中,第一表包括多个子表,第一存储器包括多个存储单元,所述多个子表中包括第一子表,所述多个存储单元中包括第一存储单元。
处理单元1210,用于:在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储单元中的第一子表存储到第二存储器的第二存储单元中,第二存储器的剩余带宽高于第一子表被访问时占用的带宽,且第二存储器的剩余存储空间大于第一子表占用的存储空间;在第一存储单元中删除第一子表。
发送单元1230,用于将所述第一子表与所述第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的所述第一子表与所述第一存储单元的对应关系更新为所述第一子表与所述第二存储单元的对应关系。
因此,本发明实施例的处理表的装置,通过在存储器的运行状态达到预设条件的情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对高带宽内存的容量需求,使下一代高性能网络处理器容易实现。
可选地,处理单元1210具体用于:
确定第一存储器占用的带宽;
在第一存储器占用的带宽大于或等于第一预设值的情况下,将第一子表存储到第二存储器第二存储单元中。
相应地,处理单元1210具体用于:
获取第一存储器中每个存储单元的被访问次数;
根据每个存储单元的被访问次数,从第一存储器中确定第一存储单元,第一存储单元的被访问频率高于第一存储器中第一存储单元之外的其他存储单元的被访问频率;
从多个存储器中确定第二存储器,第二存储器的剩余带宽高于多个存储器中第二存储器之外的其他存储器的剩余带宽;
将第一子表存储到第二存储器的第二存储单元中。
本发明实施例中,在运行过程中,处理器根据各存储器的带宽的实际占用情况和存储单元的被访问次数的统计进行子表的搬移,能够满足网络处理器对内存带宽的需求。
另外,通过将被访问频率最高的子表搬移到有足够剩余带宽的存储器上,能够使得具有高带宽的存储器上存储被访问频率高的子表,这样能够大大减小网络处理器对高性能存储器容量的需求。
可选地,处理单元1210具体用于:
获取第一存储器的剩余存储空间;
在第一存储器的剩余存储空间小于或等于第二预设值的情况下,将第一子表存储到第二存储器的第二存储单元中。
本发明实施例中,在运行过程中,处理器根据各存储器的存储空间的实际占用情况进行子表的搬移,能够满足网络处理器内存容量的需求。
相应地,处理单元1210具体用于:
确定第一存储器占用的带宽;
在第一存储器占用的带宽小于第三预设值的情况下,获取第一存储器中每个存储单元的被访问次数;
根据每个存储单元的被访问次数,确定第一存储单元,第一存储单元的被访问频率低于第一存储器中第一存储单元之外的其他存储单元的被访问频率;
从多个存储器中确定第二存储器,第二存储器的剩余存储空间高于多个存储器中第二存储器之外的其他存储器的剩余存储空间;
将第一子表存储到第二存储器的第二存储单元中。
在本发明实施例中,当存储器的带宽占用小于第三预设值,但该存储器的容量已经接近占满时,通过把该存储器上占用带宽最小的一个或多个子表搬移到其它有较大空余容量同时带宽满足的存储器上,能够满足网络处理器对高带宽内存的容量需求。
另外,将子表搬移到剩余存储空间最大的存储器中,能够使得存储资源的分配更加均衡。
可选地,处理单元1210还用于,在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储单元中的第一子表存储到第二存储器中之前,为第一子表分配第一存储单元。
可选地,处理单元1210具体用于:获取第一写请求,第一写请求用于请求对第一表的第一表项进行写操作;根据第一写请求为第一子表分配第一存储单元,第一子表包括第一表项。
可选地,处理单元1210还用于记录第一子表与第一存储单元的对应关系。
可选地,处理单元1210还用于:
获取第二写请求,第二写请求用于请求对第二子表的第二表项进行写操作,多个子表中还包括第二子表;
如果确定第二子表未分配存储单元,则根据第二写请求为第二子表分配第三存储单元。
可选地,所述第一表采用哈希的方式进行存储,所述第一表的表项的关键字key存储在哈希桶的表项中。
相应地,处理单元1210还用于:
在第一哈希桶的每个表项中已存储的关键字key的数量小于第一阈值的情况下,将待存储的key存储至第一哈希桶;
在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,第一哈希桶和第二哈希桶采用不同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至第三哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函数,第二哈希桶和第四哈希桶采用相同的哈希函数。
本发明实施例中当key的数量较少时,能够减少占用的内存,并减少哈希桶访问的次数。
可选地,如图13所示,装置1200还包括控制单元1230。
控制单元1230用于:
在第一哈希桶的被访问次数与第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第三哈希桶,再匹配第一哈希桶;
在第二哈希桶的被访问次数与第四哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第四哈希桶,再匹配第二哈希桶;
在第一哈希桶和第三哈希桶的被访问次数与第二哈希桶和第四哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第二哈希桶和第四哈希桶,再匹配第一哈希桶和第三哈希桶。
在本发明实施例中,通过根据哈希桶的被访问次数控制网络处理器匹配哈希桶的顺序,能够减少哈希桶的访问次数,进而能够减少网络处理器对内存带宽的需求。
可选地,第一哈希桶和第三哈希桶的可以相同,第二哈希桶和第四哈希桶的大小相同。
应理解,根据本发明实施例的处理表的装置1200可对应于根据本发明实施例的处理表的方法200中的处理器,并且装置1200的各个单元的上述和其它操作和/或功能分别为了实现方法200的相应流程,为了简洁,在此不再赘述。
因此,本发明实施例的处理表的装置,通过在存储器的运行状态达到预设条件的情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对高带宽内存的容量需求,使下一代高性能网络处理器容易实现。
图14是根据本发明实施例的访问表的装置1400的示意性框图。如图14所示,装置1400包括处理单元1410和访问单元1420。
处理单元1410,用于:获取第一表对应的内存块映射信息表的基址,内存块映射信息表包括第一表中的各个子表与存储单元的对应关系;根据基址和第一表的第一表项的索引访问内存块映射信息表,并根据内存块映射信息表确定第一表项所在的第一子表对应的存储单元的索引,第一子表为第一表中的任意子表;根据存储单元的索引和第一表项的索引,确定第一表项的物理地址。
访问单元1420,用于根据第一表项的物理地址访问第一表项。
在本发明实施例中,网络处理器通过根据表项的索引在内存块映射信息表中确定表项的物理地址,能够根据表项的物理地址访问表项。
可选地,处理单元1410具体用于,根据第一表的表标识TID访问内存块映射基址表,并根据所述内存块映射基址表确定所述内存储块映射信息表的基址。
可选地,如图15所示,装置1400还可以包括:接收单元1430,用于在处理单元1410获取第一表对应的内存块映射信息表的基址之前,接收处理器发送的第一表中的各个子表与存储单元的对应关系。
可选地,处理单元1410还用于更新存储单元的被访问次数。
可选地,处理单元1410具体用于:根据算式(1)确定的地址访问内存块映射信息表,
其中,base为基址,entry index为第一表项的索引,block size为第一子表包含的表项的数量。
可选地,处理单元1410具体用于:根据算式(2)确定第一表项的物理地址,
real block index*block size+entry index%block size (2)
其中,real block index为存储单元的索引,block size为第一子表包含的的表项的数量,第一子表包含的表项的数量与存储单元存储的表项的数量相同,entry index为第一表项的索引。
应理解,根据本发明实施例访问表的装置1400可对应于根据本发明实施例的访问表的方法900中的网络处理器,并且装置1400的各个单元的上述和其它操作和/或功能分别为了实现方法900的相应流程,为了简洁,在此不再赘述。
在本发明实施例中,网络处理器通过根据表项的索引在内存块映射信息表中确定表项的物理地址,能够根据表项的物理地址访问表项。
本发明实施例还提供了一种处理表的装置1600。如图16所示,该装置1600包括处理器1610、存储器1620、总线***1630和发送器1640。其中,处理器1610、存储器1620和发送器1640通过总线***1630相连,该存储器1620用于存储指令,该处理器1610用于执行该存储器1620存储的指令。
存储器1620还用于存储子表。存储器1620包括第一存储器和第二存储器。第一存储器和第二存储器分别包括多个存储单元,一个存储单元用于存储一个子表。
处理器1610用于:用于在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储器的第一存储单元中的第一子表存储到第二存储器的第二存储单元中,第二存储器的剩余带宽高于第一子表被访问时占用的带宽,且第二存储器的剩余存储空间大于第一子表占用的存储空间;在第一存储单元中删除第一子表。
发送器1640用于将第一子表与第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的第一子表与第一存储单元的对应关系更新为第一子表与第二存储单元的对应关系。
因此,本发明实施例的处理表的装置,通过在存储器的运行状态达到预设条件的情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对高带宽内存的容量需求,使下一代高性能网络处理器容易实现。
应理解,在本发明实施例中,该处理器1610可以是中央处理单元(CentralProcessing Unit,简称CPU),该处理器1610还可以是其他通用处理器、数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器1620可以包括只读存储器和随机存取存储器,并向处理器1610提供指令和数据。存储器1620的一部分还可以包括非易失性随机存取存储器。例如,存储器1620还可以存储设备类型的信息。
该总线***1630除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线***1630。
在实现过程中,上述方法的各步骤可以通过处理器1610中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1620,处理器1610读取存储器1620中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
可选地,处理器1610具体用于:
确定第一存储器占用的带宽;
在第一存储器占用的带宽大于或等于第一预设值的情况下,将第一子表存储到第二存储器中。
相应地,处理器1610具体用于:
获取第一存储器中每个存储单元的被访问次数;
根据每个存储单元的被访问次数,从第一存储器中确定第一存储单元,第一存储单元的被访问频率高于第一存储器中第一存储单元之外的其他存储单元的被访问频率;
从多个存储器中确定第二存储器,第二存储器的剩余带宽高于多个存储器中第二存储器之外的其他存储器的剩余带宽;
将第一子表存储到第二存储器的第二存储单元中。
本发明实施例中,在运行过程中,处理器根据各存储器的带宽的实际占用情况和存储单元的被访问次数的统计进行子表的搬移,能够满足网络处理器对内存带宽的需求。
另外,通过将被访问频率最高的子表搬移到有足够剩余带宽的存储器上,能够使得具有高带宽的存储器上存储被访问频率高的子表,这样能够大大减小网络处理器对高性能存储器容量的需求。
可选地,处理器1610还可以具体用于:
获取第一存储器的剩余存储空间;
在第一存储器的剩余存储空间小于或等于第二预设值的情况下,将第一子表存储到第二存储器中。
本发明实施例中,在运行过程中,处理器根据各存储器的存储空间的实际占用情况进行子表的搬移,能够满足网络处理器内存容量的需求。
相应地,处理器1610具体用于:
确定第一存储器占用的带宽;
在第一存储器占用的带宽小于第三预设值的情况下,获取第一存储器中每个存储单元的被访问次数;
根据每个存储单元的被访问次数,确定第一存储单元,第一存储单元的被访问频率低于第一存储器中第一存储单元之外的其他存储单元的被访问频率;
从多个存储器中确定第二存储器,第二存储器的剩余存储空间高于多个存储器中第二存储器之外的其他存储器的剩余存储空间;
将第一子表存储到第二存储器的第二存储单元中。
在本发明实施例中,当存储器的带宽占用小于第三预设值,但该存储器的容量已经接近占满时,通过把该存储器上占用带宽最小的一个或多个子表搬移到其它有较大空余容量同时带宽满足的存储器上,能够满足网络处理器对高带宽内存的容量需求。
另外,将子表搬移到剩余存储空间最大的存储器中,能够使得存储资源的分配更加均衡。
可选地,处理器1610还用于,在第一存储器的运行状态达到预设条件的情况下,将已存储在第一存储器的第一存储单元中的第一子表存储到第二存储器的第二存储单元中之前,为第一子表分配第一存储单元。
相应地,处理器1610具体用于:获取第一写请求,第一写请求用于请求对第一表的第一表项进行写操作;根据第一写请求为第一子表分配第一存储单元,第一子表包括第一表项。
可选地,存储器1620还用于存储第一子表与第一存储单元的对应关系。
可选地,处理器1610还用于:
获取第二写请求,第二写请求用于请求对第二子表的第二表项进行写操作,多个子表中还包括第二子表;
确定第二子表未分配存储单元,则根据第二写请求为第二子表分配第三存储单元。
可选地,第一表采用哈希的方式进行存储,第一表的表项的关键字key存储在哈希桶的表项中。
相应地,处理单元1610还用于:
在第一哈希桶的每个表项中已存储的关键字key的数量小于第一阈值的情况下,将待存储的key存储至第一哈希桶;
在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,第一哈希桶和第二哈希桶采用不同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至第三哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中的key的数量大于或等于第一阈值的情况下,将待存储的key存储至第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,第一哈希桶和第三哈希桶采用相同的哈希函数,第二哈希桶和第四哈希桶采用相同的哈希函数。
本发明实施例中,当key的数量较少时,能够大大减少占用的内存,并减少哈希桶访问的次数。
可选地,处理器1610还用于:
在第一哈希桶的被访问次数与第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第三哈希桶,再匹配第一哈希桶;
在第二哈希桶的被访问次数与第四哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第四哈希桶,再匹配第二哈希桶;
在第一哈希桶和第三哈希桶的被访问次数与第二哈希桶和第四哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配第二哈希桶和第四哈希桶,再匹配第一哈希桶和第三哈希桶。
在本发明实施例中,通过根据哈希桶的被访问次数控制网络处理器匹配哈希桶的顺序,能够减少哈希桶的访问次数,进而能够减少网络处理器对内存带宽的需求。
可选地,第一哈希桶和第三哈希桶的大小相同,第二哈希桶和第四哈希桶的大小相同。
应理解,根据本发明实施例的处理表的装置1600可对应于根据本发明实施例的处理表的方法200中的处理器以及根据本发明实施例的处理表的装置1200,并且装置1600的各个单元的上述和其它操作和/或功能分别为了实现方法200的相应流程,为了简洁,在此不再赘述。
因此,本发明实施例的处理表的装置,通过在存储器的运行状态达到预设条件的情况下,将部分存储在该存储器的存储单元中的子表搬移到有足够剩余带宽和存储空间的其他存储器中,能够减小高性能网络处理器对高带宽内存的容量需求,使下一代高性能网络处理器容易实现。
图17是根据本发明实施例的访问表的装置1700的示意性框图。如图17所示,装置1700包括处理器1710、存储器1720和总线***1730。其中,处理器1710和存储器1720通过总线***1730相连,该存储器1720用于存储指令,该处理器1710用于执行该存储器1720存储的指令。
存储器1720还可以用于存储子表。存储器1720包括多个存储单元,其中一个存储单元用于存储一个子表。
处理器1710具体用于:
获取第一表对应的内存块映射信息表的基址,内存块映射信息表包括第一表中的各个子表与存储单元的对应关系;
根据基址和第一表的第一表项的索引访问内存块映射信息表,并根据内存块映射信息表确定第一表项所在的第一子表对应的存储单元的索引,第一子表为第一表中的任意子表;
根据存储单元的索引和第一表项的索引,确定第一表项的物理地址;
根据第一表项的物理地址访问第一表项。
在本发明实施例中,网络处理器通过根据表项的索引在内存块映射信息表中确定表项的物理地址,能够根据表项的物理地址访问表项。
应理解,在本发明实施例中,该处理器1710可以是中央处理单元(CentralProcessing Unit,简称CPU),该处理器1710还可以是其他通用处理器、数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器1720可以包括只读存储器和随机存取存储器,并向处理器1710提供指令和数据。存储器1720的一部分还可以包括非易失性随机存取存储器。例如,存储器1720还可以存储设备类型的信息。
该总线***1730除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线***1730。
在实现过程中,上述方法的各步骤可以通过处理器1710中的硬件的集成逻辑电路或者软件形式的指令完成。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1720,处理器1710读取存储器1720中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
可选地,处理器1710还用于更新存储单元的被访问次数。
可选地,装置1700还可以包括:接收器1740,通过总线***1730与处理器1710、存储器1720相连。接收器1740用于在处理器1710获取内存块映射基址表的基址之前,接收控制面的处理器发送的第一表的各个子表与存储单元的对应关系。
可选地,处理器1710具体用于根据算式(1)确定的地址访问内存块映射信息表;
其中,base为基址,entry index为第一表项的索引,block size为第一子表包含的表项的数量。
可选地,处理器1710具体用于:根据算式(2)确定第一表项的物理地址;
real block index*block size+entry index%block size (2)
其中,real block index为存储单元的索引,block size为第一子表包含的表项的数量,第一子表包含的表项的数量与存储单元存储的表项的数量相同,entry index为第一表项的索引。
应理解,根据本发明实施例的访问表的装置1700可对应于根据本发明实施例的访问表的方法900中的网络处理器和根据本发明实施例的访问表的装置1400,并且装置1700中的各个单元的上述和其它操作和/或功能分别为了实现方法900的相应流程,为了简洁,在此不再赘述。
在本发明实施例中,网络处理器通过根据表项的索引在内存块映射信息表中确定表项的物理地址,能够根据表项的物理地址访问表项。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (22)

1.一种处理表的方法,其特征在于,第一表包括多个子表,第一存储器包括多个存储单元,所述多个子表中包括第一子表,所述多个存储单元中包括第一存储单元,所述方法包括:
处理器获取所述第一存储器的剩余存储空间;在所述第一存储器的剩余存储空间小于或等于第二预设值的情况下,所述处理器确定所述第一存储器占用的带宽;
所述处理器在所述第一存储器占用的带宽小于第三预设值的情况下,获取所述第一存储器中每个存储单元的被访问次数;
所述处理器根据所述每个存储单元的被访问次数,确定所述第一存储单元,所述第一存储单元的被访问频率低于所述第一存储器中所述第一存储单元之外的其他存储单元的被访问频率;
所述处理器将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中,所述第二存储器的剩余带宽高于所述第一子表被访问时占用的带宽,且所述第二存储器的剩余存储空间大于所述第一子表占用的存储空间;
所述处理器在所述第一存储单元中删除所述第一子表;
所述处理器将所述第一子表与所述第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的所述第一子表与所述第一存储单元的对应关系更新为所述第一子表与所述第二存储单元的对应关系。
2.根据权利要求1所述的方法,其特征在于,
所述处理器从多个存储器中确定所述第二存储器,所述第二存储器的剩余存储空间高于所述多个存储器中所述第二存储器之外的其他存储器的剩余存储空间。
3.根据权利要求1或2所述的方法,其特征在于,所述处理器将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中之前,所述方法还包括:
所述处理器获取第一写请求,所述第一写请求用于请求对第一表的第一表项进行写操作;
所述处理器根据所述第一写请求为所述第一子表分配所述第一存储单元,所述第一子表包括所述第一表项。
4.根据权利要求3所述的方法,其特征在于,还包括:
所述处理器获取第二写请求,所述第二写请求用于请求对第二子表的第二表项进行写操作,所述多个子表中还包括所述第二子表;
如果所述处理器确定所述第二子表未分配存储单元,则所述处理器根据所述第二写请求为所述第二子表分配第三存储单元。
5.根据权利要求1或2所述的方法,其特征在于,所述第一表采用哈希的方式进行存储,所述第一表的表项的关键字key存储在哈希桶的表项中,所述方法还包括:
处理器在第一哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储到所述第一哈希桶中;
所述处理器在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储到所述第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第二哈希桶采用不同的哈希函数;
所述处理器在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储到所述第三哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数;
所述处理器在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储到第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数,所述第二哈希桶和所述第四哈希桶采用相同的哈希函数。
6.根据权利要求5所述的方法,其特征在于,还包括:
所述处理器在所述第一哈希桶的被访问次数与所述第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配所述第三哈希桶,再匹配所述第一哈希桶;
所述处理器在所述第二哈希桶的被访问次数与所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第四哈希桶,再匹配所述第二哈希桶;
所述处理器在所述第一哈希桶和所述第三哈希桶的被访问次数与所述第二哈希桶和所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第二哈希桶和所述第四哈希桶,再匹配所述第一哈希桶和所述第三哈希桶。
7.一种访问表的方法,其特征在于,包括:
网络处理器获取第一表对应的内存块映射信息表的基址,所述内存块映射信息表包括所述第一表中的各个子表与存储单元的对应关系;
所述网络处理器根据所述基址和所述第一表的第一表项的索引访问所述内存块映射信息表,并根据所述内存块映射信息表确定所述第一表项所在的第一子表对应的存储单元的索引,所述第一子表为所述第一表中的任意子表;
所述网络处理器根据所述存储单元的索引和所述第一表项的索引,确定所述第一表项的物理地址;
所述网络处理器根据所述第一表项的物理地址访问所述第一表项。
8.根据权利要求7所述的方法,其特征在于,所述网络处理器获取第一表对应的内存块映射信息表的基址包括:
所述网络处理器根据所述第一表的表标识TID访问内存块映射基址表,并根据所述内存块映射基址表确定所述内存块映射信息表的基址。
9.根据权利要求7或8所述的方法,其特征在于,还包括:
所述网络处理器更新所述存储单元的被访问次数。
10.根据权利要求7或8所述的方法,其特征在于,所述网络处理器根据所述基址和所述第一表项的索引访问所述内存块映射信息表包括:
所述网络处理器根据下式确定的地址访问所述内存块映射信息表,
其中,base为所述基址,entry index为所述第一表项的索引,block size为所述第一子表包含的表项的数量。
11.根据权利要求7或8所述的方法,其特征在于,所述网络处理器根据所述存储单元的索引和所述第一表项的索引,确定所述第一表项的物理地址,包括:
所述网络处理器根据下式确定所述第一表项的物理地址,
real block index*block size+entry index%block size
其中,real block index为所述存储单元的索引,block size为所述第一子表包含的表项的数量,所述第一子表包含的表项的数量与所述存储单元存储的表项的数量相同,entry index为所述第一表项的索引。
12.一种处理表的装置,其特征在于,第一表包括多个子表,第一存储器包括多个存储单元,所述多个子表中包括第一子表,所述多个存储单元中包括第一存储单元,所述装置包括:
处理单元,用于:获取所述第一存储器的剩余存储空间;在所述第一存储器的剩余存储空间小于或等于第二预设值的情况下,确定所述第一存储器占用的带宽;在所述第一存储器占用的带宽小于第三预设值的情况下,获取所述第一存储器中每个存储单元的被访问次数;根据所述每个存储单元的被访问次数,确定所述第一存储单元,所述第一存储单元的被访问频率低于所述第一存储器中所述第一存储单元之外的其他存储单元的被访问频率;
将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中,所述第二存储器的剩余带宽高于所述第一子表被访问时占用的带宽,且所述第二存储器的剩余存储空间大于所述第一子表占用的存储空间;在所述第一存储单元中删除所述第一子表;
发送单元,用于将所述第一子表与所述第二存储单元的对应关系发送给网络处理器,以使网络处理器将保存的所述第一子表与所述第一存储单元的对应关系更新为所述第一子表与所述第二存储单元的对应关系。
13.根据权利要求12所述的装置,其特征在于,所述处理单元具体用于:
从多个存储器中确定所述第二存储器,所述第二存储器的剩余存储空间高于所述多个存储器中所述第二存储器之外的其他存储器的剩余存储空间。
14.根据权利要求12或13所述的装置,其特征在于,所述处理单元还用于:
将已存储在所述第一存储单元中的所述第一子表存储到第二存储器的第二存储单元中之前,获取第一写请求,所述第一写请求用于请求对第一表的第一表项进行写操作;
根据所述第一写请求为所述第一子表分配所述第一存储单元,所述第一子表包括所述第一表项。
15.根据权利要求14所述的装置,其特征在于,所述处理单元还用于:
获取第二写请求,所述第二写请求用于请求对第二子表的第二表项进行写操作,所述多个子表中还包括所述第二子表;
如果确定所述第二子表未分配存储单元,则根据所述第二写请求为所述第二子表分配第三存储单元。
16.根据权利要求12或13所述的装置,其特征在于,所述第一表采用哈希的方式进行存储,所述第一表的表项的关键字key存储在哈希桶的表项中,所述处理单元还用于:
在第一哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至所述第一哈希桶;
在第一哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至所述第一哈希桶和第二哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第二哈希桶采用不同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量小于第一阈值的情况下,将待存储的key存储至所述第三哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数;
在第一哈希桶和第二哈希桶的表项已满,且第三哈希桶的每个表项中已存储的key的数量大于或等于第一阈值的情况下,将待存储的key存储至第三哈希桶和第四哈希桶中已存储的key的数量较少的哈希桶中,所述第一哈希桶和所述第三哈希桶采用相同的哈希函数,所述第二哈希桶和所述第四哈希桶采用相同的哈希函数。
17.根据权利要求16所述的装置,其特征在于,还包括:
控制单元,用于:
在所述第一哈希桶的被访问次数与所述第三哈希桶的被访问次数的比值小于或等于第二阈值的情况下,控制网络处理器先匹配所述第三哈希桶,再匹配所述第一哈希桶;
在所述第二哈希桶的被访问次数与所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第四哈希桶,再匹配所述第二哈希桶;
在所述第一哈希桶和所述第三哈希桶的被访问次数与所述第二哈希桶和所述第四哈希桶的被访问次数的比值小于或等于所述第二阈值的情况下,控制网络处理器先匹配所述第二哈希桶和所述第四哈希桶,再匹配所述第一哈希桶和所述第三哈希桶。
18.一种访问表的装置,其特征在于,包括:
处理单元,用于:获取第一表对应的内存块映射信息表的基址,所述内存块映射信息表包括所述第一表中的各个子表与存储单元的对应关系;根据所述基址和所述第一表的第一表项的索引访问所述内存块映射信息表,并根据所述内存块映射信息表确定所述第一表项所在的第一子表对应的存储单元的索引,所述第一子表为所述第一表中的任意子表;根据所述存储单元的索引和所述第一表项的索引,确定所述第一表项的物理地址;
访问单元,用于根据所述第一表项的物理地址访问所述第一表项。
19.根据权利要求18所述的装置,其特征在于,所述处理单元具体用于,根据第一表的表标识TID访问内存块映射基址表,并根据所述内存块映射基址表确定所述内存块映射信息表的基址。
20.根据权利要求18或19所述的装置,其特征在于,所述处理单元还用于更新所述存储单元的被访问次数。
21.根据权利要求18或19所述的装置,其特征在于,所述处理单元具体用于:
根据下式确定的地址访问所述内存块映射信息表,
其中,base为所述基址,entry index为所述第一表项的索引,block size为所述第一子表包含的表项的数量。
22.根据权利要求18或19所述的装置,其特征在于,所述处理单元具体用于:
根据下式确定所述第一表项的物理地址,
real block index*block size+entry index%block size
其中,real block index为所述存储单元的索引,block size为所述第一子表包含的表项的数量,所述第一子表包含的表项的数量与所述存储单元存储的表项的数量相同,entry index为所述第一表项的索引。
CN201510274566.8A 2015-05-26 2015-05-26 处理表的方法、访问表的方法和装置 Active CN106294191B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510274566.8A CN106294191B (zh) 2015-05-26 2015-05-26 处理表的方法、访问表的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510274566.8A CN106294191B (zh) 2015-05-26 2015-05-26 处理表的方法、访问表的方法和装置

Publications (2)

Publication Number Publication Date
CN106294191A CN106294191A (zh) 2017-01-04
CN106294191B true CN106294191B (zh) 2019-07-09

Family

ID=57634545

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510274566.8A Active CN106294191B (zh) 2015-05-26 2015-05-26 处理表的方法、访问表的方法和装置

Country Status (1)

Country Link
CN (1) CN106294191B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108572962B (zh) * 2017-03-08 2020-11-17 华为技术有限公司 一种存储物理数据表的方法及装置
CN112491725B (zh) * 2020-11-30 2022-05-20 锐捷网络股份有限公司 一种mac地址的处理方法及装置
CN114490449B (zh) * 2022-04-18 2022-07-08 飞腾信息技术有限公司 一种内存访问方法、装置及处理器
CN116016432A (zh) * 2022-12-30 2023-04-25 迈普通信技术股份有限公司 报文转发方法、装置、网络设备和计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101566986A (zh) * 2008-04-21 2009-10-28 阿里巴巴集团控股有限公司 联机事务处理中的数据处理方法和装置
CN101909068A (zh) * 2009-06-02 2010-12-08 华为技术有限公司 一种文件副本管理方法及装置、***

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6799258B1 (en) * 2001-01-10 2004-09-28 Datacore Software Corporation Methods and apparatus for point-in-time volumes

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101566986A (zh) * 2008-04-21 2009-10-28 阿里巴巴集团控股有限公司 联机事务处理中的数据处理方法和装置
CN101909068A (zh) * 2009-06-02 2010-12-08 华为技术有限公司 一种文件副本管理方法及装置、***

Also Published As

Publication number Publication date
CN106294191A (zh) 2017-01-04

Similar Documents

Publication Publication Date Title
CN107220187B (zh) 一种缓存管理方法、装置及现场可编程门阵列
US20180343131A1 (en) Accessing composite data structures in tiered storage across network nodes
US20160132541A1 (en) Efficient implementations for mapreduce systems
EP2614621B1 (en) Content router forwarding plane architecture
US20200136971A1 (en) Hash-table lookup with controlled latency
CN108829344A (zh) 数据存储方法、装置及存储介质
US11310158B2 (en) Packet classification using fingerprint hash table
US20150177990A1 (en) Blob pools, selectors, and command set implemented within a memory appliance for accessing memory
CN106294191B (zh) 处理表的方法、访问表的方法和装置
US9304939B2 (en) Method and multi-core communication processor for replacing data in system cache
WO2020199760A1 (zh) 数据存储方法、存储器和服务器
US11425057B2 (en) Packet processing
US8402198B1 (en) Mapping engine for a storage device
US10073878B1 (en) Distributed deduplication storage system with messaging
WO2016019554A1 (zh) 一种队列管理的方法和装置
CN114710467B (zh) Ip地址存储方法、装置和硬件网关
US20150256601A1 (en) System and method for efficient content caching in a streaming storage
KR20170009961A (ko) 패킷 처리를 위한 다중 테이블 해시 기반 룩업
WO2021232743A1 (zh) 缓存管理方法、装置、存储介质和固态非易失存储设备
CN114996023B (zh) 目标缓存装置、处理装置、网络设备及表项获取方法
US10185783B2 (en) Data processing device, data processing method, and non-transitory computer readable medium
US7069397B2 (en) Stream based memory manager with function specific hardware logic for accessing data as a stream in memory
WO2019242374A1 (zh) 数据结构、数据索引方法、装置及设备、存储介质
CN114567614B (zh) 基于fpga实现arp协议处理的方法及装置
EP3481014B1 (en) Forwarding table entry access

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211223

Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province

Patentee after: xFusion Digital Technologies Co., Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.