一种路由表项处理方法及装置与流程

文档序号:17695308发布日期:2019-05-17 21:27阅读:400来源:国知局
一种路由表项处理方法及装置与流程

本发明涉及网络通信技术领域,尤其涉及一种路由表项处理方法及装置。



背景技术:

目前,为了提高路由表项查找性能,通常采用硬件方式进行路由表项查找,最常见的实现方案就是采用高性能np(networkprocessors,网络处理器)配合外挂的tcam(ternarycontentaddressablememory,三态内容寻址存储器)芯片,将路由表项保存在np外挂的tcam芯片以及np外挂的内存里,实现路由表项的高速查找。

如图1所示,路由表项的key(键)和result(结果)部分分别存储到tcam芯片和np外挂的内存中,存储路由表项的key表项和存储路由表项的result的表项称之为硬件表项。为了管理这些硬件表项,一般将硬件表项的相关信息(可以称为软件表项)保存到cpu(centerprocessunit,中央处理单元)外挂的内存中,软件程序通过对软件表项的信息处理来实现对路由表项的管理操作。

然而实践发现,上述方案中,对于每一条路由表项,当需要在tcam芯片和np外挂的内存中存储路由表项对应的硬件表项时,均需要在cpu外挂的内存中申请内存空间用于存储硬件表项对应的软件表项,其实现效率较低,且向cpu外挂的内存申请内存空间时可能会出现申请不成功的情况,进一步降低效率。



技术实现要素:

本发明提供一种路由表项处理方法及装置,以解决现有技术中硬件表项存储效率较低的问题。

根据本发明实施例的第一方面,提供一种路由表项处理方法,包括:

在cpu外挂的内存中创建内存资源数组,所述内存资源数组包括第一数量的数组元素;

分别为所述内存资源数组的各数组元素从所述cpu外挂的内存中申请一个预设大小的内存资源,并将所申请的内存资源的地址保存在数组元素中;

建立所述内存资源数组中各数组元素与handle索引列表中各元素的对应关系;其中,所述handle索引列表中各元素与所述内存资源数组中的各数组元素一一对应;

基于所述内存资源数组以及所述handle索引列表进行路由表项处理。

根据本发明实施例的第二方面,提供一种路由表项处理装置,包括:

创建单元,用于在中央处理单元cpu外挂的内存中创建内存资源数组,所述内存资源数组包括第一数量的数组元素;

申请单元,用于分别为所述内存资源数组的各数组元素从所述cpu外挂的内存中申请一个预设大小的内存资源,并将所申请的内存资源的地址保存在数组元素中;

关联单元,用于建立所述内存资源数组中各数组元素与handle索引列表中各元素的对应关系;其中,所述handle索引列表中各元素与所述内存资源数组中的各数组元素一一对应;

处理单元,用于基于所述内存资源数组以及所述handle索引列表进行路由表项处理。

应用本发明实施例,通过创建内存资源数组,分别为内存资源数组的各数组元素从cpu外挂的内存中申请一个预设大小的内存资源,将所申请的内存资源的地址保存在数组元素中,并建立内存资源数组中各数组元素与handle索引列表中各元素的对应关系进而,基于内存资源数组以及handle索引列表进行路由表项处理,与现有硬件表项存储方案中每一次进行硬件表项存储均需要进行申请内存资源的实现方式相比,仅需在硬件表项存储之前申请一次内存资源,提高了硬件表项存储的效率。

附图说明

图1是一种硬件表项存储结构的示意图;

图2是本发明实施例提供的一种路由表项处理方法的流程示意图;

图3a~3b是本发明实施例提供的内存资源数组的示意图;

图4是本发明实施例提供的一种路由表项处理装置的结构示意图;

图5是本发明实施例提供的另一种路由表项处理装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。

请参见图2,为本发明实施例提供的一种路由表项处理方法的流程示意图,其中,该路由表项处理方法可以应用于路由设备(如路由器或交换机等),如图2所示,该路由表项处理方法可以包括以下步骤:

步骤201、在cpu外挂的内存中创建内存资源数组,该内存资源数组包括第一数量的数组元素。

步骤202、分别为内存资源数组的各数组元素从cpu外挂的内存中申请一个预设大小的内存资源,并将所申请的内存资源的地址保存在数组元素中。

本发明实施例中,路由设备可以预先在cpu外挂的内存中创建一个用于记录所申请的内存资源信息的数组(本文中称为内存资源数组,或称为内存资源列表)。

其中,该内存资源数组中可以包括预设数量(本文中称为第一数量,其可以根据路由设备的路由表项规模设置,如50万、100万等)的数组元素。

路由设备可以为内存资源数组中各数组元素从ddr中申请一个预设大小(可以根据实际场景设定)的内存资源,并将所申请的内存资源的地址保存在数组元素中。

例如,路由设备可以在初始化运行时,创建一个包括n(n为正整数)个数组元素(下标依次为0~n-1,即需要依次为0~n-1)的内存资源数组,分别为各数组元素申请一个预设大小的内存资源(假设分别为内存资源0~n-1),并将所申请的内存资源的地址(如起始地址)保存在数组元素中,如内存资源0的起始地址保存在数组元素0中,内存资源1的起始地址保存在数组元素1中,内存资源n-1的起始地址保存在数组元素n-1中。

步骤203、建立内存资源数组中各数组元素与handle索引列表中各元素的对应关系;其中,handle索引列表中各元素与内存资源数组中的各数组元素一一对应。

本发明实施例中,路由设备在cpu外挂的内存中创建内存资源数组,并为内存资源数组的各数组元素从cpu外挂的内存中申请内存资源之后,还可以建立内存资源数组中各数组元素与handle索引列表中各元素的对应关系,其具体实现可以在下文中结合实例进行说明。

步骤204、基于内存资源数组以及handle索引列表进行路由表项处理。

在本发明实施例中,路由设备按照步骤201~步骤203中描述的方式创建了内存资源数组,并建立内存资源数组中各数组元素与handle索引列表中各元素的对应关系之后,可以基于内存资源数组以及handle索引列表进行路由表项处理。

可见,在图2所示方法流程中,路由设备不再在每次需要进行硬件表项存储时才从ddr中申请内存空间,而是在进行硬件表项存储之前,根据路由表项的规模预先申请预设数量的内存资源,并当需要进行硬件表项存储时,从预先申请的内存资源中选择未被占用的内存资源用于存储硬件表项对应的软件表项,提高了硬件表项存储的效率。

在本发明其中一个实施例中,上述基于内存资源数组以及handle索引列表进行路由表项处理,可以包括:

当需要存储第一路由表项对应的第一硬件表项时,确定第一路由表项的第一handle索引。

根据第一handle索引对应的目标数组元素中保存的内存资源的地址确定用于存储第一硬件表项对应的软件表项的目标内存资源;其中,不同handle索引对应所述内存资源数组中的不同数组元素。

当第一路由表项对应的第一硬件表项存储成功时,关联第一硬件表项的地址信息和第一handle索引,并在目标内存资源中存储第一硬件表项对应的软件表项以及第一handle索引。

其中,第一硬件表项的地址信息可以包括但不限于第一硬件表项的存储地址,或第一硬件表项的存储地址的索引信息等。

在该实施例中,第一路由表项并不特指某一固定的路由表项,而是可以指代任一需要存储的路由表项,本发明实施例后续不再复述。

在该实施例中,当路由表项需要存储第一路由表项对应的硬件表项(本文中称为第一硬件表项,包括路由表项的key部分和result部分)时,路由设备可以为第一路由表项分配一个可用的handle索引(本文中称为第一handle索引)。

在一个示例中,上述确定第一路由表项的第一handle索引,可以包括:

从handle索引列表中选择一个可用状态的handle索引作为第一handle索引,并将所选择的handle索引设置为占用状态;其中,handle索引列表中各元素与内存资源数组中的各数组元素一一对应。

在该实施例中,路由设备创建内存资源数组时,还可以创建一个handle索引列表,并建立handle索引列表中各元素(一个元素即为一个handle索引)与内存资源数组中各数组元素的对应关系;其中,handle索引列表中各元素与内存资源数组中的各数组元素一一对应。

当路由设备需要存储第一路由表项对应的第一硬件表项时,路由设备可以从handle索引列表中选择一个可用状态的handle索引作为第一handle索引,并将所选择的handle索引设置为占用状态(由可用状态修改为占用状态)。

在一个示例中,第一handle索引对应的数据元素(本文中称为目标数组元素)与内存资源数组中下标为第一handle索引的值的数组元素一一对应。

其中,内存资源数组中数组元素的下标为该数组元素在内存资源数组中的序号。

举例来说,假设内存资源数组中包括n个数组元素(下标依次为0~n-1,即序号依次为0~n-1),则handle索引列表的序号分别为0~n-1,handle索引0(序号为0的索引,下同)对应数组元素0(下标(即序号)为0的数组元素,下同),handle索引1对应数组元素1路由表项处理handle索引n-1对应数组元素n-1。

在该实施例中,路由设备确定了第一路由表项的第一handle索引时,可以根据第一handle索引对应的目标数组元素中保存的内存资源的地址确定用于存储第一硬件表项对应的软件表项的内存资源(本文中称为目标内存资源)。

举例来说,假设步骤202中申请的内存资源的大小为10k,第一handle索引对应的目标数组元素中保存的内存资源的地址(假设为起始地址为a1),则路由设备可以将ddr中起始地址为a1,大小为10k的内存资源确定为用于存储第一硬件表项对应的软件表项的目标内存资源。

在该实施例中,路由设备确定了用于存储第一硬件表项对应的软件表项的目标内存资源之后,可以计算第一硬件表项是否可以存储到tcam芯片和np外挂的内存,并当计算结果为可以成功存储时,进一步将第一硬件表项存储到tcam芯片和np外挂的内存资源。

其中,路由设备计算硬件表项是否可以成功存储,以及对硬件表项的存储的具体实现可以参见现有硬件表项存储方案。

在该实施例中,当第一路由表项对应的第一硬件表项存储成功时,路由设备可以关联第一硬件表项的存储地址和第一handle索引,即记录第一handle索引和第一硬件表项的存储地址的关联关系,并在目标内存资源中存储第一硬件表项对应的软件表项以及第一handle索引。

需要说明的是,在本发明实施例中,当第一路由表对应的第一硬件表项存储不成功时,如路由设备计算第一硬件表项是否可以存储到tcam芯片和np外挂的内存的计算结果为无法成功存储,或者,路由设备将第一硬件表项存储到tcam芯片和np外挂的内存资源时存储不成功,路由设备可以将所选择的handle索引重新设置为可用状态(即由占用状态更新为可用状态)。

进一步地,在本发明其中一个实施例中,上述基于内存资源数组以及handle索引列表进行路由表项处理,还可以包括:

当需要删除第二路由表项对应的第二硬件表项时,根据第二路由表项的第二handle索引确定第二硬件表项的存储地址;

根据第二硬件表项的存储地址删除第二硬件表项,并将第二handle索引设置为可用状态。

在该实施例中,第二路由表项并不特指某一固定的路由表项,而是可以指代任一需要删除的路由表项,本发明实施例后续不再复述。

其中,第二路由表项与第一路由表项可以为同一路由表项,也可以为不同的路由表项。

在该实施例中,当路由设备接收到携带有第二路由表项的handle索引(本文中称为第二handle索引)的路由表项删除请求时,路由设备一方面可以根据第二路由表项的第二handle索引确定第二路由表项对应的硬件表项(本文中称为第二硬件表项)的存储地址,并根据第二硬件表项的存储地址删除第二硬件表项;另一方面,路由设备可以将第二handle索引设置为可用状态。

可见,在本发明实施例中,当需要进行硬件表项删除时,仅需要将用于存储待删除的硬件表项对应的软件表项的内存资源对应的handle设置为可用状态,即将该内存资源重新设置为可用状态,而不需要进行内存资源的释放,提高了硬件表项删除的效率,且避免了内存资源反复申请和释放导致的内存碎片和内存泄漏,提高了系统的可靠性。

为了使本领域技术人员更好地理解本发明实施例提供的技术方案,下面对现有硬件方式的路由表项查找方案中硬件表项的存储和删除进行简单说明(以在tcam芯片中存储和删除硬件表项(即路由表项的key部分)为例,np外挂的内存中存储和删除硬件表项(即路由表项的result部分)的实现同理可得),并结合具体实例对本发明实施例提供的技术方案进行说明。

一、tcam芯片存储硬件表项

1、当需要存储一条路由表项对应的硬件表项到tcam芯片中时,需要从cpu外挂的内存(下文中以ddr为例)中申请一个内存空间用于存储硬件表项对应的软件表项;

2、若内存空间申请成功,则进行tcam芯片路由添加计算,以确定是否能成功将硬件表项存储到tcam芯片中;若无法成功添加,则释放之前申请的内存空间,并返回失败;

3、若可以成功添加,则进行tcam芯片路由添加(即将硬件表项存储到tcam芯片)处理,若添加不成功,则释放之前申请的内存空间,并返回失败;

4、根据tcam芯片返回的硬件表项的存储地址,通过indexq算法将该存储地址转换为handle(句柄)索引,以此作为该路由表项的管理索引,用于表项管理。如果转换失败,则释放之前申请的内存空间,并返回失败。

二、tcam芯片删除硬件表项

1、当需要删除tcam芯片中的硬件表项时,通过删除请求中携带的路由表项的handle索引确定硬件表项的存储地址;

2、根据硬件表项的存储地址从tcam芯片中删除对应的硬件表项,在删除过程中调用回调函数,将存储该硬件表项时申请的内存空间(参见上一流程)释放;

3、将该路由表项的handle索引通过indexq算法返回至indexq列表,将对应的handle索引设置为可用状态。

请参见图3a,在该实施例中,路由设备初始化运行时,一方面,申请一个数量为100w(100万,即上述第一数量),数组元素为内存资源地址的数组(即内存资源数组)。

针对内存资源数组中的每一个数组元素,路由设备可以从ddr中申请一个预设大小(可以根据实际场景设定,如8字节)的内存资源,并将该内存资源的地址保存在数组元素中。

需要说明的是,在该实施例中,路由设备从ddr中申请内存资源时,可以根据各内存资源的大小(各内存资源大小相同),以及内存资源数据中数据元素的数量,从ddr中申请一段连续的内存空间,进而,根据该内存空间的起始地址,以及各内存资源的大小,可以快速地确定各内存资源的起始地址,其具体实现在此不做赘述。

另一方面,路由设备可以创建一个handle索引列表,该handle索引列表中包括100w个元素,依次为0~(100w-1),且handle索引列表中各元素与内存资源数组中各数组元素一一对应;其中,handle索引0对应数组元素0(即下标为0的数组元素),handle索引1对应数组元素1路由表项处理handle索引(100w-1)对应数组元素(100w-1)。

handle索引列表中各元素的初始状态均为可用状态(available,该实施例中标记为a)。

下面以路由设备的第一次路由表项添加和删除为例进行说明。

在该实施例中,当路由设备需要添加路由表项时,可以通过indexq算法从handle索引列表中选择一个标记为a的handle索引(假设选择的为handle索引0),作为该路由表项的handle索引,并将所选择的handle索引标记为占用状态(也可以称为不可用状态,unavailable,该实施例中标记为u)。当下次再需要选择handle索引时,会跳过标记为u的handle索引,其示意图可以如图3b所示。

其中,路由设备通过indexq算法从handle索引列表中选择handle索引时,可以按照从小到大的顺序轮询各handle索引,并将最先轮询到的标记为a的handle索引分配作为当前添加的路由表项的handle索引。

举例来说,假设handle索引的范围为0~100w-1,则当第一次添加路由表项时,路由设备可以将handle索引0作为该路由表项的handle索引,并将handle索引0标记为占用状态(即标记为u),下一次添加路由表项时,从handle索引1开始轮询,并当轮询到到handle索引100w-1时,重新从handle0开始轮询,其具体实现在此不做赘述。

路由设备根据所选择的handle索引(即handle索引0)从内存资源数组中查询对应的目标数组元素,即数组元素0,并根据数组元素0中记录的内存资源的地址确定用于存储路由表项对应的硬件表项对应的软件表项的内存资源(假设为内存资源0)。

当路由设备存储该路由表项对应的硬件表项成功时,路由设备可以关联handle索引0与该硬件表项的存储地址(即tcam芯片中存储该路由表项的key部分的地址以及np外挂的内存中存储该路由表项的result部分的地址),并在内存资源0中存储handle索引0以及该硬件表项对应的软件表项。

当路由设备需要删除该路由表项时,根据该路由表项的handle索引(handle索引0),查询handle索引与硬件表项的存储地址的关联关系,以确定该路由表项对应的硬件表项的存储地址,根据该硬件表项的存储地址删除对应的硬件表项,并将handle索引0重新标记为a。

可见,在该实施例中,1)、不管表项添加删除几次,内存资源只在初始化时申请一次,不会产生内存碎片,提高了系统的稳定性;2)、节省了内存申请和释放的流程,提高了程序运行效率;3)、用维护内存资源数组的方式来代替内存资源的申请和释放操作,不会引起内存泄露,提高了程序设计的可靠性。

通过以上描述可以看出,在本发明实施例提供的技术方案中,通过创建内存资源数组,分别为内存资源数组的各数组元素从cpu外挂的内存中申请一个预设大小的内存资源,将所申请的内存资源的地址保存在数组元素中,并建立内存资源数组中各数组元素与handle索引列表中各元素的对应关系进而,基于内存资源数组以及handle索引列表进行路由表项处理,与现有硬件表项存储方案中每一次进行硬件表项存储均需要进行申请内存资源的实现方式相比,仅需在硬件表项存储之前申请一次内存资源,提高了硬件表项存储的效率。

请参见图4,为本发明实施例提供的一种路由表项处理装置的结构示意图,其中,该装置可以应用于上述方法实施例中的路由设备,如图4所示,该路由表项处理装置可以包括:

创建单元410,用于在cpu外挂的内存中创建内存资源数组,所述内存资源数组包括第一数量的数组元素;

申请单元420,用于分别为所述内存资源数组的各数组元素从所述cpu外挂的内存中申请一个预设大小的内存资源,并将所申请的内存资源的地址保存在数组元素中;

关联单元430,用于建立所述内存资源数组中各数组元素与句柄handle索引列表中各元素的对应关系;其中,所述handle索引列表中各元素与所述内存资源数组中的各数组元素一一对应;

处理单元440,用于基于所述内存资源数组以及所述handle索引列表进行路由表项处理。

请一并参见图5,为本发明实施例提供的另一种路由表项处理装置的结构示意图,如图5所示,在图4所示路由表项处理装置的基础上,图5所示路由表项处理装置还可以包括:

确定单元450,用于当需要存储第一路由表项对应的第一硬件表项时,确定所述第一路由表项的第一handle索引;

所述确定单元450,还用于根据所述第一handle索引对应的目标数组元素中保存的内存资源的地址确定用于存储所述第一硬件表项对应的软件表项的目标内存资源;

所述处理单元440,具体用于当所述第一路由表项对应的第一硬件表项存储成功时,关联所述第一硬件表项的地址信息和所述第一handle索引,并在所述目标内存资源中存储所述第一硬件表项对应的软件表项以及所述第一handle索引。

在可选实施例中,所述确定单元450,具体用于从handle索引列表中选择一个可用状态的handle索引作为所述第一handle索引;其中,所述handle索引列表中各元素与所述内存资源数组中的各数组元素一一对应;

所述处理单元440,还用于将所选择的handle索引设置为占用状态。

在可选实施例中,所述第一handle索引对应的目标数组元素与所述内存资源数组中下标为所述第一handle索引的值的数组元素一一对应。

在可选实施例中,所述处理单元440,还用于当所述路由表项对应的硬件表项存储不成功时,将所选择的handle索引设置为可用状态。

在可选实施例中,所述确定单元450,还用于当需要删除第二路由表项对应的第二硬件表项时,根据所述第二路由表项的第二handle索引确定所述第二硬件表项的存储地址;

所述处理单元440,还用于根据所述第二硬件表项的存储地址删除所述第二硬件表项,并将所述第二handle索引设置为可用状态。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

由上述实施例可见,通过创建内存资源数组,分别为内存资源数组的各数组元素从cpu外挂的内存中申请一个预设大小的内存资源,将所申请的内存资源的地址保存在数组元素中,并建立内存资源数组中各数组元素与handle索引列表中各元素的对应关系进而,基于内存资源数组以及handle索引列表进行路由表项处理,与现有硬件表项存储方案中每一次进行硬件表项存储均需要进行申请内存资源的实现方式相比,仅需在硬件表项存储之前申请一次内存资源,提高了硬件表项存储的效率。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1