一种实现高速缓存表的方法与流程

文档序号:13804564阅读:441来源:国知局
本发明涉及多核通用处理器查表转发
技术领域
:,具体涉及一种实现高速缓存表的方法。
背景技术
::一台网络通讯设备,其处理器在处理报文时,会经历多次查表过程,每次查表会从前一查表过程取得,或从报文中取得,或其他途径取得查表关键字,也可以从多种渠道组合得到查表关键字,查表关键字和被查表的每个表项的关键字部分进行匹配,匹配有相等匹配,掩码后相等匹配,以及最长匹配等,最简单的就是相等匹配,相等匹配是如果表项的关键字和查表关键字相等,则认为匹配成功,匹配成功后,该表项中保存的结果被提取出来用于处理报文。这种表其实就是sdn中的流表(flowtable)。表的添加,删除,查找的速度以及表的容量都是设备性能比较重要的指标。为了提高查表速度等,通常会牺牲内存,使用直接索引表,是申请一大块内存,等于最大关键字的值乘以表项大小,以关键字作为索引去访问每个表项。关键字直接就是索引,一次找到结果,查找速度快,缺点耗内存大。比直接索引表速度慢一点的耗内存相对较少的是哈希索引表。从关键字计算出一个索引,这个索引不能唯一确定到查表结果,需要遍历冲突链表,逐个匹配查找,查表速度慢,耗内存小。直接索引表和哈希索引表是两种最重要的表组织方法,还有trie表,二叉树等等其他的表组织方法,特点就是比较复杂,速度慢。对于任何表的查找速度需要提高,可以为这个原始表配套建立一个高速缓存表,查表算法改进为先根据关键字查高速缓存表,查找如果命中,过程结束。如果查找不到结果,根据关键字查原始表获得结果,如果原始表查找结果是查找命中,结果和关键字根据某种原则过滤后放入高速缓存。表项需要变动时,导致缓存失效,需要清除缓存相关表项或清除整个表项。上述是构建高速缓存表的通用方法。高速缓存表的操作包括查找,添加,指定删除或全删除。高速缓存表常需要在通用cpu外增加额外硬件例如tcam来实现,成本较高,但效果比较好。技术实现要素:本发明提出的一种实现高速缓存表的方法,提供一种低成本实现高速缓存表的方法。为实现上述目的,本发明采用了以下技术方案:一种实现高速缓存表的方法,硬件需要选取支持simd指令的通用处理器,包括以下步骤:1)使用一个或多个simd寄存器用于关键字的匹配,使用一个或多个simd寄存器或内存保存缓存条目的结果;使用simd指令操作simd寄存器,以及配合使用内存来实现缓存查找,缓存添加,缓存指定删除,缓存全删除。支持关键字大小包括,1字节,2字节,4字节,8字节等,即通用cpu携带的simd寄存器支持的单元大小,如果是128位simd寄存器这样对应每个寄存器支持的单元数量为16,8,4,2。2)高速缓存的查找,将查表关键字放入simd寄存器b,通过simd指令,将关键字复制到simd寄存器b的各个单元。通过simd寄存器b去和保存在simd寄存器a中的表关键字信息匹配结果放到simd寄存器b,simd寄存器b某个单元的值如果是1表示匹配,是0表示不匹配,获取simd寄存器b最高位连续为0的个数(这是可使用方式之一,也可其他方式),经过换算,得到匹配单元的单元号n。再用n去内存或另一个simd寄存器d中提取结果。3)高速缓存添加,使用上述高速缓存查找方法查找simd寄存器a中无效单元n,将待添加关键字替换该单元中无效值,结果写入n相应于内存或另一个simd寄存器d相应单元。4)高速缓存指定删除,对于需要删除的单元n,修改simd寄存器a中对应单元值为无效值。5)高速缓存全删除,simd寄存器a所有单元设置为无效值。由上可知,本发明的一种实现高速缓存表的方法,有益效果如下:本发明的高速缓存表查找速度较快,命中时会比查直接表命中甚至还会更快,因为不访存;各个核的缓存相独立,在流分发时,缓存容量相当于各个核的缓存容量叠加;不命中时代价低,查找的时间就是代价,查找速度快,不命中代价低;添加时速度快,键值simd寄存器某个表项如果为无效值那么,添加到该表项,查找无效值表项使用simd一对多的匹配非常快,存缓存键值也就非常快,因为不访存,如果simd寄存器保存结果,速度非常快,保存到内存会稍慢一点;最好的情况下查表均能命中高速缓存表,性能大幅度提升。附图说明图1是本发明的高速缓存的查找示意图;图2是一个ipv4路由表的高速缓存表;图3是一个ipv4路由表支持地址+掩码的高速缓存表的实现高速缓存表;图4是一个ipv4路由表支持地址+vpnid的高速缓存表的实现高速缓存表。具体实施方式下面结合附图对本发明做进一步说明:如图2所示:是一个ipv4路由表的高速缓存表实现,ipv4路由表(后通称为原始表)的关键字是目的ip地址,原始表的查表结果是一个索引值,该表查找方式为目的地址的相等匹配。该表中有10.1.1.1,11.1.1.1,192.8.1.1等多个条目,高速缓存表占用两个neonsimd寄存器,一个寄存器a,用于保存关键字,另一个寄存器d保存查表结果,该缓存表已经添加了一条有效的条目11.1.1.1,查表结果是123,其他3个条目为无效。查找时如图1所示,先复制查找关键字目的地址11.1.1.1到simdregisterb各个单元,如图1所示registerb中得到复制后结果,接下来匹配操作,用simd指令进行匹配b=(b==a),如图1所示registerb中得到匹配后结果,registerb中有效项是第一个条目,然后从d提取结果123到寄存器b中。如图3所示:是一个ipv4路由表支持地址+掩码的高速缓存表的实现,由于匹配使用了掩码,高速缓存可以支持更多的流,但因为路由表是最长匹配,只有叶子路由才能放入该缓存。原始表的关键字是目的ip地址和掩码,原始表的查表结果是一个索引值,该表查找方式为目的地址和掩码算术与操作后的的相等匹配。该表中有10.1.1.0/24,11.0.0.0/8,192.8.1.1/32等多个条目,高速缓存表占用三个neonsimd寄存器,其中寄存器a,用于保存目的地址关键字,寄存器c保存掩码关键字寄存器,寄存器d保存查表结果,该缓存表已经添加了三条有效的条目,有1个条目为无效。查找也是经过复制,匹配,取结果的过程,所不同的是,simd指令进行匹配算法换为b=((b&c)==a),如果是11.1.1.2的目的地址来查找这张表,匹配后结果会是b{0,1,0,0},然后从寄存器d中提取到单元2的数值:123。如果是192.8.1.1的目的地址来查找这张表,匹配后结果会是b{0,0,1,0},然后从寄存器d中提取到单元3的数值:1026。如图4所示:是一个ipv4路由表支持地址+vpnid的高速缓存表的实现。原始表的关键字是目的ip地址和vpnid,原始表的查表结果是一个索引值,该表查找方式为目的地址和vpnid同表项中条目同时相等的匹配。该表中有10.1.1.1(1),10.1.1.1(2)11.1.1.1(1),192.8.1.1(1)4个条目,高速缓存表占用2个neonsimd寄存器,其中寄存器a,用于保存目的地址关键字,寄存器d同时保存查表结果和vpnid关键字,(各占16bits),该缓存表已经添加了4条有效的条目。查找时,复制,匹配,取结果的过程都有,查表的输入数据这里使用了ac两个寄存器进行,复制过程如图4右下表所示。匹配过程中,simd指令进行匹配算法为b=((b==a)&&((d&0xff)==c),如果是10.1.1.2(1)的目的地址来查找这张表,匹配后结果会是b{1,0,0,0},然后从寄存器d中提取到单元2的数值:128、1(各占16bit),右移16bit得到结果128。如果是10.1.1.2(2)的目的地址来查找这张表,匹配后结果会是b{0,1,0,0},然后从寄存器d中提取到单元2的数值:1028、1(各占16bit),右移16bit得到结果1028。以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1