发明内容
有鉴于此,本发明提供了一种多核系统核间数据报文缓存方法及设备,每个转发核设置有与其它转发核一一对应的先进先出FIFO缓存队列用于接收其它转发核数据报文,并且将多核系统的FIFO缓存队列设计成一种可以动态调节队列长度的模式,从而提高多核系统中某一个或者某几个转发核的抗突发性能。本发明提出的技术方案是:
一种多核系统核间数据报文缓存方法,应用于可缓存M个报文、转发核数量为N的多核系统,其中N≥2,该方法包括以下步骤:
每个转发核设置有与其它转发核一一对应的先进先出FIFO缓存队列用于接收其它转发核数据报文,其中,每个FIFO缓存队列设置有队列门限,各转发核FIFO缓存队列的门限之和小于M;
报文入队时,
如果与所述报文对应的FIFO缓存队列当前缓存的报文数小于队列门限,则所述报文入队,所述FIFO缓存队列缓存报文数加1;
如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限,且整机空闲缓存报文数S大于或等于转发核数量N,所述报文入队,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1,所述整机空闲缓存报文数S为整个多核系统剩余的空闲缓存空间;
如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限,且整机空闲缓存报文数S小于转发核数量N,丢弃报文。
上述方案中,所述队列门限为B,且B为一个正整数。
上述方案中,该方法进一步包括:
报文入队时,如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限B,且整机空闲缓存报文数S大于或等于转发核数量N,进一步判断整机空闲缓存报文数S是否大于整机拥塞门限C,如果是,报文入队;否则高优先级报文入队,低优先级报文丢弃,所述整机拥塞门限C为正整数,且N≤C<M;
报文入队后,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1。
上述方案中,所述高优先级报文,是符合访问控制列表ACL的报文;
所述低优先级报文,是不符合ACL的报文。
上述方案中,该方法进一步包括:
报文出队时,如果所述报文所在的FIFO缓存队列当前缓存的报文数小于或等于队列门限B,所述FIFO缓存队列缓存报文数减1;
如果所述报文所在的FIFO缓存队列当前缓存的报文数大于队列门限B,所述FIFO缓存队列缓存报文数减1,整机空闲缓存报文数S加1。
本发明提出的多核设备的技术方案是:
一种多核设备,该设备包括:
存储单元,设置有每个转发核与其它转发核一一对应的先进先出FIFO缓存队列用于接收其它转发核数据报文,其中,存储单元的容量为M,每个FIFO缓存队列设置有队列门限,各转发核FIFO缓存队列的门限之和小于M;
收发单元,用于转发核接收其它转发核的数据报文和发送数据报文;
处理单元,用于转发核接收到报文时,判断对应的FIFO缓存队列当前缓存报文数是否小于队列门限,如果是,报文入队,所述FIFO缓存队列缓存报文数加1;否则继续判断整机空闲缓存报文数S是否大于或等于转发核数量N,如果是,报文入队,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1;如果整机空闲缓存报文数S小于转发核数量N,则丢弃报文;所述整机空闲缓存报文数S为多核系统剩余的空闲缓存空间;
计数单元,用以计录各个缓存队列当前缓存报文数以及整机空闲报文数S。
上述方案中,所述缓存队列的门限为B,且B为一个正整数。
上述方案中,所述处理单元还用于:
如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限B,且整机空闲缓存报文数S大于或等于转发核数量N,进一步判断整机空闲缓存报文数S是否大于整机拥塞门限C,如果是,报文入队;否则高优先级报文入队,低优先级报文丢弃,所述整机拥塞门限C为正整数,且N≤C<M;
报文入队后,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1。
上述方案中,所述处理单元进一步用于,判断入队报文是否符合访问控制列表ACL,如果是,则将该报文定为高优先级报文,否则将其定为低优先级报文;
所述存储单元进一步用于,存储ACL。
上述方案中,报文出队时,所述处理单元进一步用于:
如果所述报文所在的FIFO缓存队列当前缓存的报文数小于或等于队列门限B,所述FIFO缓存队列缓存报文数减1;
如果所述报文所在的FIFO缓存队列当前缓存的报文数大于队列门限B,所述FIFO缓存队列缓存报文数减1,整机空闲缓存报文数S加1。
综上所述,本发明提出的技术方案能够有效提高多核系统的核间抗突发性能,并且能实现对入队报文的过滤,有利于多核数据报文转发业务的推广应用。
具体实施方式
为使本发明的目的、技术方案和优点表达的更加清楚明白,下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明一个实施例的技术方案是:一种多核系统核间数据报文缓存方法,应用于可缓存M个报文、转发核数量为N的多核系统,其中N≥2,每个转发核设置有与其它转发核一一对应的先进先出FIFO缓存队列用于接收其它转发核数据报文,其中,每个FIFO缓存队列设置有队列门限,各转发核FIFO缓存队列的门限之和小于M;
报文入队时,
如果与所述报文对应的FIFO缓存队列当前缓存的报文数小于队列门限,则所述报文入队,所述FIFO缓存队列缓存报文数加1;
如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限,且整机空闲缓存报文数S大于或等于转发核数量N,所述报文入队,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1,所述整机空闲缓存报文数S为多核系统剩余的空闲缓存空间;
如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限,且整机空闲缓存报文数S小于转发核数量N,丢弃报文。
所述队列门限可以为B,且B为一个正整数
所述FIFO缓存队列的长度可以动态调整,最小为B,最大扩展至B+(M-B×N×(N-1)-(N-1)),其中B×N×(N-1)为一个多核系统中所有FIFO缓存队列固定占用的缓存空间,M-B×N×(N-1)为整机空闲缓存报文数S的最大值,即整个多核系统剩余的空闲缓存空间的最大值,理论上M-B×N×(N-1)全部用来为一个FIFO缓存队列扩展队列长度时,该FIFO缓存队列扩展到最大长度,但是当整机空闲缓存报文数S减小至N-1时,FIFO缓存队列已经不能再扩展,因此队列长度最大可以扩展至B+(M-B×N×(N-1)-(N-1))。
由于转发核之间以异步对称多处理(ASMP,Asymmetric SymmetricMultiprocessing)方式工作,彼此之间处理报文入队出队互不影响,同一时刻每个转发核只能处理一个FIFO缓存队列的报文出队和入队,因此完全可能出现同一时刻有两个或两个以上由不同转发核建立的的FIFO缓存队列要求扩展队列长度,极限情况为某一时刻有N个FIFO缓存队列同时要求扩展队列长度,且每个FIFO缓存队列分别由各个不同的转发核建立,针对这一情况,本实施例可以将整机空闲缓存报文数S的最小值设置为N,这样可以避免了各个缓存队列均查询到整机空闲缓存资源可以为其扩展缓存空间却出现报文不能成功入队的情况。
由上述技术方案可知,本发明与现有技术的区别之处在于:每个转发核设置有与其它转发核一一对应的先进先出FIFO缓存队列用于接收其它转发核数据报文,并且把各个FIFO缓存队列由固定长度变成可变长度,根据具体的瞬时拥塞情况自动对每个缓存队列做动态调整,从而达到一种“弹性”缓存队列的效果。同时引入访问控制列表ACL,在整机拥塞比较严重的情况下,通过使能ACL过滤,实现对用户自定义的高优先级报文的优先缓存保证。
为了更好地说明本发明技术方案,下面用实施例分别从报文入队和报文出队两个角度对其进行详细描述。
方法实施例一
在本实施例中,假设多核系统有4个转发核来实现转发核间报文的转发,结构示意图如图1所示,分别为转发核1、转发核2、转发核3和转发核4,任意两个转发核间都可以相互传递报文。本实施例中每个转发核设置有与其它转发核一一对应的FIFO缓存队列用于接收其它转发核数据报文,如图3所示,为了便于描述,图3仅展示转发核1与其他转发核一一对应的FIFO缓存队列,其中队列D为转发核1与转发核2对应的FIFO缓存队列,队列E为转发核1与转发核3对应的FIFO缓存队列,队列F为转发核1与转发核4对应的FIFO缓存队列。当转发核2、3和4发送报文给转发核1时,所发送的报文就会加入各自对应的FIFO缓存队列,排队等候转发核1对其进行处理,或者丢弃。
本实施例中,转发核数量N=4,即该多核系统共有4个转发核;设置整机缓存门限M=12000,表示该四个转发核的多核系统最多可以缓存12000个报文;队列门限B=100,即每个FIFO缓存队列至少能缓存100个报文;所述整机空闲缓存报文数S为整个多核系统剩余的空闲缓存空间。
图4是本实施例的流程图,以转发核1接收转发核2发送的数据报文为例对本发明的技术方案进行说明,如图4所示,本实施例包括以下步骤:
步骤401:转发核1接收到转发核2发送的数据报文X。
步骤402:判断队列D当前缓存报文数是否大于或等于队列门限B?
当队列D当前缓存报文数小于B时转向步骤403,当队列D当前缓存报文数大于或等于B时,转向步骤404;
所述队列D当前缓存报文数即为队列D中已缓存的等待处理的报文数。
步骤403:报文X入队队列D,队列D缓存报文数加1,整机空闲缓存报文数S不变。
基于步骤402的判断结果:队列D当前缓存报文数小于B,这里B=100。则不妨设队列D当前缓存报文数为80,则报文X入队队列D,队列D当前缓存报文数加1,即为80+1=81,由于报文X占用的是队列D自身固有的缓存资源,并非为队列D在队列门限B的基础上扩展的缓存资源,因此报文X并不影响整机空闲缓存报文数S的变化。
步骤404:判断整机空闲缓存报文数S是否大于或等于N?
基于步骤402的判断结果:队列D当前缓存报文数大于或等于B,其中B=100。这种情况下,表明队列D的缓存报文已经完全占用了队列D自身固有的资源,队列D通过扩展其缓存空间才可以成功缓存报文X,当整机空闲缓存报文数S大于或等于N时,说明整机空闲缓存资源充裕,可以对队列D进行扩展,此时转向步骤405;当整机空闲缓存报文数S小于N时,说明整机空闲缓存资源不存在,不能对队列D进行扩展,此时转向步骤406;
步骤405:报文X入队队列D,队列D缓存报文数加1,整机空闲缓存报文数S减1。
基于步骤404的判断结果,队列D当前缓存报文数大于或等于B,整机空闲缓存报文数S大于或等于N,其中B=100,N=4。不妨设队列D当前缓存报文数为110,整机空闲缓存报文数S为14。此时,报文X入队队列D,队列D当前缓存报文数加1,即110+1=111,由于报文X占用的是队列D在队列门限B的基础上扩展的缓存资源,因此报文X入队队列D导致整机空闲缓存报文数S减1,即14-1=13。
步骤406:丢弃报文。
基于步骤404的判断结果,队列D当前缓存报文数大于或等于B,且整机空闲缓存报文数S小于转发核数量N,其中B=100,N=4。不妨设队列D当前缓存报文数为150,整机空闲缓存报文数S为3,此时可以认为整机空闲缓存资源已经不存在,无法再为缓存队列扩展队列长度来缓存报文,因此将报文丢弃。
应用本发明方案,能够动态调节FIFO缓存队列的长度,从而提高多核系统的核间抗突发性能,有利于多核数据报文转发业务的推广应用。
方法实施例二
本实施例仍然用方法实施例一的数据参数,在方法实施例一的基础上新增加一个参数-整机拥塞门限C,其为正整数,且N≤C<M,当整机空闲缓存报文数S减小至整机拥塞门限C时,空闲缓存资源开始紧张,不能保证缓存所有报文,高优先级报文入队,低优先级报文丢弃。符合访问控制列表ACL的报文为高优先级报文,不符合ACL的报文为低优先级报文。新增加对入队报文的过滤操作,在当某两个转发核间传递的报文不可避免的要丢弃时能优先保证高优先级报文入队等候处理。本实施例中假设C=2000,即当整机空闲缓存报文数S下降至2000个报文时(包括2000),则该多核系统进入资源紧张状态。
图5是本实施例的流程图,以转发核1接收转发核2发送的数据报文为例对本发明的技术方案进行说明,如图5所示,本实施例包括以下步骤:
步骤501:转发核1接收到转发核2发送的数据报文X。
步骤502:判断队列D当前缓存报文数是否大于或等于队列门限B?
当队列D当前缓存报文数小于B时转向步骤503,当队列D当前缓存报文数大于或等于B时,转向步骤504;
所述队列D当前缓存报文数即为队列D中已缓存的等待处理的报文数。
步骤503:报文X入队队列D,队列D缓存报文数加1,整机空闲缓存报文数S不变。
本步骤作用同步骤403,在此不再详述。
步骤504:判断整机空闲缓存报文数S是否大于或等于N?
基于步骤502的判断结果:队列D当前缓存报文数大于或等于B,其中B=100。这种情况下,表明队列D的缓存报文已经完全占用了队列D自身固有的资源,队列D是否可以进行扩展用以缓存报文X,还需要判断整机空闲缓存报文数S是否大于或等于转发核数量N,如果是,则转向步骤505,否则转向步骤508。
步骤505:判断整机空闲缓存报文数S是否大于拥塞门限C?
基于步骤504的判断结果,队列D当前缓存报文数大于或等于B,且整机空闲缓存报文数S大于或等于转发核数量N,其中B=100,N=4。这种情况说明队列D的缓存报文已经完全占用了队列D自身固有的资源,且整机空闲缓存资源也存在为队列D扩展长度来缓存报文X的可能,但是整机空闲缓存资源是否紧张仍需判断。当整机空闲缓存报文数S小于或等于拥塞门限C时,空闲缓存资源进入紧张状态,此时不能保证报文X能被缓存,需要对报文X进行进一步过滤,转向步骤506;当整机空闲缓存报文数S大于拥塞门限C时,说明整机空闲缓存资源充裕,可以为队列D扩展长度来缓存报文X,此时转向步骤507。
步骤506:判断报文X是否符合访问控制列表ACL?
基于步骤505的判断结果:队列D当前缓存报文数大于或等于B,整机空闲缓存报文数S大于或等于N且小于或等于整机拥塞门限C,其中B=100,C=2000,N=4。不妨设S=100,队列D当前缓存报文数为110。这种情况下说明整机空闲缓存资源已经紧张,此时需要对等待入队的报文使能ACL过滤,对于符合ACL的报文定为高优先级报文,不符合ACL的报文定为低优先级报文,具体判断方法为本领域常用技术手段,在此不再详述。如果等待入队的报文是高优先级报文,则转向步骤507,如果等待入队的报文是低优先级报文,则转向步骤508。
步骤507:报文X入队队列D,队列D缓存报文数加1,整机空闲缓存报文数S减1。
基于步骤505的判断结果,队列D当前缓存报文数大于或等于B,整机空闲缓存报文数S大于整机拥塞门限C,其中B=100,C=2000。不妨设队列D当前缓存报文数为110,整机空闲缓存报文数S为2100。此时,报文X入队队列D,队列D当前缓存报文数加1,即110+1=111,由于报文X占用的是队列D在队列门限B的基础上扩展的缓存资源,因此报文X入队队列D导致整机空闲缓存报文数S减1,即2100-1=2009。
或者基于步骤506的判断结果,队列D当前缓存报文数大于或等于B,整机空闲缓存报文数S大于或等于N且小于或等于整机拥塞门限C,报文X符合ACL为高优先级报文,其中B=100,C=2000,N=4。不妨设队列D当前缓存报文数为110,整机空闲缓存报文数S为1901。此时,报文X入队队列D,队列D当前缓存报文数加1,即110+1=111,由于报文X占用的是队列D在队列门限B的基础上扩展的缓存资源,因此报文X入队队列D导致整机空闲缓存报文数S减1,即1901-1=1900。
步骤508:丢弃报文。
基于步骤504的判断结果,队列D当前缓存报文数大于或等于B,且整机空闲缓存报文数S小于转发核数量N,其中B=100,N=4。不妨设队列D当前缓存报文数为150,整机空闲缓存报文数S为3,此时可以认为整机空闲缓存资源已经不存在,无法再为缓存队列扩展队列长度来缓存报文,因此将报文丢弃;
或者基于步骤506的判断结果,队列D当前缓存报文数大于或等于B,整机空闲缓存报文数S大于或等于N且小于或等于整机拥塞门限C,报文X不符合ACL为低优先级报文,此时为了有效利用已经紧张的整机空闲缓存资源,丢弃低优先级报文。
应用本实施例方案,使每个缓存队列可以缓存的报文数在队列门限B和最大缓存报文数B+(M-B×N×(N-1)-(N-1))之间动态变化,从而提高多核系统中某一个或某几个转发核的抗突发性能;同时通过访问控制列表ACL的引入实现对入队报文的过滤,在当某两个转发核间传递的报文不可避免的要丢弃时能优先保证高优先级报文入队等候处理。
方法实施例三
方法实施例一和方法实施例二的方案是从报文入队的角度介绍本发明方案,本实施例则从报文出队的角度对本发明方案进行阐述。
图6是本实施例的流程图,以队列D中的报文出队为例对本发明的技术方案进行说明,如图6所示,本实施例包括以下步骤:
步骤601:队列D中的报文即将出队。
步骤602:判断队列D当前缓存报文数是否大于队列门限B?
本步骤中,报文Y出队之前首先需要判断队列D当前缓存报文数是否大于队列门限B?如果是,则转向步骤603;否则转向步骤605。
步骤603:队列D中的报文Y出队。
基于步骤602的判断结果:队列D当前缓存报文数大于队列门限B,其中B=100,即队列D当前处于已扩展状态。报文Y出队之前,不妨设队列D当前缓存报文数为120,整机空闲缓存报文数S为1000。报文Y出队后转向步骤604。
步骤604:队列D缓存报文数减1,整机空闲缓存报文数加1。
步骤603中报文Y出队之前队列D缓存报文数为120,大于队列门限B=100,报文Y出队后,队列D释放一个缓存报文空间,此时队列D的当前缓存报文数为120-1=119;由于队列D的缓存报文数处于已扩展状态,因此队列D释放的缓存报文空间应当还给整机空闲缓存报文,因此整机空闲缓存报文数S加1,即为1000+1=1001。
步骤605:队列D中的报文Y出队。
基于步骤602的判断结果:队列D当前缓存报文数小于或等于队列门限B,其中B=100,即队列D当前处于未扩展状态。报文Y出队之前,不妨设队列D当前缓存报文数为80,整机空闲缓存报文数S为1000。报文Y出队后转向步骤606。
步骤606:队列D缓存报文数减1,整机空闲缓存报文数不变。
步骤605中报文Y出队之前队列D缓存报文数为80,小于队列门限B=100,报文Y出队后,队列D释放一个缓存报文空间,此时队列D的当前缓存报文数为80-1=79;由于队列D的缓存报文数处于未扩展状态,因此其释放的缓存报文空间为队列D本身固有的缓存资源,不会引起整机空闲缓存报文数S的变化,因此S不变。
应用本实施例方案,使每个缓存队列的报文出队后自动释放缓存空间,如果报文出队前该队列的缓存报文数已经处于扩展状态,则将释放的缓存空间归还给整机空闲缓存报文数;如果报文出队前该队列的缓存报文数没有处于扩展状态,则释放的缓存空间为缓存队列自身的缓存资源。
针对上述方法,本发明还公开一种多核系统。本发明公开的设备如图7所示,包括:
收发单元701,用于转发核接收其它转发核的数据报文和发送数据报文;
处理单元702,用于转发核接收到报文时,判断对应的FIFO缓存队列当前缓存报文数是否小于队列门限,如果是,报文入队,所述FIFO缓存队列缓存报文数加1;否则继续判断整机空闲缓存报文数S是否大于或等于转发核数量N,如果是,报文入队,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1;如果整机空闲缓存报文数S小于转发核数量N,则丢弃报文;所述整机空闲缓存报文数S为多核系统剩余的空闲缓存空间;所述缓存队列的门限为B,且B为一个正整数。
如果与所述报文对应的FIFO缓存队列当前缓存的报文数大于或等于队列门限B,且整机空闲缓存报文数S大于或等于转发核数量N,还用于进一步判断整机空闲缓存报文数S是否大于整机拥塞门限C,如果是,报文入队;否则高优先级报文入队,低优先级报文丢弃,所述整机拥塞门限C为正整数,且N≤C<M;报文入队后,所述FIFO缓存队列缓存报文数加1,整机空闲缓存报文数S减1。
还用于报文出队时,如果所述报文所在的FIFO缓存队列当前缓存的报文数小于或等于队列门限B,所述FIFO缓存队列缓存报文数减1;如果所述报文所在的FIFO缓存队列当前缓存的报文数大于队列门限B,所述FIFO缓存队列缓存报文数减1,整机空闲缓存报文数S加1。
进一步用于判断入队报文是否符合访问控制列表ACL,如果是,则将该报文定为高优先级报文,否则将其定为低优先级报文;
存储单元703,设置有每个转发核与其它转发核一一对应的先进先出FIFO缓存队列用于接收其它转发核数据报文,其中,存储单元的容量为M,每个FIFO缓存队列设置有队列门限,各转发核FIFO缓存队列的门限之和小于M;还用于存储访问控制列表ACL。
计数单元704,用以计录各个缓存队列当前缓存报文数以及整机空闲报文数S。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。