Linux系统的进程CPU占用率控制方法、终端设备及存储介质与流程

文档序号:17441763发布日期:2019-04-17 04:51阅读:202来源:国知局
Linux系统的进程CPU占用率控制方法、终端设备及存储介质与流程

本发明涉及计算机系统技术领域,尤其涉及一种linux系统的进程cpu占用率控制方法、终端设备及存储介质。



背景技术:

cpu计算资源作为现代计算机系统最重要资源组成部分,在保障整个计算机系统正常、稳定、高效运行中起到之至关重要的的作用。现代操作系统cpu资源通常由调度算进行管理,以linux为例,在普通进程调度中公平性是一个重要的原则。linux作为最具代表的现代操作系统,实现公平调度基本上是两种思路:

1、给处于可执行状态的进程分配时间片(按照优先级),用完时间片的进程被放到“过期队列”中。等可执行状态的进程都过期了,再重新分配时间片。

2、动态调整进程的优先级。随着进程在cpu上运行,其优先级被不断调低,以便其他优先级较低的进程得到运行机会。

算法上保证了所有的进程在系统上能够得到公平的调度,因此每个进程的cpu占用率由该进程的自身的执行逻辑所决定,在不设置进程优先级的情况下系统不对进程的调度情况进行干预。

随着硬件能力持续发展和现代操作系统的多任务属性,用户通常将多个业务运行在同一操作系统上,以提高系统资源的利用率。在多业务的操作系统上,由于业务逻辑无法完全预测、业务时效需不同等问题将最终将导致在系统默认cpu调度算法下无法满足用户业务系统正常运行的需求。

linux作为主流的现代操作系统,在各行各业中得到了广泛的应用,在当前信息时代的背景下计算机系统中的cpu计算资源已经成为一种至关重要的生产资料,cpu计算资源能否得到高效的利用不但直接关乎企业的成本支出,更是体现了社会生产力的发展水平。由于资源调度在系统内核中进行实现,因此常见的进程cpu占用率控制方式需要内核模块的配合进行实现。如linux操作系统下的cgroup(controlgroups)机制,它以分组的形式对进程使用系统资源的行为进行管理和控制。用户通过对所进程进行分组,再对该分组整体进行资源的分配和控制,包括对进程对cpu的使用率的控制。cgroup由内核态模块和用户态接口两部分构造,用户通过用户态接口获取和设置内核模块的各项参数。cgroup架构复杂并且需要内核进行支持,因此,在单纯的cpu限制存在易用性差和兼容性不足的问题。



技术实现要素:

针对上述问题,本发明旨在提供一种linux系统的进程cpu占用率控制方法、终端设备及存储介质,本方法能够完全在用户态环境下实现,不需要内核模进行支持,极大的提高对应用环境的兼容性。

具体方案如下:

一种linux系统的进程cpu占用率控制方法,包括以下步骤:

s1:初始设置待监控进程的运行时间占比workingrate=cpu占用率pcpu=限制阈值limit,设定控制周期dt,设定控制时刻分别为:第1、2、……、n控制时刻;

s2:从第2控制时刻开始,计算待监控进程的cpu占用率pcpu;

s3:根据当前控制时刻的cpu占用率pcpu,计算当前控制时刻的运行时间占比workingrate:

其中min()表示取两个数的最小值;

s4:根据当前控制时刻的运行时间占比workingrate,计算当前控制时刻的期望运行时间twork和期望暂停时间tsleep:

twork=dt×workingrate

tsleep=dt-dt×workingrate

s5:根据当前控制时刻的期望运行时间twork和期望暂停时间tsleep,通过linux信号sigcont和sigstop控制待监控进程下一控制周期内运行时间,暂停时间。

进一步的,所述待监控进程的cpu占用率pcpu的计算方法如下:

(1):获取待监控进程的配置参数,并根据配置参数查找到该待监控进程对应的proc虚拟文件系统路径;

(2):遍历proc虚拟文件系统,读取所有进程的/proc/[pid]/stat文件,根据文件的ppid属性查找出待监控进程的所有子进程;

(3):读取待监控进程和其所有子进程的/proc/[pid]/stat文件的utime和stime属性,计算该待监控进程的当前时刻的运行时间cputime,并根据公式t=cputime*1000/f,其中,f为已知的系统频率,将运行时间的单位转换为毫秒;

(4)根据下列公式计算待监控进程的cpu占用率pcpu:

其中,tn为当前控制时刻的运行时间,tn-1为前一控制时刻的运行时间。

进一步的,所述配置参数为进程id或者进程名称。

进一步的,所述运行时间cputime为待监控进程及其所有子进程的utime和stime的累加之和。

一种linux系统的进程cpu占用率控制终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。

本发明采用如上技术方案,在传统的内核态进行资源控制和隔离的基础上提出了在用户态进行进程cpu资源占用率控制的装置,在一些内核版本不支持cgroup和单纯的cpu资源控制的应用场景中能够对进程cpu资源占用率实现有效的控制,用户可以根据自己的需求设置控制策略,有效提高了cpu资源利用率,保障关键业务能够分配到足够的资源。

附图说明

图1所示为本发明实施例一的流程示意图。

具体实施方式

为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。

现结合附图和具体实施方式对本发明进一步说明。

实施例一:

参考图1所示,本发明提供了一种linux系统的进程cpu占用率控制方法,由于资源调度在系统内核中进行实现,因此常见的进程cpu占用率控制方式需要内核模块的配合进行实现。如linux操作系统下的cgroup(controlgroups)机制,它以分组的形式对进程使用系统资源的行为进行管理和控制。用户通过对所进程进行分组,再对该分组整体进行资源的分配和控制,包括对进程对cpu的使用率的控制。cgroup由内核态模块和用户态接口两部分构造,用户通过用户态接口获取和设置内核模块的各项参数。cgroup架构复杂并且需要内核进行支持,因此在单纯的cpu限制用存在易用性差兼容性不足的问题。

根据linux信号机制,在用户态下通过对进程发送sigstop或sigcont信号能够改变进程状态为暂停或执行,间接的改变了进程的调度逻辑,结合proc文件系统上/proc/[pid]/stat文件的下列特性:

1、ppid:父进程id

2、utime:该任务在用户态运行的时间,单位为jiffies

3、stime:该任务在核心态运行的时间,单位为jiffies

4、start_time:该任务启动的时间,单位为jiffies

通过遍历/proc目录下的/proc/[pid]/stat文件能够查找出该进程的所有子进程,并能通过/proc/[pid]/stat文中的utime和stime两项属性计算出某个进程的运行情况。

本实施例方法具体包括以下步骤:

s1:初始设置待监控进程的运行时间占比workingrate=限制阈值limit、cpu占用率pcpu=限制阈值limit,设定控制周期dt,设定控制时刻分别为:第1、2、……、n控制时刻。

s2:从第2控制时刻开始,计算待监控进程的cpu占用率pcpu,计算方法如下:

(1):获取待监控进程的配置参数,并根据配置参数查找到该进程对应的proc虚拟文件系统路径。

该实施例中,使用的配置参数包括:进程id或者进程名称、限制阀值limit。本领域技术人员也可以根据情况选用其他配置参数。

(2):遍历proc虚拟文件系统,读取所有进程的/proc/[pid]/stat文件,根据文件的ppid属性判断该文件对应的进程是否为待监控进程的子进程,从而得到一个子进程列表,查找出待监控进程的所有子进程。

此处需要说明的是,所有的子进程/proc/[pid]/stat文件中均使用父进程的ppid属性,因此通过该方式可以进行查找。

(3):读取待监控进程和其所有子进程的/proc/[pid]/stat文件的utime和stime属性,计算该待监控进程的当前时刻已经运行时间cputime(单位jiffies),并根据公式t=cputime*1000/f(单位ms,其中,f为已知的系统频率)将运行时间的单位转换为毫秒(ms)。

需要说明的是,运行时间cputime为待监控进程和其所有子进程的utime和stime的累加之和。

(4)根据下列公式计算待监控进程的cpu占用率pcpu:

其中,n>1,tn为当前控制时刻的运行时间,tn-1为前一控制时刻的运行时间,dt为设定的控制周期,即当前控制时刻与前一控制时刻的时间间隔。

s3:根据当前控制时刻的cpu占用率pcpu,计算当前控制时刻的运行时间占比workingrate:

其中min()表示取两个数的最小值。

s4:根据当前控制时刻的运行时间占比workingrate,计算当前控制时刻的期望运行时间twork和期望暂停时间tsleep:

twork=dt×workingrate

tsleep=dt-dt×workingrate

s5:根据当前控制时刻的期望运行时间twork和期望暂停时间tsleep,通过linux信号sigcont和sigstop,控制待监控进程在下一控制周期内运行时间,暂停时间,当进入下一控制时刻时,返回步骤s2重新进行计算,最终实现将待监控进程控cpu占用率控制制在limit附近。

本发明实施例一在传统的内核态进行资源控制和隔离的基础上提出了在用户态进行进程cpu资源占用率控制的装置,在一些内核版本不支持cgroup和单纯的cpu资源控制的应用场景中能够对进程cpu资源占用率实现有效的控制,用户可以根据自己的需求设置控制策略,有效提高了cpu资源利用率,保障关键业务能够分配到足够的资源。

实施例二:

本发明还提供一种linux系统的进程cpu占用率控制终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。

进一步地,作为一个可执行方案,所述linux系统的进程cpu占用率控制终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述linux系统的进程cpu占用率控制终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述linux系统的进程cpu占用率控制终端设备的组成结构仅仅是linux系统的进程cpu占用率控制终端设备的示例,并不构成对linux系统的进程cpu占用率控制终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述linux系统的进程cpu占用率控制终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。

进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述linux系统的进程cpu占用率控制终端设备的控制中心,利用各种接口和线路连接整个linux系统的进程cpu占用率控制终端设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述linux系统的进程cpu占用率控制终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。

所述linux系统的进程cpu占用率控制终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)以及软件分发介质等。

尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1