具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,为本发明实施例一所提供的一种流量控制方法的结构示意图,该方法包括以下步骤:
步骤S101、第一CPU检测第二CPU所对应的当前运行参数是否达到预设的门限条件。
当第二CPU所对应的当前运行参数达到预设的门限条件时,转入步骤S102;
当第二CPU所对应的当前运行参数未达到预设的门限条件时,转入步骤S103。
需要特别指出的是,由于本发明实施例所提出的技术方案适应用在多核处理器的系统环境中,所以,可能存在一个第一CPU检测多个第二CPU的当前运行参数的情况,但是,这种情况需要建立相应的检测规则,否则,可能会导致各CPU之间循环检测,并可能导致一个业务通道被多个CPU共同控制。
基于上述情况,在实际应用中,一个第一CPU同时检测多个第二CPU的当前运行参数的情况很少得到应用,但此情况也应属于本发明的保护范围。
进一步的,在第一CPU检测第二CPU所对应的当前运行参数是否达到预设 的门限条件之前,还包括:
为每个业务设立一个业务通道,或,根据业务种类将同种业务划分为一个业务通道;根据业务所对应的紧急程度,为业务所对应的业务通道设置优先级。
在本步骤中,第一CPU检测第二CPU所对应的当前运行参数是否达到预设的门限条件具体采用以下几种方式:
方式一、第一CPU根据第二CPU的当前占用率统计信息检测第二CPU的当前占用率是否高于预设的占用率门限值。
在本方式中,占用率门限值通常是在保证系统正常运行的情况下,CPU占用率所能达到的最大值,由系统预先设定。该占用率门限值的具体取值的大小可以根据系统运行的需要设置,以使各CPU的不会因为当前占用率过高而影响处理性能。
方式二、第一CPU检测预设的第二CPU所对应的额外低优先级任务是否在预设的响应时间内未发生调度。
即,第一CPU通过定时器检测在第二CPU下预设的额外低优先级任务的调用情况。
在本方式中,额外低优先级任务是系统为了检测CPU运行情况而单独创建的一个低优先级的任务,并检测该任务的调用情况,在一定的时间内,如果该任务没有发生任何调用,则认为系统繁忙,没有空余资源来调用该任务,因此,需要降低系统的繁忙程度,降低该业务所对应的CPU的占用率,其中,上述一定的时间即为响应时间,响应时间通过定时器来设定,该响应时间的具体取值大小根据系统需求或具体应用场景的需要而设定。
方式三、第一CPU检测第二CPU所对应的一个或多个业务处理模块所对应的内存队列是否被写满。
在包含多核的设备中,可以根据具体应用需要,设置一个或多个业务处理模块,分别处理一种或多种的业务,如:请求处理模块、响应处理模块等,这些业务处理模块可以分别对应不同的CPU核心,具体的对应规则根据具体场景进行设置。
其中,在具体的处理过程中,各业务处理模块所接收到的报文可以是由驱动模块进行分配或转发的,这些报文在被业务处理模块接收到以后,可能会因为该业务处理模块被占用等原因,而不能立即被处理,因此,可以在内存中创建与该业务处理模块相对应的内存队列,将接收到的报文按照一定规则进行排列,业务处理模块按照相应的顺序进行处理。但是,由于内存空间的限制,分配给各业务处理模块的内存队列空间也是有限的,如果在内存队列已被写满的情况下,继续有报文发送过来,将不再加入内存队列,而是被直接丢弃。
步骤S102、第一CPU关闭当前运行的第二CPU所对应的最低优先级的业务通道的中断上送功能。
通过关闭最低优先级的业务通道的中断上送功能,使得该业务通道中即使再收到报文,也不会向对应的第二CPU上送中断,即不再通知第二CPU对报文进行接收,直至中断上送功能重新开放。这样的设置使得相应的CPU不会再处理被关闭中断上送功能的业务通道的报文,相当于关闭了CPU通过该业务通道接收报文的功能,在CPU业务处理量比较大的时候,优先处理高优先级业务,减少了因为低优先级业务占用CPU资源所导致的资源浪费。
本步骤可以具体包括:
当业务通道支持中断参数配置时,即该业务通道可以通过参数调整实现中断上送功能的开启或关闭,第一CPU配置当前运行的第二CPU所对应的最低优先级的业务通道的中断参数,通过更新该业务通道中的中断参数值,关闭该业务通道的中断上送功能,以使该业务通道在接收到报文时不向第二CPU上送中断,即不通知第二CPU接收该报文;
当业务通道不支持中断参数配置时,第一CPU忽略当前运行的第二CPU所对应的最低优先级的业务通道接收到报文的情况,从而,在该业务通道接收到报文时,不向第二CPU触发中断。
步骤S103、第一CPU打开当前关闭的第CPU所对应的最高优先级的业务通道的中断上送功能。
对于第二CPU来讲,当前可能存在多个被关闭的业务通道,而这些业务 通道也都被标识了各自的优先级,当步骤S101中判断第二CPU所对应的当前运行参数未达到预设的门限条件时,可以认为第二CPU还有资源可以处理其他业务,因此,可以在保持当前业务的基础上,开始其他业务,即开启其他被关闭的业务通道。出于避免同时打开多个业务通道导致业务处理量激增的情况的考虑,每次可以只打开一个业务通道,具体打开对象的选择是按照当前被关闭业务通道的优先级高低来进行选择的,本发明实施例中选择优先级最高的被关闭业务通道,为该业务通道打开中断上送功能,使得第二CPU可以处理该业务通道接收的报文。
本发明实施例的技术方案具有以下优点,因为采用了检测当前系统运行状态并根据状态控制流量的技术方案,从而,可以在不带来额外负载的情况下针对具体业务进行精细流量控制,达到了在流量损失最小的情况下避免CPU占用率过高,以及在流量过大超过业务处理能力时减少丢弃报文的效果。
对应上述的本发明实施例一所提出的方法,本发明实施例二提出了一种包含多核处理器的流量控制设备,其结构示意图如图2所示,该多核处理器至少包括第一CPU 1和第二CPU 2,其中,第二CPU 2对应一个或多个业务通道3,具体说明如下:
第一CPU 1,用于检测第二CPU 2所对应的当前运行参数是否达到预设的门限条件,并当第二CPU 2所对应的当前运行参数达到预设的门限条件时,关闭当前运行的第二CPU 2所对应的最低优先级的业务通道3的中断上送功能。
进一步的,第一CPU 1,还用于当第二CPU 2所对应的当前运行参数未达到预设的门限条件时,第一CPU 1打开当前关闭的第二CPU 2所对应的最高优先级的业务通道3的中断上送功能。
第二CPU 2,用于处理业务通道3上送的报文。
需要特别指出的是,由于本发明实施例所提出的技术方案适应用在多核处理器的系统环境中,所以,可能存在一个第一CPU1检测多个第二CPU2的当前运行参数的情况,但是,这种情况需要建立相应的检测规则,否则,可能会导致各CPU之间循环检测,并可能导致一个业务通道被多个CPU共同控制。
基于上述情况,在实际应用中,一个第一CPU1同时检测多个第二CPU2的当前运行参数的情况很少得到应用,但此情况也应属于本发明的保护范围。
具体的,第一CPU 1包括以下结构:
检测模块11,用于检测第二CPU 2所对应的当前运行参数是否达到预设的门限条件,具体包括一下子模块中的一种或多种:
第一检测子模块111,用于根据第二CPU 2的当前占用率统计信息检测第二CPU 2的当前占用率是否高于预设的占用率门限值;
第二检测子模块112,用于检测预设的第二CPU 2所对应的额外低优先级任务是否在预设的响应时间内未发生调度;
第三检测子模块113,用于检测第二CPU 2所对应的一个或多个业务处理模块所对应的内存队列是否被写满。
控制模块12,用于当检测模块11检测到第二CPU 2所对应的当前运行参数达到预设的门限条件时,关闭当前运行的第二CPU 2所对应的最低优先级的业务通道3的中断上送功能。
进一步的,控制模块12,还用于当检测模块11检测第二CPU2所对应的当前运行参数未达到预设的门限条件时,打开当前关闭的第二CPU 2所对应的最高优先级的业务通道3的中断上送功能。
并且,当检测模块11中包括第二检测子模块112时,检测模块11还包括:
定时器114,用于预设响应时间,以使第二检测模块112根据定时器114中预设的响应时间检测在第二CPU2下预设的额外低优先级任务的调用情况。
其中,额外低优先级任务是系统为了检测CPU运行情况而单独创建的一个低优先级的任务,并检测该任务的调用情况,在定时器114中预设的响应时间内,如果该任务没有发生任何调用,则认为系统繁忙,没有空余资源来调用该任务,因此,需要降低系统的繁忙程度,降低该业务所对应的CPU的占用率,其中,上述响应时间的具体取值大小根据系统需求或具体应用场景的需要而设定。
具体的,需要进一步指出的是,上述各子模块可以根据具体的实施场景需要而进行调整,这样的变化并不会影响本发明的保护范围。
对于第二CPU 2来讲,当前可能存在多个被关闭的业务通道3,而这些业务通道3也都被标识了各自的优先级,当第一CPU 1中的检测模块11判断第二CPU 2所对应的当前运行参数未达到预设的门限条件时,可以认为第二CPU 2还有资源可以处理其他业务,因此,可以在保持当前业务的基础上,开始其他业务,即开启其他被关闭的业务通道3。
出于避免同时打开多个业务通道3导致业务处理量激增的情况的考虑,每次可以只打开一个业务通道,具体打开对象的选择是按照当前被关闭业务通道3的优先级高低来进行选择的,本发明实施例中选择优先级最高的被关闭业务通道3,为该业务通道3打开中断上送功能,使得第二CPU 2可以处理该业务通道3接收的报文。
具体的,控制模块12具体包括以下模块中的一个或多个:
配置子模块121,用于当检测模块11检测到第二CPU 2所对应的当前运行参数达到预设的门限条件时,配置业务通道3的中断参数,使业务通道3在接收到报文时不向第二CPU 2上送中断;当检测模块11检测到第二CPU 2所对应的当前运行参数未达到预设的门限条件时,配置业务通道3的中断参数,使业务通道3在接收到报文时向第二CPU 2上送中断;
触发子模块122,用于当检测模块11检测到第二CPU 2所对应的当前运行参数达到预设的门限条件时,忽略业务通道3接收到报文的情况,不向第二CPU 2触发中断;当检测模块11检测到第二CPU 2所对应的当前运行参数未达到预设的门限条件时,在业务通道3接收到报文时,向第二CPU 2触发中断。
再进一步的,该多核处理器还包括:
业务通道建立单元4,用于为每个业务设立一个业务通道3,或,根据业务种类将同种业务划分为一个业务通道3,并根据业务所对应的紧急程度,为业务所对应的业务通道3设置优先级。
本发明实施例的技术方案具有以下优点,因为采用了检测当前系统运行状态并根据状态控制流量的设备,从而,可以在不带来额外负载的情况下针对具体业务进行精细流量控制,达到了在流量损失最小的情况下避免CPU占用率过高,以及在流量过大超过业务处理能力时减少丢弃报文的效果。
为了更清楚的描述本发明实施例所提出的技术方案,本发明实施例三结合具体的实施场景,提出了一种流量控制方法,检测当前系统运行状态并根据状态控制流量。
首先,本发明实施例所提出的是一种实时控制手段,基于业务通道的划分、控制技术实现对流量的控制。
进一步的,需要明确的是,上述的本发明实施例所提出的技术方案是基于多核处理器环境下的。多核处理器是指在一片处理器芯片中集成多个处理器核心。每个处理器核心都能单独地运行程序,使程序认为自己运行在一个独立的处理器上。与多台计算机不同,多核处理器的所有处理器核心可以使用同一条总线访问存储器,因此它们可以共用同一片内存;它们也可能共同享用该多核处理器所对应的所有硬件设备。这里讨论的多核处理器也包括超线程处理器的情况。
此外,需要假设该多核处理器具有内部通讯机制,各CPU之间可以互相通知事件、传递数据。并且,硬件设备(例如网络接口设备)接收到报文也可以通过消息方式上送,在本发明实施例中,这样的上送过程以通过业务通道向相应的CPU发送消息的方式来实现。
市场上各种嵌入式多核处理器,硬件的功能、可配置性不尽相同,例如核间通讯机制可能具有良好的可配置性和智能性,便于实现本发明实施例所提出的技术方案。但是本发明实施例所提出的技术方案不依赖于这些功能。只要是具有消息通讯机制的多核处理器,均可实现本发明所述的方案,只不过是软件硬件功能的划分界线略有差异、实现出来的性能有所不同而已。
具体的,上述的消息通讯机制具体为:面向嵌入式应用的多核处理器往往有核间消息通讯机制。其中一种典型的实现方法是每个处理器核管理若干个消息队列,处理器核之间可以发送消息。硬件设备(如网络接口、DMA等)也可以通过发送消息与处理器核心之间进行通信。例如,网络接口在接到业务报文后,发送一个消息通知相应的CPU核心进行业务接收。该CPU核心所对应的处理模块或应用软件可以用中断或轮询等方式使用消息队列,一般有 操作系统的情况下会通过中断方式。
基于上述的应用环境,可以实现本发明前述实施例所提出的技术方案,具体的实现流程如下:
进行核间的业务通道状态检测,并根据检测结果进行流量控制。
在本步骤之前,需要进行以下准备工作:设立业务通道,并为各业务通道设置相应的优先级。
在本发明实施例所提出的技术方案中,使用的流量控制手段是面向业务的,对不同的业务流量可以单独进行流量控制。为实现这一功能,首先要把业务划分成不同的业务通道。可以给每个业务设置一个通道,也可以根据报文的紧急程度不同,把多个业务划分到一个通道。具体如图3所示。
不同的通道可以指定不同的优先级,例如系统消息最高,关键业务其次,普通业务第三,进行流量控制时优先关闭低优先级通道。
其中,需要指出的是,图3中所示的业务通道划分只是本发明的一种优选实施例,在具体的应用中,可以根据需要增加业务通道的种类和数量,并更改相应的优先级设置,这样的变化并不影响本发明的保护范围。
基于上述设置,本步骤的实现需要基于业务通道上送中断的可配置性。当业务通道收到消息后,利用中断通知CPU收取。假设某一业务模块的接收能力已达到饱和,该内存队列再上送任何中断都只能浪费处理器的时间。
此时,可以单独移除一个通道,使这个通道有消息到来时不产生中断,不带来任何系统运行开销,从而消除该通道为CPU带来的资源负担,降低CPU负载。因此,本发明实施例所提出的技术方案需要中断上送功能具有可配置性,即可以指定某个业务通道在有消息到来时是否上送中断。
在大多数情况下,系统是通过具有中断上送功能的硬件向CPU上报中断,但在实际应用中,并不是每一种多核处理器架构的消息中断硬件都具有可选择性,即不是每一种多核处理器架构中都包含具有中断上送功能的硬件,因此,可以使用软件模拟的方法来实现本发明实施例所提出的技术方案,方法如下:
使用一个CPU检查另一个CPU的业务通道状态,如果有报文到达业务通 道,则通过中断模拟软件向该CPU触发一个中断操作,即通知该CPU接收该报文。从而,实现利用中断模拟软件触发的中断操作,向相应的CPU报告报文的到来。假如该业务通道被配置成关闭状态则中断模拟软件忽略该业务通道中报文到来的情况,在此种情况下,即使该业务通道中接收到报文,中断模拟软件也不会向CPU触发中断操作。
因检测业务通道、上送中断的处理耗时较少,所以一个CPU可以为多个CPU同时服务。这样上送中断会比通过具有中断上送功能的硬件直接上送中断的实现方法要慢一些。但它只会带来非常短暂的处理延时,而不会带来流量下降。。
假定硬件支持关闭单独业务通道的中断,则本发明实施例的流量控制方案不会带来额外的系统资源消耗,直接停止需要关闭的业务通道的中断上送功能即可。当硬件不提供这一功能支持时,可以通过软件方法来模拟。通过软件方法实现的情况下,可以通过其他CPU对本CPU的业务通道进行相关检测和终端上送功能的开启或关闭处理,把流量控制的开销从执行业务处理的本CPU转嫁给业务不繁忙的其他CPU,同样可以降低流量控制带来的性能损失。
进一步的,有了中断可配置性的基础,就可以针对不同的业务通道进行流量控制,不同的业务通道分别用于不同的消息类型,利用这种方法就可以实现针对不同消息的流量控制。
实时控制与定量控制不同,需要检测系统运行情况参数作为输入,把流量控制手段(移除中断上送能力)作为输出。因此不同的控制目的要检测不同的参数。下面根据具体的情况给出不同参数的测定示例,具体如下:
1、防止处理器占用率过高的基本的流量控制:
在网络设备中,CPU大部份时间是用来处理报文的。流量过大会造成CPU占用率过高,这种问题的基本特征是低优先级任务难以得到调度,因此可以将低优先级任务的调度情况作为控制的检测参数。具体通过以下方式实现:
对应需要进行流量控制的CPU,开启一个低优先级的任务;
利用定时器设置响应时间,在该响应时间内检查该任务的调度次数;
如果在该响应时间内该任务没有发生调度,则判断当前CPU业务处理繁忙,需要减少业务流量,因此,移除该CPU所对应的当前最低优先级业务通道的中断上送功能。
这样处理器占用率便会自然下降。当检测到该任务调度执行后,判断CPU业务处理不再繁忙,可以提高业务流量,从而,打开与该CPU对应的当前关闭的最高优先级的业务通道中断上送功能。
通过调整参数,如,如果对CPU业务处理量判断要求比较紧,可以将定时器所设置的响应时间设置的比较短,从而,在比较短的时间内,如果没有检测到该任务被调用,即可判断CPU业务繁忙,反之,则将将定时器所设置的响应时间设置的比较长,从而,只有在比较长的时间内,如果没有检测到该任务被调用,才会判断CPU业务繁忙。即可用极简单的软件机制将CPU占用率控制在可按受的范围。而且可以尽量减少流量控制对关键消息的影响。一般情况下,只需偶尔移除普通业务通道即可实现CPU占用率的控制。
当然,上述根据CPU业务繁忙程度进行流量控制的方案,也可利用操作系统的CPU占用率统计信息作为判断依据进行相应的流量控制,这样的变化并不影响本发明的保护范围。
这种控制是基于运行时CPU使用率的限流,可以将CPU占用率刚好保持在一个范围。不同于定量限流,不需要事先计算安全裕量,因此不至于丢弃过多的报文。
2、面向业务处理能力的控制:
CPU所对应的驱动程序接收到消息后送给业务处理模块进行处理。当某一种业务的瞬时流量非常大时会超过业务处理模块的处理能力,如果此时,再向该业务处理模块发送报文,该业务处理模块也会因为无法处理而将这些报文丢弃,因此,这时的报文收取操作将是无效操作,白白浪费了处理器的宝贵资源。而且流量超过业务处理模块的处理能力越多,这种资源浪费就越大。为控制这种情况,需要检测业务处理模块的处理能力状态。
例如,某一个业务处理模块用内存队列来缓存收到的消息进行处理,当消息瞬时流量过大时,驱动模块接收报文的速度远大于业务处理模块的处理 速度,内存队列会被写满。流量控制软件可以把内存队列的使用情况作为控制输入参数。当检查到内存队列被存满时,可暂时将该内存队列所对应的通道的中断上送功能关闭,当业务处理模块处理掉当前队列中的消息,释放了足够的内存队列空间来接纳新消息时,可马上打开该内存队列所对应的通道的中断上送功能,后面的消息可以立即被收取。这样的控制可以恰好使业务处理模块发挥到最大处理执行效能,最大程度地减少了处理器因丢弃报文而浪费宝贵的系统资源。
本发明实施例的技术方案具有以下优点,因为采用了检测当前系统运行状态并根据状态控制流量的技术方案,从而,可以在不带来额外负载的情况下针对具体业务进行精细流量控制,达到了在流量损失最小的情况下避免CPU占用率过高,以及在流量过大超过业务处理能力时减少丢弃报文的效果。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以可借助软件加必要的通用硬件平台的方式来实现基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。