具体实施方式
下面结合附图对本发明实施例进行详细描述。
本发明提供一种基于内存分配的报文处理方法,用于为指定类型报文分配内存,该指定类型为需要进行大量处理的报文类型,例如,指定类型报文可以为板间通信报文、端口认证报文、安全认证报文、跨设备buffer透传报文等,当然该指定类型报文并不局限于此,本发明中不再详加赘述。
本发明中,网络设备需要为每种指定类型报文设置内存门限(该内存门限为内存次数),各指定类型报文的内存门限可以相同,也可以不同,且各内存门限值可根据实际需要进行选择。
例如,为A类型报文设置内存门限为10000、为B类型报文设置内存门限为20000。
另外,网络设备还需要为每种指定类型报文维护当前内存使用计数,在指定类型报文进入CPU系统(即由CPU进行处理)后,为指定类型报文分配内存,并更新内存使用计数为当前内存使用计数与预设数值(如1)的和。
在指定类型报文处理完成(如报文处理模块根据报文下发了表项、对报文进行了转发等)时,则释放对应的内存,并更新内存使用计数为当前内存使用计数与预设数值(如1)的差。
例如,网络设备为A类型报文维护当前内存使用计数时,每次需要为A类型报文分配内存时,则将当前内存使用计数加1后得到新的当前内存使用计数;而每次A类型报文处理完成时,则将当前内存使用计数减1后得到新的当前内存使用计数。
如图2所示,基于上述各指定类型报文的内存门限以及当前内存使用计数,该基于内存分配的报文处理方法包括以下步骤:
步骤201,网络设备获取指定类型报文的当前内存使用计数以及指定类型报文的内存门限。
其中,网络设备可根据预设周期获得当前内存使用计数以及内存门限,该预设周期可根据实际需要选择,各指定类型报文对应的预设周期可以相同,也可以不同。
例如,网络设备每隔一分钟获取A类型报文对应的当前内存使用计数及内存门限;每隔两分钟获取B类型报文对应的当前内存使用计数及内存门限。
步骤202,针对每种指定类型报文,网络设备判断当前内存使用计数是否小于内存门限,如果是,执行步骤203,否则,执行步骤204。
步骤203,如果有指定类型的待处理报文需要分配内存时,网络设备为该待处理报文分配内存。
需要注意的是,在分配内存之后,还需要更新内存使用计数。
步骤204,如果有指定类型的待处理报文需要分配内存时,网络设备丢弃该待处理报文。
例如,网络设备在获取A类型报文对应的当前内存使用计数及内存门限时,当前内存使用计数为9000,内存门限为10000,如果后续有A类型报文需要分配内存时,则网络设备为A类型报文分配内存。
又例如,网络设备在获取B类型报文对应的当前内存使用计数及内存门限时,当前内存使用计数为20005,内存门限为20000,如果后续有B类型报文需要分配内存时,则网络设备丢弃需要分配内存的B类型报文。
需要说明的是,为了保证内存的合理利用,使得有内存资源剩余(即使得报文处理模块可以获得内存,进行报文处理),网络设备还可以根据内存利用率动态调整为各指定类型报文设置的内存门限。
具体的,在网络设备运行时,网络设备可定时(间隔时间可为1S)获取内存利用率,并根据获得的内存利用率判断是否需要调整各指定类型报文的内存门限。实际应用中,可设置一个门限值(如75%),当内存利用率大于该门限值时,则降低各指定类型报文的内存门限,否则,不需要调整各指定类型报文的内存门限。
优选的,还可以设置多个门限值,本发明中以两个门限值为例,两个门限值分别为预设第一门限和预设第二门限,预设第二门限(如85%)大于预设第一门限(如75%)。
网络设备在获取内存利用率后,如果内存利用率在连续的第一时间(如连续5S)内均大于预设第一门限且不大于预设第二门限,则网络设备以第一限速值降低各指定类型报文的内存门限;如果内存利用率在连续的第二时间(如连续5S)内均大于预设第二门限,则网络设备以第二限速值降低各指定类型报文的内存门限,该第二限速值大于第一限速值。
其中,该第一限速值和第二限速值可以为内存门限降低的数值、也可以为内存门限降低的比例。例如,第一限速值为将内存门限降低500、第二限速值为将内存门限降低1000;或者,第一限速值为将内存门限降低5%、第二限速值为将内存门限降低10%。
当网络设备获知内存利用率为80%时,对于A类型报文的内存门限,以第一限速值降低后的内存门限为(10000-500)或(10000*95%);对于B类型报文的内存门限,以第一限速值降低后的内存门限为(20000-500)或(20000*95%)。
当网络设备获知内存利用率为90%时,对于A类型报文的内存门限,以第二限速值降低后的内存门限为(10000-1000)或(10000*90%);对于B类型报文的内存门限,以第二限速值降低后的内存门限为(20000-1000)或(20000*90%)。
需要注意的是,对于不同指定类型报文的内存门限,降低的数值或者降低的比例可以相同,也可以不同。
进一步的,当各指定类型报文的内存门限被降低后,则内存利用率可以降低,为了保证有更多的报文可以被分配内存,在降低各指定类型报文的内存门限之后,本发明中还可以包括网络设备对内存门限进行恢复的过程。
具体的,网络设备以第一限速值降低各指定类型报文的内存门限之后,当内存利用率在连续的第三时间(如连续5S)内均小于预设第三门限(如70%)时,网络设备可将降低后的内存门限恢复为之前设置的内存门限(即初始设置的内存门限,如A类型报文的内存门限10000),该预设第三门限小于预设第一门限。
其中,为了避免反复调整指定类型报文的内存门限,应将预设第三门限设置的小于预设第一门限,以避免将降低后的内存门限恢复为之前设置的内存门限后,又造成内存利用率大于预设第一门限,继而导致反复调整指定类型报文的内存门限。
网络设备以第二限速值降低各指定类型报文的内存门限之后,当内存利用率在连续的第四时间内(如连续5S)均小于预设第四门限(如80%)时,则网络设备以第一限速值降低各指定类型报文的内存门限,预设第四门限小于预设第二门限。
之后,当内存利用率又在连续的第三时间内均小于预设第三门限时,网络设备将降低后的内存门限恢复为之前设置的内存门限。
其中,为了避免反复调整指定类型报文的内存门限,应将预设第四门限设置的小于预设第二门限,以避免通过第一限速值降低各指定类型报文的内存门限后,又造成内存利用率大于预设第二门限,继而导致反复调整指定类型报文的内存门限。
为了更加清楚的阐述本发明提供的技术方案,以下结合图3所示的内存利用率与内存门限的关系进行进一步的说明。
在初始配置时,报文类型1的内存门限为1500、报文类型2的内存门限为1000、报文类型3的内存门限为1000;
如果内存利用率在连续的5S内均大于75%且小于85%时,则网络设备将报文类型1的内存门限降低为1000、将报文类型2的内存门限降低为500、将报文类型3的内存门限降低为300;
如果内存利用率在连续的5S内均大于85%时,则网络设备将报文类型1的内存门限降低为200、将报文类型2的内存门限降低为100、将报文类型3的内存门限降低为100。
进一步的,网络设备将报文类型1的内存门限降低为1000、将报文类型2的内存门限降低为500、将报文类型3的内存门限降低为300之后,如果内存利用率在连续的5S内均小于70%时,则网络设备将报文类型1的内存门限恢复为1500、将报文类型2的内存门限恢复为1000、将报文类型3的内存门限恢复为1000。
网络设备将报文类型1的内存门限降低为200、将报文类型2的内存门限降低为100、将报文类型3的内存门限降低为100之后,如果内存利用率在连续的5S内均小于80%时,则网络设备将报文类型1的内存门限调整为1000、将报文类型2的内存门限调整为500、将报文类型3的内存门限调整为300。
综上所述,通过采用本发明提供的技术方案,具有以下优点:
在现有硬件限速和软件限速的基础上,增加内存限速的方式,通过为指定类型报文设置内存门限,当指定类型报文的当前内存使用计数大于内存门限后,对于需要分配内存的待处理报文,可以不为其分配内存,并将其丢弃,从而可以保证内存的合理利用,解决因报文过多的占用内存,导致CPU系统因内存耗尽,功能失效的问题。
进一步的,网络设备可以根据内存使用率动态调整各指定类型报文的内存门限,网络设备内存不会由于报文冲击导致内存耗尽,且不会出现由于报文处理模块无法获得内存导致的无法处理报文的内存死锁状态,对于小内存设备或堆叠设备来说,可靠性得到加强。
基于与上述方法同样的发明构思,本发明提供一种基于内存分配的报文处理设备,用于为指定类型报文分配内存,为每种指定类型报文设置内存门限,所述内存门限为内存次数,在为指定类型报文分配内存时,更新内存使用计数为当前内存使用计数与预设数值的和,在指定类型报文处理完成时,更新内存使用计数为当前内存使用计数与所述预设数值的差,如图4所示,该设备包括:
获取模块11,用于获取指定类型报文的当前内存使用计数以及指定类型报文的内存门限;
判断模块12,用于判断所述当前内存使用计数是否小于所述内存门限;
分配模块13,如果判断结果为是,当有所述指定类型的待处理报文需要分配内存时,用于为所述待处理报文分配内存;
丢弃模块14,如果判断结果为否,当有所述指定类型的待处理报文需要分配内存时,用于丢弃所述待处理报文。
所述获取模块11,还用于获取内存利用率;
该设备还包括:调整模块15,用于根据所述内存利用率调整为各指定类型报文设置的内存门限。
所述调整模块15,具体用于当所述内存利用率在连续的第一时间内均大于预设第一门限且不大于预设第二门限时,以第一限速值降低各指定类型报文的内存门限;
当所述内存利用率在连续的第二时间内均大于预设第二门限时,以第二限速值降低各指定类型报文的内存门限,所述第二限速值大于第一限速值。
所述调整模块15,进一步用于当所述内存利用率在连续的第三时间内均小于预设第三门限时,将降低后的内存门限恢复为之前设置的内存门限,所述预设第三门限小于所述预设第一门限。
所述调整模块15,进一步用于当所述内存利用率在连续的第四时间内均小于预设第四门限时,以第一限速值降低各指定类型报文的内存门限,所述预设第四门限小于所述预设第二门限。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。