使用多核CPU处理QoS业务的方法、装置和设备
技术领域
本发明涉及通信技术领域,尤其涉及一种使用多核CPU(Center ProcessingUnit,中央处理单元)处理QoS(Quality of Service,服务质量)业务的方法、装置和设备。
背景技术
随着信息产业的发展,网络宽带化已经成为主流。尤其是近年来宽带城域网的发展,使以太网形式的上连接口也快速普及。这种趋势对路由器性能提出了更高的要求,而与路由器性能表现密切相关的业务就是QoS。QoS业务应用于流量转发的过程中,其核心功能是“流量调度”。为了实现该功能,QoS需要使用FIFO(First in First out,先入先出)队列,其示意图如图1所示。QoS业务有两个核心动作:即入队列和出队列,可以理解为QoS业务的接收和发送。其中,QoS入队列又分为两种情况:被动入队列和主动入队列。所谓被动入队列,是指设备在接口只配置了默认的缓存队列,没有配置其它QoS策略,流量直接经由该接口转发,当流量过大导致接口转发失败时,转发失败的流量将进入默认的缓存队列。所谓主动入队列,是指设备在接口上配置了QoS策略,如优先级队列等,当流量需要经由该接口转发时,将根据配置的策略主动将流量分配到接口上相应的QoS队列。
传统路由器通常采用单核CPU作为转发引擎和业务处理引擎,并且拥有丰富的业务单板,可以满足客户不同的业务需求。如果想提高路由器的性能,其唯一的途径就是提高CPU的性能。在单核CPU的性能几乎已经发展到极限的情况下,采用日趋成熟的多核CPU成为了进一步提高性能的一种可能方法。在多核CPU中包括有多个Core(核),每个Core负责完成一个传统CPU的功能。
于是,如何在多核CPU平台上实现QoS业务的高性能成为了一个新的课题。为了实现QoS业务的高性能,需要保证QoS业务能够并发出队列,其中队列的收发均衡是关键。
现有技术中提供了一种利用多个CPU Core进行QoS队列处理的方法。其中入队列的操作如图2所示,多个CPU Core并发执行QoS入队列的操作。具体的,CPU Core向QoS队列写入数据的过程如下:当设备接口接收到需要处理的流时,根据接收的流的特征,将流分发到各个CPU Core。各个CPU Core在对接收到的流中的数据包进行处理之后,根据预先配置的策略,将数据包分配到对应的QoS队列,具体分为被动入队列和主动入队列两种情况。
此时由于QoS业务的接收速度很快,而QoS队列的大小有限,因此需要很高的QoS业务发送速度以保证收发均衡。为了实现该要求,如图3所示,现有技术中若一个设备接口的QoS队列中存在数据包,则该设备接口发动所有的CPU Core并发出队列。所谓的QoS出队列,是指CPU Core将QoS队列中的数据包取出经由设备接口转发出去。QoS出队列操作有两个终止条件:一、连续出队列,QoS队列中的数据包全部清空;二、QoS出队的速度超过接口速度之后,出队失败。如果遇到第二种情况,就等待CPU Core下次继续触发QoS出队列操作。
现有技术中存在的问题在于,即使设备上某接口的流量很少,也要发动所有的CPU Core对该接口进行并发处理。此时,所有的CPU Core都被一个流量很少的接口占用后,则不能去执行其它任务,无疑是对CPU Core资源的巨大浪费。当存在很多设备接口时,CPU Core不仅将不堪重负,设备接口之间的相互影响也很明显。
发明内容
本发明提供一种使用多核CPU处理QoS业务的方法、装置和设备,用于提高现有多核CPU对QoS业务的处理效率和处理性能。
为达到上述目的,本发明提供一种使用多核CPU处理QoS业务的方法,包括以下步骤:
获取事件缓存队列中存在事件的CPU Core;
根据所述CPU Core的事件缓存队列中存在的事件,获取所述CPU Core处理后的流转发出去所使用的接口;
调度所述CPU Core对所述接口中的QoS队列进行出队列操作。
其中,所述获取事件缓存队列中存在事件的CPU Core前还包括:
为每个CPU Core建立事件缓存队列;
当某个CPU Core进行流处理时,每处理流中的一个数据包,就在该CPUCore的事件缓存队列中写入一个事件。
其中,所述事件的内容包括:所述CPU Core处理后的流转发出去所使用的接口。
其中,对于所述接口中的QoS队列进行出队列操作的CPU Core数量,等于对所述接口中的QoS队列进行入队列操作的CPU Core数量。
其中,所述调度所述CPU Core对所述接口中的QoS队列进行出队列操作后,还包括:
对所述接口中的QoS队列的出队列操作终止时,删除出队列操作终止CPU Core的事件缓存队列中与所述接口对应的一事件。
本发明还提供一种使用多核CPU处理QoS业务的装置,包括:
事件缓存队列单元,用于为每个CPU Core建立事件缓存队列;
第一获取单元,用于获取所述事件缓存队列单元为每个CPU Core建立的事件缓存队列中存在事件的CPU Core;
第二获取单元,用于根据所述第一获取单元获取的CPU Core的事件缓存队列中存在的事件,获取所述CPU Core处理后的流转发出去所使用的接口;
调度单元,用于调度所述第一获取单元获取的CPU Core对所述第二获取单元获取的接口中的QoS队列进行出队列操作。
其中,还包括:
事件添加单元,用于当某个CPU Core进行流处理时,每处理流中的一个数据包,就在所述事件缓存队列单元中所述CPU Core的事件缓存队列中写入一个事件;所述事件的内容包括:所述CPU Core处理后的流转发出去所使用的接口
其中,还包括:
事件删除单元,用于当所述第一获取单元获取的CPU Core对所述第二获取单元获取的接口中的QoS队列进行出队列操作终止时,在所述事件缓存队列单元中,删除出队列操作终止CPU Core的事件缓存队列中与所述接口对应的一事件。
本发明还提供一种使用多核CPU处理QoS业务的装置,包括:多个CPUCore、设备接口模块以及调度模块;
所述CPU Core,用于接受所述调度模块的调度对所述设备接口模块维护的QoS队列进行出队列操作;
所述调度模块,用于获取事件缓存队列中存在事件的CPU Core;根据所述CPU Core的事件缓存队列中存在的事件,获取所述CPU Core处理后的流转发出去所使用的设备接口模块;调度所述CPU Core对所述设备接口模块中的QoS队列进行出队列操作;
设备接口模块,用于维护接口的QoS队列。
其中,所述调度模块进一步包括:
事件缓存队列单元,用于为每个CPU Core建立事件缓存队列;
第一获取单元,用于获取所述事件缓存队列单元为每个CPU Core建立的事件缓存队列中存在事件的CPU Core;
第二获取单元,用于根据所述第一获取单元获取的CPU Core的事件缓存队列中存在的事件,获取所述CPU Core处理后的流转发出去所使用的接口;
调度单元,用于调度所述第一获取单元获取CPU Core对所述第二获取单元获取的接口中的QoS队列进行出队列操作。
与现有技术相比,本发明具有以下优点:
通过使用本发明提供的方法和装置,提供了一种在多核CPU上实现QoS业务并发出队列的方法。方法的核心思想是合理高效的使用CPU Core资源——CPU Core资源的使用与设备接口的数量无关,只与流的多少有关。当一个或者多个接口有多条流经由多个CPU Core进行处理时,就使用所述多个CPUCore对这一个或者多个接口进行QoS出队列操作。对于任意时刻的任一接口,对该接口中的QoS队列进行出队列操作的CPU Core数量等于对该接口中的QoS队列进行入队列操作的CPU Core数量。本发明实现了接口中QoS队列的收发均衡,且提高了多核CPU对QoS业务的处理效率,提升了多核CPU设备的整体性能。
附图说明
图1是现有技术中QoS队列的示意图;
图2是现有技术中使用多个CPU Core并发执行QoS入队列的示意图;
图3是现有技术中使用多个CPU Core并发执行QoS出队列的示意图;
图4是本发明中使用多核CPU处理QoS业务的方法流程图;
图5是本发明中CPU Core的事件缓存队列的示意图;
图6A是本发明应用场景中T1时刻多个CPU Core并发执行QoS出队列操作的示意图;
图6B是本发明应用场景中T2时刻多个CPU Core并发执行QoS出队列操作的示意图;
图6C是本发明应用场景中T3时刻多个CPU Core并发执行QoS出队列操作的示意图;
图7是本发明中使用多核CPU处理QoS业务的装置示意图。
具体实施方式
本发明提供一种使用多核CPU处理QoS业务的方法,其核心思想在于:使得CPU Core资源的使用与设备接口的数量无关,而只与流的多少有关。当一个或者多个接口有多条流经由多个CPU Core进行处理时,就使用所述多个CPU Core对这一个或者多个接口进行QoS出队列操作。对于任意时刻的任一接口,对该接口中的QoS队列进行出队列操作的CPU Core数量等于对该接口中的QoS队列进行入队列操作的CPU Core数量,从而实现QoS队列的收发均衡,从而合理高效的使用CPU Core资源。
具体的,本发明中一种使用多核CPU处理QoS业务的方法如图4所示,包括以下步骤:
步骤s101、为每个CPU Core建立事件缓存队列,当CPU Core进行流处理时,在该CPU Core的事件缓存队列中写入事件。
具体的,事件缓存队列的示意图如图5所示。对于需要处理的每条流,每处理流中的一个数据包,就向该CPU Core的事件缓存队列中写入一个事件;该事件内容包括:该CPU Core所处理的流转发出去所使用的接口。对某一CPUCore而言,其在事件缓存队列中记录的事件个数与其处理的数据包个数是相等的,是一一对应关系。
步骤s102、对于事件缓存队列中存在事件的CPU Core,获取该CPU Core处理后的流转发出去所使用的接口。
具体的,可以采用轮询的方式对CPU Core的事件缓存队列进行监视。当某CPU Core的事件缓存队列中存在事件时,获取该CPU Core处理后的流转发出去所使用的接口。
步骤s103、调度该CPU Core对该接口中的QoS队列进行出队列操作。
具体的,某一CPU Core对流进行处理时,就使用该CPU Core对其自身处理后的流转发出去所使用的接口进行出队列操作。即,对于特定的接口,如果只有一个CPU Core使用该接口转发流量,就调度该CPU Core对该接口中的QoS队列进行出队列操作;如果有多个CPU Core使用该接口转发流量,就调度所述多个CPU Core对该接口中的QoS队列进行出队列操作。该步骤保证了任意时刻对一接口的QoS队列进行出队列操作的CPU Core数量等于对该接口的QoS队列进行入队列操作的CPU Core数量,从而实现任一接口中QoS队列的收发均衡,同时避免了无条件发动所有CPU Core对同一接口并发出队列所带来的资源浪费。
具体的,设备的每个接口上包括一个或者多个QoS队列,且每个接口上都配置有一个QoS出队列函数。该QoS出队列函数负责对接口上包括的一个或者多个QoS队列按照策略进行出队列操作。具体的,CPU Core对特定的QoS队列进行的出队列操作通过调用该QoS队列所属接口的QoS出队列函数进行。QoS出队列函数有两个终止条件:一、连续出队列,直至QoS队列中的数据包全部清空;二、QoS出队列的速度超过接口速度,出队列失败。如果遇到第二种情况,本次出队列终止,等待CPU Core下次调用QoS出队列函数继续触发QoS出队列操作。
当多个CPU Core对同一个QoS队列进行出队列操作时,所述QoS队列对于所述多个CPU Core来说是临界资源。此时,所述QoS出队列函数在多个CPU Core上并发运行,自行协调所述多个CPU Core将所述QoS队列中的数据包通过设备接口转发出去。该步骤中需要说明的是,当所述QoS出队列函数在所述多个CPU Core上并发运行时,所述多个CPU Core平等竞争所述QoS队列中的数据包。当其中某个CPU Core赢得竞争并获取到所述QoS队列中的数据包时,便通过所述设备接口转发出去。即不需要保证通过某一CPUCore进入所述QoS队列的数据包在出队列时仍由该CPU Core转发出去。
步骤s104、当该CPU Core触发的QoS出队列操作每终止一次,就将该CPUCore的事件缓存队列中与该接口对应的一个事件删除。
具体的,CPU Core在调用QoS出队列函数进行QoS出队列操作时,尽力一次将QoS队列中尽量多的数据包从接口中转发出去。该出队列操作每终止一次,就将出队列操作终止CPU Core的事件缓存队列中与该接口对应的一个事件删除,这里的对应事件是指CPU Core在将数据包进行该接口中QoS队列的入队列操作时在该CPU Core的事件缓存队列中所添加的事件。当接口的QoS队列全部被从接口中转发出去后,CPU Core的事件缓存队列中还可能存在若干事件,此时调度该CPU Core对该接口的QoS队列进行出队列的操作为对空队列的操作,对空队列的出队列操作每进行一次,CPU Core的事件缓存队列中的事件就被删除一个,直至CPU Core的事件缓存队列中的事件全部被删除,则停止对该CPU Core的调用。
以下结合一具体的应用场景,描述本发明中使用多核CPU处理QoS业务的具体实施方式。假设包括一多核CPU包括4个CPU Core,分别为CPUCore1、CPU Core2、CPU Core3以及CPU Core4。QoS队列处理中所使用的设备的接口为接口1,接口1上包括两个QoS队列,分别为高优先级的QoS队列L1,以及低优先级的QoS队列L2。即接口1将采用主动入队列方式。
在某一时刻T1,如图6A所示,CPU Core1以及CPU Core2分别有流需要处理,且设CPU Core1处理后的流进入接口1的QoS队列L1,CPU Core2处理后的流进入接口1的QoS队列L2;则在CPU Core1以及CPU Core2的事件缓存队列中分别写入与接口1对应的事件。根据写入的事件,可以调度CPU Core1以及CPU Core2对该接口1中的QoS队列进行出队列操作。此时CPU Core3以及CPU Core4或者没有进行流处理,或者处理后的流没有进入接口1中的QoS队列,因此不调度CPU Core3以及CPU Core4对接口1进行出队列操作。在出队列操作中,CPU Core1以及CPU Core2优先对高优先级的QoS队列L1进行出队列操作,出队列过程中可以无需对出队列的内容在入队列时是来自CPU Core1或CPU Core2进行区分,由CPU Core1以及CPUCore2协调完成出队列即可。
在T1后的某一时刻T2,如图6B所示,由CPU Core1加入接口1的QoS队列L1的流全部处理完成(假设此时CPU Core1的事件缓存队列中仍存在事件);CPU Core2的流仍在处理且其处理后的流仍进入QoS队列L2。另外,设CPU Core3也开始进行流处理且其处理后的流进入了QoS队列L2,则同时在CPU Core3的事件缓存队列中写入事件。根据写入的事件,可以调度CPUCore1、CPU Core2以及CPU Core3对该接口1中的QoS队列进行出队列操作,因为此时接口1的高优先级队列L1为空,因此CPU Core1、CPU Core2以及CPU Core3对该接口1中的QoS队列L2进行出队列操作。在出队列操作中,可以无需对出队列的内容在入队列时是来自CPU Core2或CPU Core3,由CPUCore1、CPU Core2以及CPU Core3协调完成出队列操作即可。
在T2后的某一时刻T3,如图6C所示,此时接口1的QoS队列L2的出队列操作处理也已经完成,同时CPU Core1、CPU Core2以及CPU Core3各自的事件缓存队列中的事件也已经被清空,因此不再继续调度CPU Core1、CPU Core2以及CPU Core3对接口1进行QoS出队列操作。
再以另一应用场景为例,假设CPU Core1以及CPU Core2分别有流需要处理,且设CPU Core1处理后的流进入接口1的QoS队列L1,CPU Core2处理后的流进入接口1的QoS队列L2。假设CPU Core1对接口1上的队列L1入队列100个数据包,则事件缓存队列中有100个事件;CPU Core2对接口1上的队列L2入队列1000个数据包,则事件缓存队列中有1000个事件;且CPU Core 1和CPUCore 2不再进行入队列操作。则CPU Core1和CPU Core2会协同对该接口1进行出队列操作,假设某一时刻L1、和/或L2中仍存在数据包的情况下,CPU Core1的事件缓存队列中的100个事件已经被删除完毕,则停止调度CPU Core1对接口1的出队列操作,由CPU Core2继续余下的接口1的出队列操作。
本发明还提供一种使用多核CPU处理QoS业务的装置,如图7所示,包括:
事件缓存队列单元10,用于为每个CPU Core建立事件缓存队列;
第一获取单元20,用于获取事件缓存队列单元10为每个CPU Core建立的事件缓存队列中存在事件的CPU Core;
第二获取单元30,用于根据第一获取单元20获取的CPU Core的事件缓存队列中存在的事件,获取CPU Core处理后的流转发出去所使用的接口;
调度单元40,用于调度第一获取单元20获取的CPU Core对第二获取单元30获取的接口中的QoS队列进行出队列操作。
另外,还包括:
事件添加单元50,用于当某个CPU Core进行流处理时,每处理流中的一个数据包,就在事件缓存队列单元10中该CPU Core的事件缓存队列中写入一个事件;所述事件的内容包括:所述CPU Core处理后的流转发出去所使用的接口
事件删除单元60,用于当第一获取单元20获取的CPU Core对第二获取单元30获取的接口中的QoS队列进行出队列操作终止时,在事件缓存队列单元10中,删除出队列操作终止CPU Core的事件缓存队列中与该接口对应的一个事件。
本发明还提供一种使用多核CPU处理QoS业务的设备,包括:多个CPUCore、设备接口模块以及调度模块;其中:
CPU Core,用于接受所述调度模块的调度对所述设备接口模块维护的QoS队列进行出队列操作。
调度模块,用于获取事件缓存队列中存在事件的CPU Core;根据所述CPU
Core的事件缓存队列中存在的事件,获取所述CPU Core处理后的流转发出去所使用的设备接口模块;调度所述CPU Core对所述设备接口模块中的QoS队列进行出队列操作。需要说明的是,该调度模块可能是独立于各CPU Core之外的单独控制单元,也可能是分散运行在各CPU Core内部,是每个CPUCore内部的一部分。
设备接口模块,位于设备的特定接口上,用于维护该接口的QoS队列,每个接口上包括一个或者多个QoS队列。设备接口模块在接口配置一个QoS出队列函数,通过该QoS出队列函数,对接口上包括的一个或者多个QoS队列按照策略进行出队列操作。在任意时刻,对该设备接口模块维护的QoS队列进行出队列操作的CPU Core数量等于对该设备接口模块维护的QoS队列进行入队列操作的CPU Core数量。
该装置中调度模块的结构与上述图7中描述的装置的结构相同,在此不进行重复描述。
通过使用本发明提供的方法和装置,提供了一种在多核CPU上实现QoS业务并发出队列的方法,在某个CPU Core对流进行处理时,使用该CPU Core对其处理后流转发出去所使用的接口进行出队列操作,从而对于任意时刻的任一接口,对该接口中的QoS队列进行出队列操作的CPU Core数量等于对该接口中的QoS队列进行入队列操作的CPU Core数量。本发明实现了接口中QoS队列的收发均衡,且提高了多核CPU对QoS业务的处理效率,提升了多核CPU设备的整体性能。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台设备执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。