发明内容
本发明实施例提供一种调整网络设备资源配置的方法及装置,以解决报文接收线程和业务处理线程之间的CPU资源占用问题,减少CPU资源的浪费。
第一方面,本发明实施例提供一种调整网络设备资源配置的方法,包括:
网络设备在操作系统初始化时,所述网络设备的操作系统内核将M个报文接收线程的工作状态设置为休眠状态、将N个报文接收线程的工作状态设置为非休眠状态,M和N均为自然数,M大于N,M与N的和是一固定值;
在检测周期内,所述操作系统内核统计所有非休眠状态的报文接收线程的空闲计数值的总和,所述空闲计数值是指一个非休眠状态的报文接收线程在一个所述检测周期内未接收到数据包的次数;
所述操作系统内核根据所述空闲计数值的总和,调整报文接收线程的工作状态。
结合第一方面,在第一方面的第一种可能的实现方式中,所述网络设备的操作系统内核将M个报文接收线程的工作状态设置为休眠状态、将N个报文接收线程的工作状态设置为非休眠状态,包括:
所述操作系统内核分别为所述M个报文接收线程中的每个报文接收线程创建对应的信号量和休眠标识,所述休眠标识用于指示报文接收线程处于休眠状态,并获取所述操作系统内核创建的信号量,陷入内核;
所述操作系统内核分别为所述N个报文接收线程中的每个报文接收线程创建信号量和非休眠标识,所述非休眠标识用于指示报文接收线程处于非休眠状态,并在有数据包到来时接收所述数据包,无数据包到来时将所述报文接收线程的空闲计数值进行加一操作。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述操作系统内核根据所述空闲计数值的总和,调整报文接收线程的工作状态,包括:
所述操作系统内核在一个处理器核心的所述检测周期内根据所述空闲计数值的总和,调整报文接收线程的工作状态。
结合第一方面、第一方面的第一种或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述检测周期为所述操作系统的一个时隙中断时间的整数倍。
结合第一方面至第一方面的第三种可能的实现方式中任一项所述的方法,在第一方面的第四种可能的实现方式中,所述操作系统内核根据所述空闲计数值的总和,调整报文接收线程的工作状态,包括:
如果所述空闲计数值的总和大于第一门限,所述操作系统内核在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行休眠处理;
如果所述空闲计数值的总和小于第二门限,所述操作系统内核在所有处于休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行唤醒处理;
将所有非休眠状态的报文接收线程的空闲计数值清零。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述操作系统内核在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行休眠处理,包括:
所述操作系统内核获取所述被选择的报文接收线程的信号量,并将所述被选择的报文接收线程的非休眠标识改为休眠标识;
所述操作系统内核在所有处于休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行唤醒处理,包括:
所述操作系统内核将所述被选择的报文接收线程的休眠标识改为非休眠标识,并将所述被选择的报文接收线程的信号量释放。
第二方面,本发明实施例提供一种调整网络设备资源配置的装置,包括:
设置模块,用于在网络设备操作系统初始化时,将M个报文接收线程的工作状态设置为休眠状态、将N个报文接收线程的工作状态设置为非休眠状态,M和N均为自然数,M大于N,M与N的和是一固定值;
统计模块,用于在检测周期内,统计所有非休眠状态的报文接收线程的空闲计数值的总和,所述空闲计数值是指一个非休眠状态的报文接收线程在一个所述检测周期内未接收到数据包的次数;
调整模块,用于根据所述统计模块得到的所述空闲计数值的总和,调整报文接收线程的工作状态。
结合第二方面,在第二方面的第一种可能的实现方式中,所述设置模块用于:
分别为所述M个报文接收线程中的每个报文接收线程创建对应的信号量和休眠标识,所述休眠标识用于指示报文接收线程处于休眠状态,并获取所述操作系统内核创建的信号量,陷入内核;
分别为所述N个报文接收线程中的每个报文接收线程创建信号量和非休眠标识,所述非休眠标识用于指示报文接收线程处于非休眠状态,并在有数据包到来时接收所述数据包,无数据包到来时将所述报文接收线程的空闲计数值进行加一操作。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述调整模块用于:
在一个处理器核心的所述检测周期内根据所述空闲计数值的总和,调整报文接收线程的工作状态。
结合第二方面、第二方面的第一种或第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述检测周期为所述操作系统的一个时隙中断时间的整数倍。
结合第二方面至第二方面的第三种可能的实现方式中任一项所述的装置,在第二方面的第四种可能的实现方式中,所述调整模块用于:
如果所述空闲计数值的总和大于第一门限,在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行休眠处理;
如果所述空闲计数值的总和小于第二门限,在所有处于休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行唤醒处理;
将所有非休眠状态的报文接收线程的空闲计数值清零。
结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述调整模块还用于:
获取所述被选择的报文接收线程的信号量,并将所述被选择的报文接收线程的非休眠标识改为休眠标识;
所述调整模块还用于:
将所述被选择的报文接收线程的休眠标识改为非休眠标识,并将所述被选择的报文接收线程的信号量释放。
本发明实施例提供的调整网络设备资源配置的方法及装置,利用报文接收线程在一个检测周期内没有报文接收的次数反映报文接收线程的空闲程度,进而反映流量的大小,通过操作系统内核在一个检测周期内统计运行状态的报文接收线程的空闲计数值的总和,在达到休眠门限或唤醒门限时进行报文接收线程的工作状态调整,从而可根据流量大小动态调整报文接收线程的数量,释放掉的CPU资源可以用于业务处理线程,提高了CPU资源的利用率。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明调整网络设备资源配置的方法实施例一的流程图,如图1所示,本实施例的方法可以包括:
S101、网络设备操作系统初始化时,网络设备的操作系统内核将M个报文接收线程的工作状态设置为休眠状态、将N个报文接收线程的工作状态设置为非休眠状态,M和N均为自然数,M大于N,M与N的和是一固定值。
具体来说,S101具体为:操作系统内核根据预先设置的M和N,分别为M个报文接收线程中的每个报文接收线程创建对应的信号量和休眠标识,休眠标识用于指示报文接收线程处于休眠状态,并获取操作系统内核创建的信号量,陷入内核;操作系统内核分别为N个报文接收线程中的每个报文接收线程创建信号量和非休眠标识,非休眠标识用于指示报文接收线程处于非休眠状态,并在有数据包到来时接收数据包,无数据包到来时将报文接收线程的空闲计数值进行加一操作。例如,一个多核CPU的所有处理器核心(core)上都绑定报文接收线程,设置其中3个core上的报文接收线程处于非休眠状态,其余的core上的报文接收线程都处于休眠状态,具体设置是例如非休眠标识为“0”指示非休眠状态,休眠标识为“1”指示休眠状态,操作系统初始化时,为其中3个core上的报文接收线程创建信号量和非休眠标识为“0”,非休眠标识为“0”的报文接收线程的信号量为释放状态,为其余的core上的报文接收线程创建信号量和休眠标识为“1”,休眠标识为“1”的报文接收线程的信号量为占用状态。
每个报文接收线程在接收数据包之前,根据操作系统内核创建的休眠标识(例如为“1”)判断报文接收线程处于休眠状态时,获取操作系统内核创建的信号量,陷入内核;在判断报文接收线程处于非休眠状态(例如为“0”)时,则通过查询硬件状态进行收包处理,比如查询CPU的硬件接收队列中报文个数,在有数据包到来时接收数据包,无数据包到来时将报文接收线程的空闲计数值进行加一操作。
S102、在检测周期内,操作系统内核统计所有非休眠状态的报文接收线程的空闲计数值的总和,空闲计数值是指一个非休眠状态的报文接收线程在一个检测周期内未接收到数据包的次数。
S103、操作系统内核根据空闲计数值的总和,调整报文接收线程的工作状态。
具体来说,在多核CPU中,每个core要处理一次时隙中断,可以是操作系统内核在一个core的检测周期内根据空闲计数值的总和调整报文接收线程的工作状态。不用在每一个core的检测周期内都进行处理,这样处理效率较高。其中,检测周期例如可以为操作系统的一个时隙中断时间整数倍。
S103具体可以为:
S103a、空闲计数值的总和大于第一门限时,操作系统内核在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行休眠处理。选择的依据可以是随机选择,也可以是根据core标识选择。操作系统内核对被选择的报文接收线程进行休眠处理可以为:操作系统内核获取被选择的报文接收线程的信号量,并将被选择的报文接收线程的非休眠标识改为休眠标识,例如将非休眠标识“0”置为“1”。
S103b、空闲计数值的总和小于第二门限时,操作系统内核在所有处于休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行唤醒处理。选择的依据可以是随机选择,也可以是根据core标识选择。操作系统内核对选择的报文接收线程进行唤醒处理可以为:操作系统内核将被选择的报文接收线程的休眠标识改为非休眠标识,例如将休眠标识“1”置为“0”,并将被选择的报文接收线程的信号量释放。
其中,第一门限或第二门限可以通过实际测试得到一个合适的值。比如在一个检测周期内,将所有报文接收线程设置为全部运行状态,流量最大时统计到所有报文接收线程的空闲计数值为A,流量最小时统计到所有报文接收线程的空闲计数值为B,那么第一门限可以设置为B*80%,第二门限可以设置为2*A,具体的比例可以根据硬件的缓存能力、单个报文接收线程的处理能力以及检测周期的长短进行调整。
S103c、将所有非休眠状态的报文接收线程的空闲计数值清零。下一个检测周期重新计算。
举例说明,报文接收线程和内核之间直接共享数据,共享数据所在的内存,映射为相同的物理地址,报文接收线程运行在用户态,只能访问用户空间的虚拟内存地址,内核运行在内核态,访问的是内核空间的虚拟内存地址,休眠标识和空闲计数值需要报文接收线程和内核共享,需要按下面的方法进行物理地址映射:
报文接收线程访问休眠标识和空闲计数值虚拟内存地址为A,对应的物理内存地址(实际的内存颗粒)为C,内核访问休眠标识和空闲计数值的虚拟内存为B,对应的物理内存地址为C。
图2为本发明调整网络设备资源配置的方法实施例一中的硬件结构示意图,本实施例的方法运行在CPU上,进行报文接收线程的动态调整。
还需说明的是,在一个检测周期内,如果有流量的突发,没有新的报文接收线程被唤醒,需要硬件缓存足够缓存突发的报文,当硬件缓存有限时,可以调整处于非休眠状态(运行状态)的报文接收线程的个数,也可以调整休眠唤醒的策略,如在一个时隙中断时间唤醒多个报文接收线程。
本实施例提供的调整网络设备资源配置的方法,利用报文接收线程在一个检测周期内没有报文接收的次数反映报文接收线程的空闲程度,进而反映流量的大小,通过操作系统内核在一个检测周期内统计运行状态的报文接收线程的空闲计数值的总和,在达到休眠门限或唤醒门限时进行报文接收线程的工作状态调整,从而可根据流量大小动态调整报文接收线程的数量,释放掉的CPU资源可以用于业务处理线程,提高了CPU资源的利用率。
下面结合图3和图4来详细说明报文接收线程的循环流程以及内核的处理流程,图3为本发明调整网络设备资源配置的方法实施例一中报文接收线程的循环流程图,如图3所示,其中,休眠标识以“0”和“1”为例,包括:
S201、线程循环开始。
S202、判断休眠标识是否等于“1”。若是执行S203,若否执行S204。
S203、获取操作系统内核创建的信号量,陷入内核。
S204、通过查询硬件状态进行收包处理。
S205、有数据包到来时接收数据包。
S206、无数据包到来时将报文接收线程的空闲计数值进行加一操作。
在一个检测周期内,线程循环执行S204~S206。每执行一次,如果没有接收报文,则将计数值增1。例如一个检测周期可以执行多次循环,假设1个检测周期内,报文接收线程执行了10次循环,其中2次接收到了报文,8次未接收到报文,则该报文接收线程的空闲计数值为8。
图4为本发明调整网络设备资源配置的方法实施例一中内核处理流程的流程图,以一个检测周期为例,检测周期为一个时隙(tick)中断时间,如图4所示,包括:
S301、时隙中断时间到来时,操作系统内核统计所有非休眠状态的报文接收线程的空闲计数值的总和。
S302、判断空闲计数值的总和是否小于唤醒门限(第二门限),若小于,则执行S303,若大于则执行S304。
S303、操作系统内核在所有处于休眠状态的报文接收线程中选择一报文接收线程,对选择的报文接收线程进行唤醒处理,接着执行S306。
S304、判断空闲计数值的总和是否大于休眠门限(第一门限),若大于,则执行S305,若小于则执行S306。
S305、操作系统内核在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对选择的报文接收线程进行休眠处理。
S306、将所有非休眠状态的报文接收线程的空闲计数值清零。
图5为本发明调整网络设备资源配置的装置实施例一的结构示意图,如图5所示,本实施例的装置可以包括:设置模块11、统计模块12和调整模块13,其中,设置模块11用于在网络设备操作系统初始化时,将M个报文接收线程的工作状态设置为休眠状态、将N个报文接收线程的工作状态设置为非休眠状态,M和N均为自然数,M大于N,M与N的和是一固定值。具体地,设置模块11用于:分别为M个报文接收线程中的每个报文接收线程创建对应的信号量和休眠标识,休眠标识用于指示报文接收线程处于休眠状态,并获取操作系统内核创建的信号量,陷入内核;分别为N个报文接收线程中的每个报文接收线程创建信号量和非休眠标识,非休眠标识用于指示报文接收线程处于非休眠状态,并在有数据包到来时接收数据包,无数据包到来时将报文接收线程的空闲计数值进行加一操作。统计模块12用于在检测周期内,统计所有非休眠状态的报文接收线程的空闲计数值的总和。调整模块13用于根据统计模块12得到的空闲计数值的总和,调整报文接收线程的工作状态。
调整模块13用于在一个处理器核心的检测周期内根据空闲计数值的总和调整报文接收线程的工作状态。其中,检测周期可以为操作系统的一个时隙中断时间的整数倍。
进一步地,调整模块13用于:
空闲计数值的总和大于第一门限时,在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行休眠处理;
空闲计数值的总和小于第二门限时,在所有处于休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行唤醒处理;
将所有非休眠状态的报文接收线程的空闲计数值清零。
具体地,调整模块13还用于:获取被选择的报文接收线程的信号量,并将被选择的报文接收线程的非休眠标识改为休眠标识;
调整模块13还用于:将选择的报文接收线程的休眠标识改为非休眠标识,并将被选择的报文接收线程的信号量释放。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
本实施例提供的调整网络设备资源配置的装置,利用报文接收线程在一个检测周期内没有报文接收的次数反映报文接收线程的空闲程度,进而反映流量的大小,通过操作系统内核在一个检测周期内统计运行状态的报文接收线程的空闲计数值的总和,在达到休眠门限或唤醒门限时进行报文接收线程的休眠状态调整,从而可根据流量大小动态调整报文接收线程的数量,释放掉的CPU资源可以用于业务处理线程,提高了CPU资源的利用率。
图6为本发明调整网络设备资源配置的装置实施例二的结构示意图,如图6所示,本实施例的装置可以包括:处理器21、存储器22和总线23,其中,存储器22用于存储程序代码,
处理器21用于读取存储器22存储的程序代码,执行:
在网络设备操作系统初始化时,将M个报文接收线程的工作状态设置为休眠状态、将N个报文接收线程的工作状态设置为非休眠状态,M和N均为自然数,M大于N,M与N的和是一固定值。具体地,处理器21用于:分别为M个报文接收线程中的每个报文接收线程创建对应的信号量和休眠标识,休眠标识用于指示报文接收线程处于休眠状态,并获取操作系统内核创建的信号量,陷入内核;分别为N个报文接收线程中的每个报文接收线程创建信号量和非休眠标识,非休眠标识用于指示报文接收线程处于非休眠状态,并在有数据包到来时接收数据包,无数据包到来时将报文接收线程的空闲计数值进行加一操作。在检测周期内,接收所有非休眠状态的报文接收线程的空闲计数值,并统计所有非休眠状态的报文接收线程的空闲计数值的总和。处理器21还用于根据空闲计数值的总和,调整报文接收线程的工作状态。
进一步地,处理器21用于在一个处理器核心的检测周期内根据空闲计数值的总和调整报文接收线程的工作状态。其中,检测周期可以为操作系统的一个时隙中断时间的整数倍。
进一步地,处理器21用于:
空闲计数值的总和大于第一门限时,在所有处于非休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行休眠处理;
空闲计数值的总和小于第二门限时,在所有处于休眠状态的报文接收线程中选择一报文接收线程,对被选择的报文接收线程进行唤醒处理;
将所有非休眠状态的报文接收线程的空闲计数值清零。
具体地,处理器21还用于:获取被选择的报文接收线程的信号量,并将被选择的报文接收线程的非休眠标识改为休眠标识;
处理器21还用于:将选择的报文接收线程的休眠标识改为非休眠标识,并将被选择的报文接收线程的信号量释放。
其中,处理器21可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。这些指令可以通过其中的处理器以配合实现及控制,用于执行本发明实施例揭示的方法。上述处理器还可以是通用处理器、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(application specific integrated circuit)、现成可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
其中,上述通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器,解码器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。
其中,总线23除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起,在图6中将各种总线都标为总线23。
本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理类似,此处不再赘述。
本实施例提供的调整网络设备资源配置的装置,利用报文接收线程在一个检测周期内没有报文接收的次数反映报文接收线程的空闲程度,进而反映流量的大小,通过操作系统内核在一个检测周期内统计运行状态的报文接收线程的空闲计数值的总和,在达到休眠门限或唤醒门限时进行报文接收线程的休眠状态调整,从而可根据流量大小动态调整报文接收线程的数量,释放掉的CPU资源可以用于业务处理线程,提高了CPU资源的利用率。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。