一种会话表老化方法及***
技术领域
本发明属于数据通信领域,具体涉及一种会话表维护技术。
背景技术
大量的网络协议或应用需要在***中建立会话表,***通过对表项的查询,以实现各种转发、会话等任务,常见的会话表包括ARP(地址解析协议)表,路由表,NAT(网络地址转换)转发表等,***为了实现对各种会话表的动态维护,通常会引入一个老化机制,即对长时间处于静默状态的表项进行老化删除,以防止会话表过于冗余,提高查找效率。
在申请号为CN200710198708.2的专利申请文件中提到了解决这一问题的方案:在分布式***中,会话表的老化、删除通常由主控核即用于执行其它任务,如任务调度、内存管理等功能的CPU进行统一处理,转发核即用于执行转发核心业务的CPU负责对会话表进行查询,并执行转发任务。此种老化机制在通常情况下不会出现较大的问题,但是在某些情况下,如大量的表项集中老化时,主控核的负担急剧上升,主控核需要耗费大量的时间进行老化,另一方面,主控核在对会话表进行老化时,会将会话表进行加锁处理,以防止访问冲突,因此转发核在主控核进行老化任务时无法进行会话表查询业务,直接导致转发核心业务受阻,产生网络中断,堆叠设备***等严重的后果。
首先,该问题是由于将所有老化任务全部集中给主控核,同时又有大量的会话表集中老化或删除,导致主控核大量占用会话表的操控权所致;其次,会话表老化任务全部由主控核处理,增大了主控核CPU的占用率,容易导致其它任务异常或设备卡死;进而,只有一个主控核处理会话表,速率低下,且由于主控核在处理会话表时,转发核无法查询该会话表,导致转发核业务阻塞。
发明内容
本发明为解决的上述技术问题,提出一种会话表进行老化方法及***。
本发明采用的技术方案是:一种会话表老化方法,包括以下步骤:
A、对会话表进行老化检测,得到需要老化的会话节点消息,根据得到的会话节点消息查找对应的转发核,并将会话节点老化消息下发至转发核老化消息队列;
B、根据转发核老化消息队列中缓存的会话节点老化消息将会话节点从会话表中移出。
进一步地,所述会话节点消息包括会话节点队列头部、会话节点老化标志、会话节点创建者以及会话节点内容;所述会话节点老化消息由老化消息队列头部和会话节点消息组成。
进一步地,
所述步骤A具体包括以下分步骤:
A1、按顺序依次读取会话表中的会话节点;
A2、判断当前会话节点是否需要老化,若需要老化则执行步骤A3,否则执行步骤A1读取下一个会话节点;
A3、判断当前会话节点老化标志是否被标记,若是则返回步骤A1读取下一个会话节点,否则执行步骤A4;
A4、根据当前会话节点的会话老化消息获取创建当前会话节点的转发核,将会话节点老化消息发送至创建当前会话节点转发核的转发核老化消息队列,并标记将当前会话节点老化标记,然后执行步骤A1读取下一个会话节点。
进一步地,
所述步骤B具体包括以下分步骤:
B1、判断转发核老化消息队列是否为空,若为空则执行步骤B3,否则执行步骤B2;
B2、获取当前会话表,锁定会话表,将当前会话节点从会话表中移出,然后解锁会话表;
B3、执行转发业务。
进一步地,所述步骤A进一步包括将内存回收消息下发至转发核老化消息队列;所述内存回收消息由内存回收消息队列头部和指向该会话节点地址的指针组成,所述指向会话节点地址的指针为会话节点消息组成的字段;
所述步骤B进一步包括根据转发核老化消息队列中缓存的内存回收消息进行会话节点删除。
本发明还提供一种会话表老化***,
包括:主控核老化检查模块、以及转发核老化执行模块;
所述主控核老化检查模块用于对会话节点老化进行监控,得到需要老化的会话节点消息,并根据得到的会话节点消息判断创建会话节点的转发核,然后将会话节点老化消息下发到对应转发核老化消息队列;
所述转发核老化执行模块用于检查转发核消息缓存模块是否为空,不为空时,则获取转发核消息缓存模块所缓存的会话节点老化消息,然后执行转发业务。
进一步地,所述会话节点消息包括会话节点创建者信息,主控核老化检查模块通过读取会话节点创建者信息得到创建会话节点的转发核,并将会话节点老化消息下发到该转发核的转发核老化消息队列。
进一步地,主控核老化检查模块还包括将内存回收消息下发到转发核老化消息队列。
进一步地,所述主控核老化检查模块还包括会话节点老化标志判断单元,用于判断当前需要老化的会话节点的老化标志是否已经被标记,若是则检查下一个会话节点;否则根据主控核老化检查模块判断得到创建会话节点的转发核,将会话节点老化消息和内存回收消息下发到该转发核的转发核老化消息队列,并标记该会话节点的老化标志。
更进一步地,所述转发核老化执行模块还包括消息判断单元,用于判断从转发核老化消息队列获取到的消息为会话节点老化消息或者内存回收消息,当该消息为会话节点老化消息时,则将会话节点从会话表中移除;当判断该消息为内存回收消息时,则将会话删除。
本发明的有益效果:本发明的一种会话表老化方法及***,通过将老化任务的核心部分转移给转发核,提高了多核***的并发性,降低了主控核的负担,提高了老化的效率。解决了因大量会话表需要集中老化而出现了主控核卡死等问题;去锁化,每个转发核在回收内存,即真正删除会话时均无需加锁,且转发核采用一次老化一次转发,解决了传统方法中,主控核因老化任务长期占用会话表,导致转发业务受阻的问题;将老化消息和内存回收消息分开处理,实现老化优先,删除延后的机制,提高了转发核的处理效率,有效的降低了老化任务因等待而造成的转发任务受阻。
附图说明
图1为本发明实施例提供的方法流程图。
图2为本发明实施例提供的主控核老化消息判断流程图。
图3为本发明实施例提供的转发核老化执行流程图。
具体实施方式
为便于本领域技术人员理解本发明的技术内容,下面结合附图对本发明内容进一步阐释。
如图1所示为本发明的方案流程图,本发明的技术方案为:一种会话表老化方法,包括以下步骤:
A、对会话表进行老化检测,得到需要老化的会话节点消息,根据得到的会话节点消息查找对应的转发核,并将会话节点老化消息下发至转发核老化消息队列;
B、根据转发核老化消息队列中缓存的会话节点老化消息将会话节点从会话表中移出。
如图2所示为主控核老化消息判断流程图,所述步骤A具体包括以下分步骤:
A1、主控核老化检查任务按顺序依次读取会话表中的会话节点;
A2、判断当前会话节点是否需要老化,若需要老化则执行步骤A3,否则执行步骤A1读取下一个会话节点;
A3、判断当前会话节点老化标志是否被标记,若是则返回步骤A1读取下一个会话节点,否则执行步骤A4;
A4、根据当前会话节点的会话老化消息获取创建当前会话节点的转发核,将会话节点老化消息发送至该转发核,并标记将当前会话节点老化标记,然后执行步骤A1读取下一个会话节点。
如图3所示为转发核老化执行流程图,所述步骤B具体包括以下分步骤:
B1、转发核老化执行任务判断转发核老化消息队列是否为空,若为空则执行步骤B3,否则执行步骤B2;
B2、获取当前会话表,锁定会话表,将当前会话节点从会话表中移除,然后解锁会话表;
B3、执行转发业务。
本发明方案包括以下三个部分:主控核老化检查任务,转发核老化执行任务,转发核老化消息队列。
主控核老化检查任务主要负责会话老化监控、会话老化消息下发、内存回收消息下发三个功能,转发核老化执行任务主要负责检查老化消息队列、执行老化任务两个功能,转发核老化消息队列用于存放主控核老化检查任务下发的会话老化消息和内存回收消息,提供缓存功能,供转发核老化执行任务获取。
主控核老化检查任务在进行会话节点老化消息或内存回收消息下发时,会先判断会话节点由哪个转发核创建,然后再发送消息给对应的转发核。例如,会话表S包括会话节点s1,s2,……,s8,转发核L1,L2,其中会话表S里的会话节点s1,s2需要老化,s1会话由L1创建,s2会话由L2创建,则***正常运行过程中,主控核老化检查任务会检查到会话节点s1、s2需要老化,然后将s1的老化消息、内存回收消息依次下发给L1即创建该会话节点的转发核中的老化消息队列,发送s2的老化消息、内存回收消息到L2中的老化消息队列,转发核L1发现自己的老化消息队列不为空时,则会调用本转发核的老化执行任务对消息进行顺序处理,顺序处理时,会先处理到L1的老化消息,此时仅将s1从S中移除,之后会处理到内存回收消息,此时再将s1从内存中释放。s2的处理方式同s1。
本发明的技术方案为提高会话表节点删除的效率,对传统的会话表进行修改,将***中存放会话的哈希表修改为包含双向链表成员的哈希表;另外在每个会话节点消息中加入一个仅由主控核老化检查任务读取的老化标志位,命名该标志位为TimeoutFlag,同时创建字段Creator,用于存放创建该会话的转发核,会话节点消息具体组成如下表1所示,包括:由Ppre(前指针)和Pnext(后指针)组成的队列头部,老化标志位TimeoutFlag,创建者Creator,会话内容DATA。
表1
本发明中为每个转发核创建一个转发核老化消息队列,该队列用于存放主控核老化检查任务下发的消息,队列初始化为空。
构造两个消息包括:会话节点老化消息,会话节点内存回收消息,会话节点老化消息由老化消息队列头部和会话节点消息组成,如表2所示;会话节点内存回收消息由内存回收消息队列头部和指向该会话节点地址的指针组成,所述指向会话节点地址的指针为将会话节点消息组成的字段,具体如表3所示。
表2
表3
本发明构造一个主控核老化检查任务,负责对会话表的检测,当检测到有某个会话节点需要老化且该会话节点没有被Timeout标记时,判断该会话节点由哪个转发核创建,然后先发送会话节点老化消息,即将该会话节点的队列头部放入该转发核的老化消息队列,之后判断该会话节点是否可以删除,即所占用内存是否可以释放,当确定可以删除该会话节点后,再发送内存回收消息到对应的转发核老化消息队列。该任务在发送会话节点老化消息后则会对其打上Timeout标记,表示已发送过老化消息,防止该会话被二次检查老化,例如发送消息后,存在转发核来不及处理消息,当检测到该会话节点已经被Timeout标记,则不需要进行再次老化检查,同时该标记仅仅供主控核老化检查任务使用,所以修改时无需对该会话进行锁定,所述主控核老化检查任务的流程如图2所示。
本发明中为每个转发核构建一个转发核老化执行任务,在转发核每次进行转发任务前进行一次判断,判断本转发核的老化消息队列是否为空,若为空,则直接进行转发任务,否则执行转发核老化执行任务。每次执行老化执行任务时,从老化消息队列中取出一个消息。若该消息为会话节点老化消息,则根据消息中的老化消息队列头部信息,将该会话节点从会话表中移除,但不做内存回收,此时,从外部表现来看,该会话节点已被老化。转发核在处理下一个消息时,若消息队列中存在内存回收消息,再执行实质上的会话删除,包括内存释放、缓存清空等一系列操作,不属于本专利的描述范围,不做详细描述。所述转发核老化执行任务的流程如图3所示。
本发明的一种会话表老化方法及***,通过将会话表的老化执行任务分配给了各个转发核进行执行,降低了主控核的工作量,同时提高了老化任务执行的并发性;去锁化,每个转发核在回收内存,即真正删除会话时均无需加锁,且转发核采用一次老化一次转发的方式,解决了传统方法中,主控核因老化任务长期占用会话表,导致转发业务受阻的问题;将老化消息和内存回收消息分开处理,实现老化优先,删除延后的机制,提高了转发核的处理效率,有效的降低了老化任务因等待而造成的转发任务受阻。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。