CN100543687C - 一种多核系统的资源管理方法和控制核 - Google Patents
一种多核系统的资源管理方法和控制核 Download PDFInfo
- Publication number
- CN100543687C CN100543687C CNB2007101213378A CN200710121337A CN100543687C CN 100543687 C CN100543687 C CN 100543687C CN B2007101213378 A CNB2007101213378 A CN B2007101213378A CN 200710121337 A CN200710121337 A CN 200710121337A CN 100543687 C CN100543687 C CN 100543687C
- Authority
- CN
- China
- Prior art keywords
- resource
- index
- allocation
- address information
- list item
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种多核系统的资源管理方法,预先建立资源管理表,用于保存资源池中各可分配资源的地址信息;设置空闲索引,该空闲索引索引到资源管理表的表项,该表项将资源管理表分成存储所有已分配资源地址信息和存储未分配资源地址信息的两部分;进行资源释放时,确定要释放资源地址信息对应的资源管理表项的序号和最近一次分配资源地址信息所对应的资源管理表项的序号,交换该两个序号表项中保存的地址信息;重置空闲索引,使其索引到资源管理表另一个表项,该表项将资源管理表分成存储所有已分配资源地址信息和存储未分配资源地址信息的两部分。本发明还公开了多核系统的控制核。应用本发明,能够提高资源分配效率。
Description
技术领域
本发明涉及资源分配技术,特别涉及一种多核系统的资源管理方法和控制核。
背景技术
多核中央处理单元(CPU)可看作将多个通用的中央处理单元(CPU)以及一些功能部件集成到一块芯片中形成的一个系统级芯片(SOC),本文中,将多核CPU中的通用CPU称为核(core)。将应用多核CPU的系统称为多核系统。在多核系统中,各个核之间可以并发访问临界资源(又称共享资源),这些共享资源的分配和访问需要一定的机制进行控制和管理,以保证系统的正常运行。
多核系统的一个典型应用是在路由器产品中,管理大量的路由等转发表项信息,完成报文的路由和转发。在应用多核系统的路由器产品中,分配的共享资源用于建立转发表项。具体地,当需要建立转发表项时,分配一定的共享资源(即共享的一块内存空间),利用该资源建立转发表项;当需要删除转发表项时,释放承载该转发表项的共享资源。
一般在路由器产品中,存在一个控制core负责转发表项维护操作(包括增加和删除转发表项等),其他的core处理转发业务会频繁的访问控制core维护的转发表项,称为控制core。为了实现高速的转发处理,要求在数据转发过程中能够快速的命中表项,也就是查找到指定资源,达到高速的数据转发能力;并且,在大容量路由处理环境下能够快速完成建立表项,也就是完成资源分配;同时,由于存在多核对转发表项的访问,所以需要解决访问冲突的问题,也就是并发访问共享资源的冲突问题。
在资源管理过程中,如果不存在资源释放操作,那么采用顺序分配的资源分配方式,即可以保证资源分配的连续性。但事实上,很多情况下会出现资源释放操作,例如网络路由状况发生改变需要删除某个转发表项,这时,释放的资源成为可分配的资源,那么已分配的资源就不再是连续的,而出现了某些可分配的空洞。如果仍然采用顺序分配方案,则这些被释放的资源就无法被重新利用。
目前,在多核系统中,可以采用HASH索引表+资源池的方案进行资源的管理,以实现上述快速分配资源、查找指定资源和解决并发访问冲突的问题,同时能够尽可能利用所有可分配资源。其中,资源池即为所有可分配的共享资源区域(即共享的内存空间)。
具体地,图1为路由器产品中应用HASH索引表+资源池方案的示意图,其资源分配方法具体包括:遍历资源池中的资源,以获取空闲资源,并为该资源设置有效标志;然后,将该设置有效标志后的资源和HASH索引表做关联,在HASH索引表中相应key值(如图1中所示的“1”和“3”)的位置上写入该资源的地址信息。上述分配的资源可以上报给上层单元,用于写入要创建的转发表项。
当需要将建立好的转发表项删除时,具体可以为:获取将要删除资源的地址信息,为该资源设置无效标志,并将该资源与HASH索引表去掉关联,也就是将HASH索引表中相应key值的位置置空。
因为采用资源池的方式,所以表项操作的性能都可以得到保证,同时采用HASH索引表表项查询的效率也能够满足要求。对于访问冲突问题,可以通过延迟删除的方式解决。使用延迟删除方式时,所有的Core/Thread共享唯一的表项,创建新的转发表项时,先创建新的表项将老的表项替换掉,保证后续的查找使用新的表项;老的表项挂在回收链上延时一段时间再删除,保证更新操作时正在访问该表项的Core/Thread不会访问非法地址。
但是,采用上述HASH索引表+资源池的方案也存在以下缺点:
1、由于资源分配的非连续性,导致在进行资源分配时,需要遍历资源池以找到空闲资源,极大地影响了资源分配效率;
2、在需要对转发表进行遍历操作(例如,要显示所有有效表项时)或要删除整个转发表时,需要遍历整个资源池以找到其中的有效或满足条件的表项;实际上有效或满足条件的表项在整个转发表中所占的比例较小,但需遍历整个转发表,增加了许多无用的查找操作,极大的影响了转发效率。
3、需要删除特定转发表项时,为避免有正在访问该表项的报文访问已经释放的内存空间,引入的延迟删除机制增加了算法的复杂度。在大量路由频繁振荡情况下,延迟删除链会很长,有可能造成内存耗尽,进而无法分配新的可用资源以建立新的转发表项。
4、由于在资源分配时返回首个匹配条件的空闲资源,因此,在表项反复增删的条件下,刚释放的资源可能又被作为新分配的资源使用。这种方式不利于程序稳定,例如反复增删过程丢失一个删除消息,有可能使得后续增加消息使用错误的资源。
发明内容
有鉴于此,本发明提供一种多核系统的资源管理方法和系统,能够提高资源分配效率。
为实现上述目的,本发明采用如下的技术方案:
一种多核系统的资源管理方法,预先建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表的各个表项用于保存资源池中各可分配资源的地址信息;为资源管理表设置空闲索引,该空闲索引索引到资源管理表的一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项;在进行资源释放时,确定要释放资源地址信息对应的资源管理表项的序号和最近一次分配资源地址信息所对应的资源管理表项的序号,交换所述的两个序号表项中保存的地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该另一个表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
较佳地,该方法进一步包括:为资源管理表设置分配索引,所述分配索引索引到任意一个可分配资源的地址信息对应的资源管理表项;
所述空闲索引索引到资源管理表的表项为:所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项;
资源分配的方式为:确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;交换资源管理表中所述空闲索引对应的未分配资源的地址信息与分配索引对应的地址信息;重置空闲索引为当前空闲索引的下一个序号,重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号。
较佳地,所述设置空闲索引为:将所述空闲索引初始化为所有序号中的最小值;
所述设置分配索引为:将所述分配索引初始化为所有序号中的最大值;
所述重置分配索引为剩余的一个可分配资源的地址信息对应资源管理表项的序号为:将当前分配索引减1;并判断减1后的分配索引是否小于等于所述重置后的空闲索引,若是,则设置分配索引为所有序号中的最大值,否则,设置分配索引为所述减1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为大于当前空闲索引的任意一个序号。
较佳地,所述设置空闲索引为:将空闲索引初始化为所有序号中的最大值;
所述设置分配索引为:将分配索引初始化为所有序号中的最小值;
所述重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号为:将当前分配索引加1;并判断加1后的分配索引是否大于等于所述重置后的空闲索引,若是,则设置分配索引为所有序号中的最小值,否则,设置分配索引为加1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为小于当前空闲索引的任意一个序号。
较佳地,该方法进一步包括:为资源管理表设置分配索引,所述分配索引索引到任意一个可分配资源的地址信息对应资源管理表项的序号;
所述空闲索引索引到资源管理表的表项为:所述空闲索引索引到存储最近一次分配资源的地址信息的表项;
资源分配的方式为:确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;重置空闲索引为当前空闲索引的下一个序号,交换资源管理表中所述重置后的空闲索引对应的未分配资源的地址信息与分配索引对应的地址信息;重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号。
较佳地,所述设置空闲索引为:将所述空闲索引初始化为所有序号中的最小值;
所述设置分配索引为:将所述分配索引初始化为所有序号中的最大值;
所述重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号为:将当前分配索引减1;并判断减1后的分配索引是否小于等于所述重置后空闲索引加1的值,若是,则设置分配索引为所有序号中的最大值,否则,设置分配索引为所述减1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为大于当前空闲索引加1后的任意一个序号。
较佳地,所述设置空闲索引为:将空闲索引初始化为所有序号中的最大值;
所述设置分配索引为:将分配索引初始化为所有序号中的最小值;
所述重置分配索引为可分配资源地址信息对应的任意一个序号为:将当前分配索引加1;并判断加1后的分配索引是否大于等于所述重置后空闲索引减1的值,若是,则设置分配索引为所有序号中的最小值,否则,设置分配索引为加1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为小于当前空闲索引减1后的任意一个序号。
较佳地,当所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项时,资源分配的方式为:确定所述空闲索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;重置空闲索引为当前空闲索引的下一个序号;
当所述空闲索引索引到存储最近一次分配资源的地址信息的表项时,资源分配的方式为:重置空闲索引为当前空闲索引的下一个序号;确定所述重置后空闲索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报。
较佳地,该方法进一步包括:预先为资源池中的资源设置资源标识ID,所述资源标识ID的取值与资源地址信息对应的资源管理表项的序号相等;
在进行资源分配并上报分配资源后,将上报的资源与HASH索引表进行关联,并在上报的资源上写入转发表项的内容;
在所述交换地址信息后,进一步包括:确定交换的两个地址信息上的两个资源,并交换确定的两个资源的资源标识ID;
当接收到需转发的报文时,根据报文内容提取关键信息计算HASH值,根据HASH值获取对应的资源和该资源的资源标识ID;利用所述资源标识ID判断该资源上写入的转发表项是否有效,若是,则根据该资源上的转发表项转发接收的报文;否则,返回查找转发表失败。
较佳地,所述利用资源标识ID判断资源上写入的转发表项是否有效为:
当所述空闲索引被初始化为所有序号中的最小值、且所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项时,判断所述资源标识ID是否小于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;
当所述空闲索引被初始化为所有序号中的最小值、且所述空闲索引索引到存储最近一次分配资源的地址信息的表项时,判断所述资源标识ID是否小于等于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;
当所述空闲索引被初始化为所有序号中的最大值、且所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项时,判定所述资源标识ID是否大于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;
当所述空闲索引被初始化为所有序号中的最大值、且所述空闲索引索引到存储最近一次分配资源的地址信息的表项时,判断所述资源标识ID是否大于等于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效。
较佳地,该方法进一步包括:在释放所有已分配的资源时,设置所述空闲索引为初始化时的取值。
一种多核系统中的控制核,包括:
配置单元,用于建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表用于保存资源池中各可分配资源的地址信息;为资源管理表设置空闲索引,该空闲索引索引到资源管理表的一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项;
资源管理单元,用于在进行资源释放时,确定要释放资源地址信息对应的资源管理表的序号和最近一次分配资源地址信息对应的资源管理表的序号,交换所述的两个序号表项中记录的资源地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该另一个表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
较佳地,所述资源管理单元包括资源分配子单元和资源释放子单元;
所述配置单元,进一步用于将所述空闲索引初始化为所有序号中的最小值或最大值,为资源管理表设置分配索引,并根据空闲索引的初始化值,将分配索引对应初始化为所有序号中的最大值或最小值;
所述资源分配子单元,用于确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;交换所述空闲索引对应的地址信息与分配索引对应的地址信息;重置空闲索引为当前空闲索引的下一个序号,重置分配索引为当前分配索引的下一个序号;
所述资源释放子单元,用于在进行资源释放时,确定要释放资源地址信息对应的资源管理表项的序号和最近一次分配资源地址信息对应的资源管理表项的序号,交换所述的两个序号表项中记录的资源地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
由上述技术方案可见,预先建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,该资源管理表用于保存资源池中各可分配资源的地址信息。这样,就为资源池中的各个资源地址信息与资源管理表中的表项建立了对应关系。为资源管理表设置空闲索引,该空闲索引索引到资源管理表的表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。从而保证任意资源的分配后,利用空闲索引能够区分已分配和未分配资源。在进行资源释放时,确定要释放资源地址信息对应的资源管理表的序号和最近一次分配资源地址信息所对应的资源管理表的序号,交换所述两个序号表项中保存的资源地址地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。从而保证利用空闲索引能够区分已分配和未分配资源,并且本次释放资源地址信息原本对应的资源管理表的序号对应上一次分配资源的地址信息,进而保证任意资源释放后,所有对应于已分配资源地址信息的序号仍然是连续的。因此,在资源分配过程中,可以根据空闲索引确定未分配资源对应的地址信息,从而直接在未分配的资源中选择,不需要遍历整个资源池,提高了资源分配效率。
附图说明
图1为路由器产品中应用HASH索引表+资源池方案的示意图。
图2为本发明提供的多核系统中资源分配方法的总体流程图。
图3为本发明提供的多核系统中控制核的总体结构图。
图4为本发明实施例一中资源管理方法的具体流程图。
图5a为本发明实施例一中资源管理表和资源池初始化后的状态示意图。
图5b为本发明实施例一中经过一次资源分配后,资源管理表和资源池当前状态示意图。
图5c为本发明实施例一中经过三次资源分配后,资源管理表和资源池当前状态示意图。
图5d为本发明实施例一中释放资源前资源管理表和资源池当前状态示意图。
图5e为本发明实施例一中释放资源后资源管理表和资源池当前状态示意图。
图6为本发明实施例二中多核系统中的控制核的具体结构图。
图7为本发明实施例二中资源管理方法的具体流程图。
图8a为本发明实施例二中资源管理表和资源池初始化后的状态示意图。
图8b为本发明实施例二中经过一次资源分配后,资源管理表和资源池当前状态示意图。
图8c为本发明实施例二中经过三次资源分配后,资源管理表和资源池当前状态示意图。
图8d为本发明实施例二中释放资源前资源管理表和资源池当前状态示意图。
图8e为本发明实施例二中释放资源后资源管理表和资源池当前状态示意图。
图9为本发明实施例三中进行报文转发的具体流程图。
具体实施方式
为使本发明的目的、技术手段和优点更加清楚明白,以下结合附图对本发明做进一步详细说明。
本发明的基本思想是:将已分配资源和未分配资源进行分界,从而提高资源分配效率。具体地,建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表用于保存资源池中各可分配资源的地址信息及其对应的序号,并利用序号的有序性管理资源的地址信息,从而进一步管理与地址信息直接关联的资源池中的资源。
图2为本发明提供的多核系统中资源分配方法的总体流程图。如图2所示,该方法包括:
步骤201,预先建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表用于保存资源池中各可分配资源的地址信息。
本步骤中,资源管理表的各个表项保存各可分配资源的地址信息,同时每个表项还标有自己的序号,因此资源池中各可分配资源的地址信息与资源管理表的表项序号建立了对应关系,从而可以利用序号的有序性,使资源地址信息能够按序排列。
步骤202,为资源管理表设置空闲索引,该空闲索引索引到资源管理表的表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
在本文中,与传统意义上的索引不同,空闲索引是一个变量,其取值是某资源地址信息所对应的序号。具体地,空闲索引索引到的表项将资源管理表分成两部分,一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项,从而使空闲索引成为资源管理表中已分配资源地址信息和未分配资源地址信息保存位置的分界点,利用空闲索引可以很容易区分已分配资源和未分配资源,并且资源管理表中所表征的资源分配状况是连续的。其中,对于已分配资源的地址信息与未分配资源的地址信息的分界表项有两种选择,一个是分界处的存储已分配资源地址信息的表项,另一个是分界处的存储未分配资源地址信息的表项,因此空闲索引的取值也可以有上述两种选择。
步骤203,在进行资源释放时,确定要释放资源地址信息对应的资源管理表序号和最近一次分配资源地址信息对应资源管理表项的序号,并交换确定的两个序号表项中保存的地址信息。
本步骤中,在资源释放时,交换确定的两个序号表项中保存的地址信息,也就等价于将两个地址信息对应的表项序号进行了交换,从而使这两个地址信息的排列顺序进行了交换。原本与本次释放资源的地址信息对应的序号对应最近一次分配资源的地址信息,从而保证在资源释放后,所有已分配资源地址信息对应的序号仍然是连续的。
步骤204,重置空闲索引,使其索引到资源管理表的另一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
在步骤203前,保存最近一次分配资源的地址信息的表项是已分配资源和未分配资源的分界表项,经过步骤203中地址信息的交换后,保存本次释放资源的地址信息的表项成为已分配资源和未分配资源的分界表项,并且本次释放资源已成为未分配资源,也就是资源管理表中保存已分配资源和未分配资源的地址信息的表项分界需要进行变化。而该变化可以通过重置空闲索引实现。具体地,将空闲索引重新索引到释放本次释放资源后已分配资源和未分配资源地址信息的分界表项。并且,通过重置空闲索引,能够使本次释放资源的地址信息位于未分配资源的表项部分,成为可分配的资源,同时又没有真正释放该资源,达到了延迟删除的目的。
至此,本发明提供的多核系统中的资源分配流程完成。其中,步骤201~202表示资源管理的设置过程,步骤203~205是资源分配和释放的过程。
图3为本发明提供的多核系统中控制核的总体结构图。如图3所示,该控制核包括:配置单元和资源管理单元,利用该控制核实现对多核系统中资源的管理和分配。
在该控制核中,配置单元,建立资源管理表该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表用于保存资源池中各可分配资源的地址信息;为资源管理表设置空闲索引,该空闲索引索引到资源管理表的表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。资源管理单元,用于在进行资源释放时,确定要释放资源地址信息对应的资源管理表的序号和最近一次分配资源地址信息对应的资源管理表的序号,交换所述的两个序号表项中记录的资源地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
上述即为对本发明提供的多核系统中资源分配方法和控制核的总体概述。
通过上述分配方式,通过空闲索引能够在资源管理表中对已分配资源和未分配资源进行分界。在进行资源释放时,将本次释放资源的地址信息所对应的序号与上次分配资源的地址信息所对应的序号交换,从而在资源释放后,仍然能够保证已分配资源的地址信息所对应的序号均是连续的,并且已分配资源与未分配资源的地址信息对应的序号通过空闲索引分界,从而可以根据空闲索引确定未分配资源对应的地址信息,进而直接在未分配的资源中选择,不需要遍历整个资源池,提高了资源分配效率。
下面通过较佳实施例说明本发明中资源分配方法的具体实施方式。在本实施例中,以在路由器产品中应用多核系统进行资源分配为例进行说明,分配的资源用于写入报文转发表项,以实现报文转发。
实施例一:
在本实施例中,资源分配时采用按序号顺序分配的方式,从而能够方便地实现在资源分配过程中,已分配资源的地址信息所对应的序号是连续的。
图4为本发明实施例一中资源管理方法的具体流程图。如图4所示,该方法包括:
步骤401,预先创建并初始化资源管理表,保存资源池中各可分配资源的地址信息,设置空闲索引以及资源ID。
本实施例中,资源管理表利用一个指针数组ppStPoolCtrl[]的形式实现,用于保存资源池中各可分配资源的地址信息。具体地,指针数组中的每个元素,指向资源池中的一个资源,称为该资源的资源管理指针,也就是保存该资源的地址信息;指针数组中各元素的元素号就是资源管理表中各个表项的序号。
为资源管理表设置空闲索引(ulIdleIndex)。如前所述,本文中空闲索引为变量,取值为,保存资源地址信息表项的序号。本步骤对空闲索引进行初始化,将空闲索引初始化为所有序号中的最小值或最大值。具体在本实施例中,由于指针数组的元素号即为序号,并且以将空闲索引初始化为指针数组的首元素号为例进行下面的说明。
另外,为保证资源分配过程中,能够通过资源池中的资源确定资源的已分配和未分配状态,优选地,为资源池中的各个资源设置资源ID(ulResid)属性,该资源ID的取值与保存资源的地址信息的表项序号相等,也就是资源管理指针在指针数组中的元素号。这里,资源ID与前述序号的差别在于,资源ID是在资源池中为各个资源保存的与资源对应的属性值,序号是在资源管理表中保存的与资源地址信息对应的值,二者从不同的逻辑结构中体现对应资源的分配状态。具体地,从资源池的角度,可以利用某资源的资源ID与空闲索引的大小关系确定该资源是否已分配;从资源管理表的角度,可以利用某资源地址信息对应的序号与空闲索引的大小关系确定该资源是否已分配,详细的大小比较过程和结果判定将在后续的描述中介绍。
至此,资源管理表和资源池的初始化完成,建立了如图5a所示的指针数组的每个元素与资源池中的资源对应关系。本步骤中的设置操作由多核系统控制核中的配置单元完成。
在上述初始化完成后,即可以利用资源管理表+资源池的方案进行资源分配,具体一次资源分配过程包括以下步骤:
在本实施例中,资源分配是从资源管理表中左边元素所指向的资源开始的,并且按照资源地址信息对应的序号连续分配。
步骤402,通过空闲索引ulIdleIndex得到本次分配的资源进行上报。
本步骤中,假定资源管理表和资源池的当前状态为初始状态,即如图5a所示。空闲索引的值为0,元素号为空闲索引的指针元素ppStPoolCtrl[ulIdleIndex]为指向资源A,于是可得,ulIdleIndex对应的资源管理指针指向资源A。
在本实施例中,空闲索引对应的地址信息上的资源为本次分配的资源,因此将资源A作为本次分配的资源进行上报,具体上报方式可以是将资源A的地址信息上报给上层单元,由上层单元根据接收的地址信息在该资源A上写入具体的转发表项,并将该资源A与HASH索引表进行关联。具体与HASH索引表的关联方式可以采用背景技术中的方式,这里就不再赘述。
步骤403,重置空闲索引为当前空闲索引的下一个序号。
本发明中,空闲索引的下一个序号为:远离空闲索引初始化方向上与空闲索引相邻的序号,例如,将空闲索引初始化为所有序号的最小值时,空闲索引的下一个序号就是序号增大方向上与空闲索引相邻的序号;将空闲索引初始化为所有序号的最大值时,空闲索引的下一个序号就是序号减小方向上与空闲索引相邻的序号。由于本实施例中,空闲索引初始化为指针数组的首元素号,也就是所有序号中的最小值,因此,远离初始化方向为序号增大的方向,当前空闲索引的下一个序号即为当前空闲索引加1,也就是将空闲索引向右移动一个位置,移动后如图5b所示。
经过上述步骤402~403的操作后,一次资源分配流程结束。在此次资源分配完成后,资源管理表和资源池的当前状态(分配索引的重置方式采用第三种)如图5b所示。
依照上述步骤402~403的操作进行三次资源分配后,资源管理表和资源池的状态(分配索引的重置方式采用第三种)如图5c所示。
根据图5c可见,经过上述资源分配后,在资源管理表中,所有小于空闲索引的序号所对应的地址信息均是已分配资源的地址信息,所有大于等于空闲索引的序号所对应的地址信息均是未分配资源的地址信息。因此可以利用资源管理表和空闲索引将已分配资源和未分配资源分界,从而在分配资源时,直接将空闲索引对应地址信息上的资源作为分配资源上报,保证资源分配的时间复杂度为o(1)。同时,由于资源ID始终为该资源的资源管理指针的元素号,因此,通过比较资源ID和空闲索引的大小即可以判断该资源是否是已分配的资源。具体在资源释放和报文转发时,需要进行是否为已分配资源的判断。
在上述具体流程中,将空闲索引初始化为所有序号中的最小值,事实上,也可以将空闲索引初始化为所有序号中的最大值,这时,在分配资源后进行空闲索引的重置时,则相应地将空闲索引依次减1,使已分配资源地址信息对应的序号均大于空闲索引,保证资源管理表中表征的资源分配状况是连续的。
上述资源分配过程由控制核中的资源管理单元实现。
在资源管理的过程中,还可以对已分配的资源进行释放,本实施例中释放资源的具体操作包括如下步骤:
步骤404,确定要释放的资源以及该资源地址信息对应的序号,并确定上次分配资源的地址信息对应的序号。
本步骤中,假定当前资源管理表和资源池的状态如图5d所示,要释放资源C,根据该资源地址信息确定对应的序号,即2,资源C的资源管理指针为ppStPoolCtrl[2];当前空闲索引为n-3,则上次分配资源D对应的序号为ulIdleIndex-1,资源D的指针为ppStPoolCtrl[ulIdleIndex-1],也就是ppStPoolCtrl[n-4]。
步骤405,交换步骤404中确定的两个序号所对应的地址信息。
本步骤中,交换序号2和序号ulIdleIndex-1对应的地址信息,使ppStPoolCtrl[ulIdleIndex-1]指向本次释放资源C,使ppStPoolCtrl[2]指向上次分配的资源D。
步骤406,交换上次分配资源D的资源ID和本次释放资源C的资源ID。
由于上一步骤改变了资源C和资源D的地址信息在资源管理表中的保存位置,因此需要更新资源ID,以保证资源ID的取值为资源的地址信息在资源管理表中的保存位置。
步骤407,重置空闲索引为当前空闲索引的上一个序号。
本发明中,空闲索引的上一个序号为:靠近空闲索引初始化方向与空闲索引相邻的序号。由于本实施例中空闲索引初始化为指针数组第一个元素的元素号,因此空闲索引的上一个序号即为当前空闲索引减1。图5e即为资源释放后资源管理表和资源池的状态示意图。
这样,就使空闲索引表项指向本次释放的资源,由前述可知,本实施例中,大于等于空闲索引的序号所对应地址信息上的资源均是未分配的资源,因此通过上述操作达到了释放资源的目的,但又未真正删除该资源上写入的转发表项。此时,对于正在访问该资源的转发核,仍然可以通过读取该资源地址上的内容确定转发表项的具体内容,并进行报文转发,不会有任何影响,达到了延迟删除的目的,但却没有带来延迟删除的算法复杂度。
本实施例中的方式可以利用图3所示的控制核来实现。具体地,本实施例还提供了图6所示的控制核的具体结构,该控制核为图3所示控制核的一种具体实施方式。如图6所示,该控制核包括:配置单元和资源管理单元,利用该控制核实现对多核系统中资源的管理和分配。其中,资源管理单元包括资源分配子单元和资源释放子单元。
在该控制核中,配置单元,建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表的各个表项保存资源池中各可分配资源的地址信息及其对应的序号;为资源管理表设置空闲索引,该空闲索引索引到资源管理表的表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
资源管理单元中的资源分配子单元,用于确定所述空闲索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;重置空闲索引为当前空闲索引的下一个序号。
资源管理单元中的资源释放子单元,用于在进行资源释放时,确定要释放资源地址信息对应的序号和上一次分配资源地址信息对应的序号,交换确定的两个序号对应的地址信息;重置空闲索引为当前空闲索引的上一个序号。
由上述可见,在本实施例中,进行资源分配时采用的方式为:按照资源管理表中的序号顺序分配资源,从而保证资源分配后,所有已分配资源的地址信息是连续的;进行资源释放时,将释放资源的地址信息对应的序号与上次分配资源的地址信息所对应的序号交换,并将空闲索引设为交换后释放资源的地址信息对应的序号,从而保证资源释放后,所有已分配资源的地址信息仍然是连续的。这样,在任意时刻,资源管理表中表征的资源分配状况均是连续的,在进行资源分配时,就不需要再遍历资源池,而可以利用空闲索引直接找到未分配的资源进行分配,大大提高了资源分配效率。同时,由于资源释放过程中,只是将释放资源的地址信息保存在未分配资源的位置上,并未真正删除资源,因此能够达到延迟删除的目的,但并未引入延迟删除的算法复杂度,更易于实现。
如前所述,将空闲索引索引到分界表项可以有两种选择,即索引到分界处的已分配资源对应的表项和索引到分界处未分配资源对应的表项,由本实施例中步骤402~403中所示的资源分配过程可见,该空闲索引索引到分界处的未分配资源对应的表项,因此其分配过程为:首先将空闲索引对应表项中保存的地址信息上的资源作为本次分配资源上报,然后重置空闲索引为下一个表项序号,使该空闲索引仍然索引到所述分界处的未分配资源对应的表项。当然,也可以在最初将空闲索引索引到所述分界处的已分配资源对应的表项,相应地,其资源分配过程为:首先将空闲索引重置为当前空闲索引的下一个表项序号,然后将重置后空闲索引对应表项中保存的地址信息上的资源作为本次分配资源上报,从而使空闲索引仍然索引到所述分界处的已分配资源对应的表项。对于后一种方式,在对空闲索引初始化后的第一次资源分配时,不需要重置空闲索引,而直接将空闲索引初始化时对应表项中保存的相应资源作为分配资源上报。其余资源释放过程相同,这里就不再赘述。
实施例二:
本实施例中,进一步引入分配索引进行资源分配,同样能够保证资源分配后,已分配资源的地址信息所对应的序号是连续的,具体实施方式见下面的描述。
图7为本发明实施例二中资源管理方法的具体流程图。如图7所示,该方法包括:
步骤701,预先创建并初始化资源管理表,保存资源池中各可分配资源的地址信息,设置空闲索引和分配索引以及资源ID。
本实施例中,资源管理表利用一个指针数组ppStPoolCtrl[]的形式实现,用于保存资源池中各可分配资源的地址信息和为其设置的序号的对应关系。具体地,指针数组中的每个元素,指向资源池中的一个资源,称为该资源的资源管理指针,也就是保存该资源的地址信息;指针数组中各元素的元素号就是资源管理表中各个表项的序号。
为资源管理表设置空闲索引(ulIdleIndex)和分配索引(ulAllocIndex)。如前所述,本文中空闲索引和分配索引为两个变量,它们的取值为,保存资源地址信息表项的序号。本步骤对空闲索引和分配索引进行初始化,将空闲索引初始化为所有序号中的最小值或最大值,将分配索引初始化为除空闲索引外的任意一个未分配资源地址信息对应的序号。具体在本实施例中,由于指针数组的元素号即为序号,因此优选地,将空闲索引初始化为指针数组的首元素号,将分配索引初始化为指针数组最后一个元素的元素号。
另外,为保证资源分配过程中,能够通过资源池中的资源确定资源的已分配和未分配状态,优选地,为资源池中的各个资源设置资源ID(ulResid)属性,该资源ID的取值与保存资源的地址信息的表项序号相等,也就是资源管理指针在指针数组中的元素号。这里,资源ID与前述序号的差别在于,资源ID是在资源池中为各个资源保存的与资源对应的属性值,序号是在资源管理表中保存的与资源地址信息对应的值,二者从不同的逻辑结构中体现对应资源的分配状态。具体地,从资源池的角度,可以利用某资源的资源ID与空闲索引的大小关系确定该资源是否已分配;从资源管理表的角度,可以利用某资源地址信息对应的序号与空闲索引的大小关系确定该资源是否已分配,详细的大小比较过程和结果判定将在后续的描述中介绍。
至此,资源管理表和资源池的初始化完成,建立了如图8a所示的指针数组的每个元素与资源池中的资源对应关系。本步骤中的设置操作由多核系统控制核中的配置单元完成。
在上述初始化完成后,即可以利用资源管理表+资源池的方案进行资源分配,具体一次资源分配过程包括以下步骤:
在本实施例中,资源分配是从资源管理表中右边元素所指向的资源开始的。
步骤702,通过分配索引ulAllocIndex得到本次分配的资源进行上报,通过空闲索引ulIdleIndex得到资源。
本步骤中,假定资源管理表和资源池的当前状态为初始状态,即如图5a所示。分配索引的值为n,元素号为分配索引的指针元素ppStPoolCtrl[ulAllocIndex]指向资源A,于是可得,ulAllocIndex对应的资源管理指针指向资源A;空闲索引的值为0,元素号为空闲索引的指针元素ppStPoolCtrl[ulIdleIndex]为指向资源B,于是可得,ulIdleIndex对应的资源管理指针指向资源B。
在本发明中,分配索引对应的地址信息上的资源为本次分配的资源,因此将资源A作为本次分配的资源进行上报,具体上报方式可以是将资源A的地址信息上报给上层单元,由上层单元根据接收的地址信息在该资源A上写入具体的转发表项,并将该资源A与HASH索引表进行关联。具体与HASH索引表的关联方式可以采用背景技术中的方式,这里就不再赘述。
步骤703,交换空闲索引对应的地址信息与分配索引对应的地址信息。
本步骤中,资源管理表中空闲索引对应的地址信息ppStPoolCtrl[ulIdleIndex]是未分配资源B的地址信息,分配索引对应的地址信息ppStPoolCtrl[ulAllocIndex]是本次分配资源A的地址信息,将二者交换,也就是将本次分配资源A的地址信息与空闲索引相对应,即ppStPoolCtrl[ulIdleIndex]=*A,将未分配资源B的地址信息与分配索引相对应,即ppStPoolCtrl[ulAllocIndex]=*B。
步骤704,交换资源A和资源B的资源ID。
在步骤703中,已经将资源A和资源B的地址信息保存位置进行了交换,因此,在本步骤中,需要将相应资源ID进行更新。具体地,将资源A的资源ID更新为当前指向资源A的资源管理指针的元素号,即元素号0;将资源B的资源ID更新为当前指向资源B的资源管理指针的元素号,即元素号n。
步骤705,重置空闲索引为当前空闲索引的下一个序号,重置分配索引为剩余的任意一个可分配资源地址信息对应的序号。
本发明中,空闲索引的下一个序号为:远离空闲索引初始化方向上与空闲索引相邻的序号,例如,将空闲索引初始化为所有序号的最小值时,空闲索引的下一个序号就是序号增大方向上与空闲索引相邻的序号;将空闲索引初始化为所有序号的最大值时,空闲索引的下一个序号就是序号减小方向上与空闲索引相邻的序号。由于本实施例中,空闲索引初始化为指针数组的首元素号,也就是所有序号中的最小值,因此,远离初始化方向为序号增大的方向,当前空闲索引的下一个序号即为当前空闲索引加1,也就是将空闲索引向右移动一个位置,移动后如图8b所示。
重置分配索引的方式可以有多种:
1、将分配索引保持不变;
2、将分配索引设置为大于空闲索引的任意一个序号;
3、将分配索引设置为沿远离分配索引初始化方向上的下一个序号,即将分配索引减1。这种方式下,能够保证每次资源分配完成后,空闲索引和分配索引从资源管理表的两端向中间移动一个元素号。随着资源分配的进行,可能会出现分配索引和空闲索引相遇的情形,当二者相遇(即减1后的分配索引小于或等于重置后的空闲索引)时,将分配索引设置为其初始化时的取值,即指针数组最后一个元素的元素号(也就是所有序号中的最大值),空闲索引不变,继续分配资源,空闲索引和分配索引做相向移动,循环往复,直到空闲索引移动到分配索引的初始化值,所有资源分配完毕。从而使资源分配能够循环进行。
上述三种重置分配索引的方式均能够保证分配索引对应剩余的可分配资源的地址信息。其中,第三种方式为优选方式,它能够保证资源分配的循环进行,与后续的资源释放方式结合,可以实现在资源分配和释放的过程中,避免出现刚被释放的资源即被分配的情况出现。
经过上述步骤702~705的操作后,一次资源分配流程结束。在此次资源分配完成后,资源管理表和资源池的当前状态(分配索引的重置方式采用第三种)如图8b所示。
由上述过程可知,在步骤705的重置空闲索引前,本次分配资源的地址信息对应的是空闲索引,那么,当空闲索引重置后,则本次分配资源的地址信息所对应的序号的下一个序号为空闲索引,在下次分配资源时,仍然会利用上述步骤将空闲索引与分配索引对应的地址信息进行交换,从而使本次分配资源的地址信息所对应的序号的下一个序号对应下次分配资源的地址信息,也就是说,连续两次分配资源的地址信息所对应的序号是连续的。如此循环,便能够保证在任意次资源分配完毕后,所有已分配资源的地址信息对应的序号均是连续的,也就意味着已分配资源的地址信息是连续排列的,同时,最后一次分配资源的地址信息对应序号的下一个序号为空闲索引。可见,按照本实施例的方式,已分配资源的地址信息排列是连续的,并且,通过空闲索引能够定位该连续排列的已分配资源地址信息所对应的序号区域。
具体地,依照上述步骤702~705的操作进行三次资源分配后,资源管理表和资源池的状态(分配索引的重置方式采用第三种)如图8c所示。
根据图8c可见,经过上述资源分配后,在资源管理表中,所有小于空闲索引的序号所对应的地址信息均是已分配资源的地址信息,所有大于等于空闲索引的序号所对应的地址信息均是未分配资源的地址信息。因此可以利用资源管理表和空闲索引将已分配资源和未分配资源分界,从而在分配资源时,不需要遍历整个资源池查找空闲资源,提高了资源分配效率。并且,利用每次资源分配完毕后的分配索引重置,保证资源分配的时间复杂度为o(1)。同时,由于资源ID始终为该资源的资源管理指针的元素号,因此,通过比较资源ID和空闲索引的大小即可以判断该资源是否是已分配的资源。具体在资源释放和报文转发时,需要进行是否为已分配资源的判断。
在上述具体流程中,将空闲索引初始化为所有序号中的最小值,将分配索引初始化为所有序号中的最大值,事实上,也可以将空闲索引初始化为所有序号中的最大值,将分配索引初始化为所有序号中的最小值,这时,在分配资源后进行空闲索引和分配索引的重置时,则相应地将空闲索引依次减1,优选地,将分配索引依次加1,从而使分配索引和空闲索引依旧做相向运动,使已分配资源地址信息对应的序号均大于空闲索引,保证资源管理表中表征的资源分配状况是连续的。
上述资源分配过程由控制核中的资源管理单元实现。通过上述分配方式,使每次进行资源分配时,将分配索引对应的地址信息上的可分配资源作为此次分配的资源上报,并在分配完成后,将此次分配的资源的地址信息与空闲索引相对应,再将空闲索引重置为当前空闲索引的下一个序号。如此循环下去,便能够保证已分配资源的地址信息所对应的序号均是连续的,并且已分配资源与未分配资源的地址信息对应的序号通过空闲索引分界,从而可以根据空闲索引确定未分配资源对应的地址信息,进而直接在未分配的资源中选择,不需要遍历整个资源池,提高了资源分配效率。
在资源管理的过程中,还可以对已分配的资源进行释放,本实施例中释放资源的具体操作包括如下步骤:
步骤706,确定要释放的资源以及该资源地址信息对应的序号,并确定上次分配资源的地址信息对应的序号。
本步骤中,假定当前资源管理表和资源池的状态如图8d所示,要释放资源C,根据该资源地址信息确定对应的序号,即2,资源C的资源管理指针为ppStPoolCtrl[2];当前空闲索引为n-3,则上次分配资源D对应的序号为ulIdleIndex-1,资源D的指针为ppStPoolCtrl[ulIdleIndex-1],也就是ppStPoolCtrl[n-4]。
步骤707,交换步骤706中确定的两个序号所对应的地址信息。
本步骤中,交换序号2和序号ulIdleIndex-1对应的地址信息,使ppStPoolCtrl[ulIdleIndex-1]指向本次释放资源C,使ppStPoolCtrl[2]指向上次分配的资源D。
步骤708,交换上次分配资源D的资源ID和本次释放资源C的资源ID。
本步骤与步骤704中相同,由于上一步骤改变了资源C和资源D的地址信息在资源管理表中的保存位置,因此需要更新资源ID,以保证资源ID的取值为资源的地址信息在资源管理表中的保存位置。
步骤709,重置空闲索引为当前空闲索引的上一个序号。
本发明中,空闲索引的上一个序号为:靠近空闲索引初始化方向与空闲索引相邻的序号。由于本实施例中空闲索引初始化为指针数组第一个元素的元素号,因此空闲索引的上一个序号即为当前空闲索引减1。图8e即为资源释放后资源管理表和资源池的状态示意图。
这样,就使空闲索引表项指向本次释放的资源,由前述可知,本实施例中,大于等于空闲索引的序号所对应地址信息上的资源均是未分配的资源,因此通过上述操作达到了释放资源的目的,但又未真正删除该资源上写入的转发表项。此时,对于正在访问该资源的转发核,仍然可以通过读取该资源地址上的内容确定转发表项的具体内容,并进行报文转发,不会有任何影响,达到了延迟删除的目的,但却没有带来延迟删除的算法复杂度。同时,上述释放资源的方式结合前述分配索引和空闲索引从资源管理表的两端向中间移动的方式,能够保证释放后的资源不会立即被分配,从而避免同一内存空间的频繁使用,保证内存空间的利用率均衡。由于本次释放资源的地址信息对应的序号为空闲索引,因此,该释放资源是相对较晚被分配的资源,保证资源释放后不会马上被分配,避免同一个资源频繁使用,保证资源利用率均衡。
上述步骤706~709即为释放一个资源的过程,该操作由控制核中的资源管理单元实现。具体地,资源管理单元首先确定释放资源的地址信息与上次分配资源的地址信息所对应的序号,将两个序号所对应的地址信息进行交换,然后,设置空闲索引为当前空闲索引的上一个序号,从而使空闲索引对应释放资源的地址信息,进而使释放资源成为未分配资源。同时,该释放资源的内容并未真正被删除,正在访问该资源的核仍可以继续访问,达到了延迟删除的目的,却没有延迟删除带来的算法复杂度。
上述图7所示的资源分配方法流程中的操作均由多核系统中的控制核来完成。具体地,本实施例还提供了一种控制核的具体实施方式结构,该控制核的结构与图6所示的相同,包括:配置单元和资源管理单元,利用该控制核实现对多核系统中资源的管理和分配。其中,资源管理单元包括资源分配子单元和资源释放子单元。
在该控制核中,配置单元,用于建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表的各个表项保存资源池中各可分配资源的地址信息及其对应的序号;为资源管理表设置空闲索引和分配索引,该空闲索引索引到资源管理表的表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。进一步优选地,可以将空闲索引初始化为资源管理表中所有表项序号的最小值或最大值,并相应地,在空闲索引初始化为最小值时,将分配索引初始化为资源管理表中所有表项序号的最大值;在空闲索引初始化为最大值时,将分配索引初始化为资源管理表中所有表项序号的最小值。
资源管理单元中的资源分配子单元,用于确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;交换所述空闲索引对应的地址信息与分配索引对应的地址信息;重置空闲索引为当前空闲索引的下一个序号,重置分配索引为剩余的任意一个可分配资源的地址信息对应的序号。进一步优选地,在重置分配索引时,可以将分配索引重置为当前分配索引的下一个序号。
资源管理单元中的资源释放子单元,用于在进行资源释放时,确定要释放资源地址信息对应的序号和上一次分配资源地址信息对应的序号,交换确定的两个序号对应的地址信息;重置空闲索引为当前空闲索引的上一个序号。
由上述可见,在本实施例中,利用分配索引进行资源分配,并在资源分配后,交换分配索引和空闲索引对应的地址信息,从而保证资源分配后,所有已分配资源的地址信息是连续的;进行资源释放时,将释放资源的地址信息对应的序号与上次分配资源的地址信息所对应的序号交换,并将空闲索引设为交换后释放资源的地址信息对应的序号,从而保证资源释放后,所有已分配资源的地址信息仍然是连续的。并且,优选地,利用分配索引进行资源分配时,由资源管理表的一端开始,资源分配后,将分配索引重置为当前分配索引的下一个序号,从而保证刚释放的资源不会被立即分配,平衡了资源利用率。
与实施例一中所描述的空闲索引索引到的分界表项的两种选择相同,本实施例中的空闲索引也有两种选择,即索引到分界处的已分配资源对应的表项和索引到分界处未分配资源对应的表项。由本实施例中步骤702~705中所示的资源分配过程可见,该空闲索引索引到分界处的未分配资源对应的表项,因此其分配过程为:首先将分配索引对应表项中保存的地址信息上的资源作为本次分配资源上报,然后交换分配索引与空闲索引对应表项中保存的地址信息,并交换资源ID,最后重置空闲索引和分配索引,使该空闲索引仍然索引到所述分界处的未分配资源对应的表项。当然,也可以在最初,将空闲索引索引到所述分界处的已分配资源对应的表项,相应地,其资源分配过程为:首先将分配索引对应表项中保存的地址信息上的资源作为本次分配资源上报,将空闲索引重置为当前空闲索引的下一个表项序号,然后将重置后空闲索引对应表项和分配索引对应表项中保存的地址信息交换,并交换资源ID,最后重置分配索引;从而使空闲索引仍然索引到所述分界处的已分配资源对应的表项。对于后一种方式,在对空闲索引初始化后的第一次资源分配时,不需要重置空闲索引,而直接将空闲索引和分配索引所对应表项中保存的地址信息进行交换。其余资源释放过程相同,这里就不再赘述。
实施例三:
对基于上述实施例一和二中的资源管理方法,利用在分配的资源上写入转发表项后可以形成报文转发表。本实施例对利用该转发表进行报文转发的具体实施方式进行详述。
图9为本实施例中进行报文转发的具体流程。如图9所示,该流程包括:
步骤901,接收需要转发的报文,根据报文内容提取关键信息计算HASH值。
步骤902,根据HASH值确定对应的资源和该资源的资源ID。
根据HASH值确定对应资源的方式可以采用与背景技术的方案中一致的方式,这里就不再赘述。根据该资源确定资源ID,也就是该资源的资源管理指针在资源管理表中的元素号。
步骤903,利用资源ID判断该资源上写入的转发表项是否有效,若是,则执行步骤904,否则执行步骤905。
本步骤中,判断转发表项是否有效的操作实际上就是判断资源是否已分配的操作。具体地,由于空闲索引可能索引到分界处的两个不同表项,并且空闲索引可以初始化为所有序号的最小值和最大值,因此,判断转发表项是否有效的方式也有不同。
假定将空闲索引初始化为所有序号中的最小值,并且空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项,具体判断转发表项是否有效的方式可以为:在资源管理表中指针元素指向的资源尚未分配完毕时,比较资源ID和资源管理表的空闲索引,若前者小于后者,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;若资源管理表中指针元素所指向的资源均已分配完毕,则直接判定转发表项有效。
假定将空闲索引初始化为所有序号中的最小值,并且空闲索引索引到存储最近一次分配资源的地址信息的表项,具体判断转发表项是否有效的方式可以为:在资源管理表中指针元素指向的资源尚未分配完毕时,比较资源ID和资源管理表的空闲索引,若前者小于或等于后者,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;若资源管理表中指针元素所指向的资源均已分配完毕,则直接判定转发表项有效。
假定空闲索引初始化为所有序号中的最大值,并且空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项,具体判断转发表项是否有效的方式可以为:在资源管理表中指针元素所指向的资源尚未分配完毕时,比较资源ID和资源管理表的空闲索引,若前者大于后者,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;若资源管理表中指针元素所指向的资源均已分配完毕,则直接判定转发表项有效。
假定将空闲索引初始化为所有序号中的最大值,并且空闲索引索引到存储最近一次分配资源的地址信息的表项,具体判断转发表项是否有效的方式可以为:在资源管理表中指针元素指向的资源尚未分配完毕时,比较资源ID和资源管理表的空闲索引,若前者大于或等于后者,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;若资源管理表中指针元素所指向的资源均已分配完毕,则直接判定转发表项有效。
步骤904,根据步骤902确定的资源上写入的转发表项进行报文转发。
步骤905,确定根据HASH值查找到的转发表项已无效,结束转发流程。
上述对报文进行转发的流程由多核系统中的转发核来实现。由上述流程可见,在报文转发过程中,可以利用资源ID进行转发表项有效性的判断,保证转发的正常进行。
基于上述图4和图7所示的资源管理方法,在需要对转发表进行遍历操作(例如,要显示所有有效表项时)时,只需要遍历小于空闲索引的序号所对应的地址信息上的少数有效资源,从而避免了遍历整个资源池,大大提高了遍历效率。在删除整个转发表时,只需要将空闲索引置为其初始化的值,这样,资源管理表中所有指针元素所指向的资源就均为未分配状态,即实现了删除转发表项的目的,避免了遍历整个资源池找到所有有效表项,再逐个删除,大大提高了删除效率。
由上述可见,在路由器产品中应用上述本发明的方法和控制核,对转发效率敏感的转发报文,能够大大提高其报文转发效率、加快转发表项建立速度,有效解决访问冲突问题。事实上,对于其它的各类多核系统在进行资源分配时均可以利用上述资源分配方法进行资源管理,从而保证资源分配的效率。
综上,本发明通过建立资源地址信息与序号的对应关系,并利用空闲索引、分配索引对资源池中的资源进行有效管理,从而提高了资源分配效率和遍历资源的效率,并且利用资源管理表和资源ID实现了延迟删除的功能,解决了访问冲突问题。
以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1、一种多核系统的资源管理方法,其特征在于,预先建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表的各个表项用于保存资源池中各可分配资源的地址信息;为资源管理表设置空闲索引,该空闲索引索引到资源管理表的一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项;在进行资源释放时,确定要释放资源地址信息对应的资源管理表项的序号和最近一次分配资源地址信息所对应的资源管理表项的序号,交换所述的两个序号表项中保存的地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该另一个表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
2、根据权利要求1所述的方法,其特征在于,该方法进一步包括:为资源管理表设置分配索引,所述分配索引索引到任意一个可分配资源的地址信息对应的资源管理表项;
所述空闲索引索引到资源管理表的表项为:所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项;
资源分配的方式为:确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;交换资源管理表中所述空闲索引对应的未分配资源的地址信息与分配索引对应的地址信息;重置空闲索引为当前空闲索引的下一个序号,重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号。
3、根据权利要求2所述的方法,其特征在于,
所述设置空闲索引为:将所述空闲索引初始化为所有序号中的最小值;
所述设置分配索引为:将所述分配索引初始化为所有序号中的最大值;
所述重置分配索引为剩余的一个可分配资源的地址信息对应资源管理表项的序号为:将当前分配索引减1;并判断减1后的分配索引是否小于等于所述重置后的空闲索引,若是,则设置分配索引为所有序号中的最大值,否则,设置分配索引为所述减1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为大于当前空闲索引的任意一个序号。
4、根据权利要求2所述的方法,其特征在于,
所述设置空闲索引为:将空闲索引初始化为所有序号中的最大值;
所述设置分配索引为:将分配索引初始化为所有序号中的最小值;
所述重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号为:将当前分配索引加1;并判断加1后的分配索引是否大于等于所述重置后的空闲索引,若是,则设置分配索引为所有序号中的最小值,否则,设置分配索引为加1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为小于当前空闲索引的任意一个序号。
5、根据权利要求1所述的方法,其特征在于,该方法进一步包括:为资源管理表设置分配索引,所述分配索引索引到任意一个可分配资源的地址信息对应资源管理表项的序号;
所述空闲索引索引到资源管理表的表项为:所述空闲索引索引到存储最近一次分配资源的地址信息的表项;
资源分配的方式为:确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;重置空闲索引为当前空闲索引的下一个序号,交换资源管理表中所述重置后的空闲索引对应的未分配资源的地址信息与分配索引对应的地址信息;重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号。
6、根据权利要求5所述的方法,其特征在于,
所述设置空闲索引为:将所述空闲索引初始化为所有序号中的最小值;
所述设置分配索引为:将所述分配索引初始化为所有序号中的最大值;
所述重置分配索引为剩余的一个可分配资源的地址信息对应的资源管理表项的序号为:将当前分配索引减1;并判断减1后的分配索引是否小于等于所述重置后空闲索引加1的值,若是,则设置分配索引为所有序号中的最大值,否则,设置分配索引为所述减1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为大于当前空闲索引加1后的任意一个序号。
7、根据权利要求5所述的方法,其特征在于,
所述设置空闲索引为:将空闲索引初始化为所有序号中的最大值;
所述设置分配索引为:将分配索引初始化为所有序号中的最小值;
所述重置分配索引为可分配资源地址信息对应的任意一个序号为:将当前分配索引加1;并判断加1后的分配索引是否大于等于所述重置后空闲索引减1的值,若是,则设置分配索引为所有序号中的最小值,否则,设置分配索引为加1后的分配索引;或者,保持当前分配索引不变;或者,设置分配索引为小于当前空闲索引减1后的任意一个序号。
8、根据权利要求1所述的方法,其特征在于,
当所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项时,资源分配的方式为:确定所述空闲索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;重置空闲索引为当前空闲索引的下一个序号;
当所述空闲索引索引到存储最近一次分配资源的地址信息的表项时,资源分配的方式为:重置空闲索引为当前空闲索引的下一个序号;确定所述重置后空闲索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报。
9、根据权利要求1到8中任一所述的方法,其特征在于,该方法进一步包括:预先为资源池中的资源设置资源标识ID,所述资源标识ID的取值与资源地址信息对应的资源管理表项的序号相等;
在进行资源分配并上报分配资源后,将上报的资源与HASH索引表进行关联,并在上报的资源上写入转发表项的内容;
在所述交换地址信息后,进一步包括:确定交换的两个地址信息上的两个
资源,并交换确定的两个资源的资源标识ID;
当接收到需转发的报文时,根据报文内容提取关键信息计算HASH值,根据HASH值获取对应的资源和该资源的资源标识ID;利用所述资源标识ID判断该资源上写入的转发表项是否有效,若是,则根据该资源上的转发表项转发接收的报文;否则,返回查找转发表失败。
10、根据权利要求9所述的方法,其特征在于,所述利用资源标识ID判断资源上写入的转发表项是否有效为:
当所述空闲索引被初始化为所有序号中的最小值、且所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项时,判断所述资源标识ID是否小于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;
当所述空闲索引被初始化为所有序号中的最小值、且所述空闲索引索引到存储最近一次分配资源的地址信息的表项时,判断所述资源标识ID是否小于等于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;
当所述空闲索引被初始化为所有序号中的最大值、且所述空闲索引索引到与存储已分配资源的地址信息表项相邻的存储未分配资源的地址信息的表项时,判定所述资源标识ID是否大于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效;
当所述空闲索引被初始化为所有序号中的最大值、且所述空闲索引索引到存储最近一次分配资源的地址信息的表项时,判断所述资源标识ID是否大于等于当前空闲索引,若是,则判定该资源上写入的转发表项有效,否则,判定该资源上写入的转发表项无效。
11、根据权利要求1到8中任一所述的方法,其特征在于,该方法进一步包括:在释放所有已分配的资源时,设置所述空闲索引为初始化时的取值。
12、一种多核系统中的控制核,其特征在于,该控制核包括:
配置单元,用于建立资源管理表,该资源管理表包括若干表项,每个表项标有自己的序号,所述资源管理表用于保存资源池中各可分配资源的地址信息;为资源管理表设置空闲索引,该空闲索引索引到资源管理表的一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项;
资源管理单元,用于在进行资源释放时,确定要释放资源地址信息对应的资源管理表的序号和最近一次分配资源地址信息对应的资源管理表的序号,交换所述的两个序号表项中记录的资源地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该另一个表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
13、根据权利要求12所述的控制核,其特征在于,所述资源管理单元包括资源分配子单元和资源释放子单元;
所述配置单元,进一步用于将所述空闲索引初始化为所有序号中的最小值或最大值,为资源管理表设置分配索引,并根据空闲索引的初始化值,将分配索引对应初始化为所有序号中的最大值或最小值;
所述资源分配子单元,用于确定所述分配索引对应的地址信息,将该地址信息上的资源作为本次分配的资源上报;交换所述空闲索引对应的地址信息与分配索引对应的地址信息;重置空闲索引为当前空闲索引的下一个序号,重置分配索引为当前分配索引的下一个序号;
所述资源释放子单元,用于在进行资源释放时,确定要释放资源地址信息对应的资源管理表项的序号和最近一次分配资源地址信息对应的资源管理表项的序号,交换所述的两个序号表项中记录的资源地址信息;重置空闲索引,使其索引到资源管理表的另一个表项,该表项将资源管理表分成两部分,其中一部分为存储所有已分配资源的地址信息的表项,一部分为存储未分配资源的地址信息的表项。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101213378A CN100543687C (zh) | 2007-09-04 | 2007-09-04 | 一种多核系统的资源管理方法和控制核 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101213378A CN100543687C (zh) | 2007-09-04 | 2007-09-04 | 一种多核系统的资源管理方法和控制核 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101110043A CN101110043A (zh) | 2008-01-23 |
CN100543687C true CN100543687C (zh) | 2009-09-23 |
Family
ID=39042124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101213378A Expired - Fee Related CN100543687C (zh) | 2007-09-04 | 2007-09-04 | 一种多核系统的资源管理方法和控制核 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100543687C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106230751A (zh) * | 2016-07-27 | 2016-12-14 | 杭州华三通信技术有限公司 | 自适应调整资源占用比例的方法和装置 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102053869B (zh) * | 2009-10-29 | 2013-11-06 | 杭州华三通信技术有限公司 | 一种多操作系统的资源分配方法和装置 |
CN101976208B (zh) | 2010-10-25 | 2014-08-13 | 中兴通讯股份有限公司 | 信息投递的方法和装置 |
CN102571593A (zh) * | 2012-01-20 | 2012-07-11 | 华为技术有限公司 | 报文分发方法及装置 |
CN103365658B (zh) * | 2013-06-28 | 2016-09-07 | 华为技术有限公司 | 一种资源访问方法和计算机设备 |
EP3249539B1 (en) * | 2015-02-16 | 2021-08-18 | Huawei Technologies Co., Ltd. | Method and device for accessing data visitor directory in multi-core system |
CN105450792B (zh) * | 2015-12-23 | 2018-09-14 | 东软集团股份有限公司 | 用于多核转发网络地址端口转换的端口分配方法和装置 |
CN106897339A (zh) * | 2016-07-05 | 2017-06-27 | 阿里巴巴集团控股有限公司 | 资源分配方法、装置、服务器及系统 |
CN109634888A (zh) * | 2018-12-12 | 2019-04-16 | 浪潮(北京)电子信息产业有限公司 | 一种fc接口卡交换资源标识处理方法及相关组件 |
CN110008020B (zh) * | 2019-03-05 | 2024-04-09 | 平安科技(深圳)有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN110378086B (zh) * | 2019-07-31 | 2021-06-29 | 中国工商银行股份有限公司 | 权限的管理方法和装置 |
CN113836077A (zh) * | 2021-09-08 | 2021-12-24 | 北京灵汐科技有限公司 | 众核设备 |
CN114356560B (zh) * | 2021-12-23 | 2022-09-16 | 北京中科网威信息技术有限公司 | 资源对象获取方法及系统 |
CN118331507B (zh) * | 2024-06-11 | 2024-09-24 | 格创通信(浙江)有限公司 | 一种表项空间分配方法及装置 |
-
2007
- 2007-09-04 CN CNB2007101213378A patent/CN100543687C/zh not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106230751A (zh) * | 2016-07-27 | 2016-12-14 | 杭州华三通信技术有限公司 | 自适应调整资源占用比例的方法和装置 |
CN106230751B (zh) * | 2016-07-27 | 2019-12-06 | 新华三技术有限公司 | 自适应调整资源占用比例的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101110043A (zh) | 2008-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100543687C (zh) | 一种多核系统的资源管理方法和控制核 | |
US7249152B2 (en) | Dynamic disk space management by multiple database server instances in a cluster configuration | |
CN101556557B (zh) | 一种基于对象存储设备的对象文件组织方法 | |
US8041685B2 (en) | Method of changing system configuration in shared-nothing database management system | |
JP4139675B2 (ja) | 仮想ボリュームの記憶領域割当方法、その装置及びプログラム | |
US6757802B2 (en) | Method for memory heap and buddy system management for service aware networks | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
US7124266B1 (en) | Locking and memory allocation in file system cache | |
CN109582600B (zh) | 一种数据处理方法及装置 | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
KR102498668B1 (ko) | 플래시-인지 힙 메모리 관리 방법 및 호스트 장치 | |
CN110321301A (zh) | 一种数据处理的方法及装置 | |
US20090327618A1 (en) | Method for Self Optimizing Value Based Data Allocation Across A Multi-Tier Storage System | |
US11271857B2 (en) | Dynamic allocation of memory for packet processing instruction tables in a network device | |
CN110245129B (zh) | 一种分布式全局数据去重方法和装置 | |
CN110727517A (zh) | 一种基于分区设计的内存分配方法和装置 | |
CN104254839A (zh) | 用于分割单链表以供分配存储器元素的系统和方法 | |
CN110109931B (zh) | 一种用于防止rac实例间数据访问发生冲突的方法及系统 | |
CN107992270B (zh) | 一种多控存储系统全局共享缓存的方法及装置 | |
CN109960662A (zh) | 一种内存回收方法及设备 | |
CN104468665B (zh) | 数据分布式存储的实现方法和系统 | |
CN101350010B (zh) | 一种哈希表的操作方法 | |
CN101610197A (zh) | 一种缓冲区管理方法及其系统 | |
US11474938B2 (en) | Data storage system with multiple-size object allocator for disk cache | |
CN108292262A (zh) | 计算机存储器管理方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No. Patentee after: Xinhua three Technology Co., Ltd. Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base Patentee before: Huasan Communication Technology Co., Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090923 Termination date: 20200904 |