码迷,mamicode.com
首页 > 系统相关 > 详细

【研究任务】精准控制进程cpu使用率

时间:2018-06-22 21:47:02      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:word   控制进程   rgb   ddl   inux   rap   心态   one   border   

一、cpu的使用率计算

cpu的使用率的获取可以通过top命令或者/proc/<pid>/stat文件

以下是计算cpu使用率有关的参数:

pid=17184

进程号

utime=45010

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

stime=4050

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

cutime=0

所有已死线程在用户态运行的时间,单位为jiffies

cstime=0

所有已死在核心态运行的时间,单位为jiffies

#参考python包psutil源码
def cpu_percent(self, interval=None):
    def timer():
        return time.time() * 1000

    st1 = timer()
    pt1 = self._proc.cpu_times()
    time.sleep(interval)
    st2 = timer()
    pt2 = self._proc.cpu_times()
    delta_proc = (pt2.user - pt1.user) + (pt2.system - pt1.system)
    delta_time = st2 - st1
    try:
       cpu_percent = ((delta_proc / delta_time) * 100)
    except ZeroDivisionError:
        return 0.0

单进程cpu使用率计算:

① 每一个进程快照均为 (utime、stime、cutime、cstime)的4元组;

② 采样两个足够短的时间间隔的进程快照

③ 计算该进程的cpu使用率pcpu = 100*(processCpuTime2 – processCpuTime1) / (totalCpuTime2 – totalCpuTime1)


二、控制原理

假设给定总时间100ms,需要限制进程A的CPU使用率是25%。则进程A的执行时间25ms,剩余时间不让进程A执行就可以了。Linux中断信号中SIGSTOP/SIGCONT可以实现进程的暂停和激活,这样就能将程序CPU使用率随意控制了。

#参考python包psutil源码
def cpu_percent(self, interval=None):
    def timer():
        return time.time() * 1000

    st1 = timer()
    pt1 = self._proc.cpu_times()
    time.sleep(interval)
    st2 = timer()
    pt2 = self._proc.cpu_times()
    delta_proc = (pt2.user - pt1.user) + (pt2.system - pt1.system)
    delta_time = st2 - st1
    try:
       cpu_percent = ((delta_proc / delta_time) * 100)
    except ZeroDivisionError:
        return 0.0

【研究任务】精准控制进程cpu使用率

标签:word   控制进程   rgb   ddl   inux   rap   心态   one   border   

原文地址:http://blog.51cto.com/12814931/2131942

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!