zoukankan      html  css  js  c++  java
  • linux的top命令分析

    最近在用top命令查看CPU占用率时,产生了一个疑惑,也就是CPU占用率的计算方式具体是怎样

    这是因为我发现,CPU在渲染4K的GUI的动画时,CPU占用率竟然没有占满,而是只有37%,这让我感到很诧异

    后来我才明白,其实渲染一帧只花了24ms, 然后有40ms在等待display的vsync信号,也就是说在24ms + 40ms的周期内,只有24ms的时间是占用CPU的

    所以CPU占用率是37%也就不奇怪了。

    从网上查到,top命令计算CPU占用率的原理为:

    主要是读取/proc/stat中的内容

    • name 设备名
    • user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
    • nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。
    • system 从系统启动开始累计到当前时刻,处于核心态的运行时间。
    • idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间。
    • iowait 从系统启动开始累计到当前时刻,IO等待时间。
    • irq 从系统启动开始累计到当前时刻,硬中断时间。
    • softirq 从系统启动开始累计到当前时刻,软中断时间。
    • stealstolen 从系统启动开始累积到当前时刻,在虚拟环境运行时花费在其他操作系统的时间。
    • guest 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费的时间。
    • guest_nice 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费在nice进程上的时间。
    • cpu总时间 = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest + guest_nice
    • cpu使用率计算
      1. 请在一段时间内(推荐:必须大于0s,小于等于1s),获取两次cpu时间分配信息。
      2. 计算两次的cpu总时间:total_2 - total_1
      3. 计算两次的cpu剩余时间:idle_2 - idle_1
      4. 计算两次的cpu使用时间:used = (total_2 - total_1) - (idle_2 - idle_1)
      5. cpu使用率 = 使用时间 / 总时间 * 100% = used / total * 100%

    为了验证这个说法,我们可以去看一下top命令的源码。源码的链接我发一下吧:

    http://www.groupsys.com/top/download.shtml

    我拣一些感兴趣的代码说一下吧:

    -s 选项明显是使用了默认的时间间隔,也就是Default_DELAY

    使用的是异步的通知机制来实现实时更新的

     

    那么Default_DELAY的值到底是多少呢,在top.local.h中,有这么一行宏定义

    #ifndef Default_DELAY
    #define Default_DELAY   %delay%
    #endif

     有点不太理解这是什么意思,我们继续搜索

    重点是搞懂sed -e "s|%delay%|$delay|"  这个命令行的含义

    结合“Building Makefile的提示”,大概可以猜测出是在build的时候使用参数$delay替换掉%delay%,完成在命令行模式下直接修改

    源文件中的某些内容,那么默认值是多少呢,我们干脆直接搜delay好了

     Wow, 5s,是够长的了,不过也可以通过-d 命令自己去设置这个间隔。

    不知道我这么草率的分析有内有什么纰漏,如果有看官乐意指出的话, 不胜感激。

  • 相关阅读:
    python爬虫
    RMQ算法
    组合数
    水池数目
    jQuery 拼接事件
    ORACLE
    day 75
    day74 vue框架
    day73 vue框架
    day 72 vue框架
  • 原文地址:https://www.cnblogs.com/Arnold-Zhang/p/11922791.html
Copyright © 2011-2022 走看看