cpu占用率计算原理

cpu占用率计算原理

CPU 占用率的计算原理是通过统计 CPU 在一段时间内被某个进程或整个系统使用的时间,与总时间相比较,得出的一个百分比值,表示 CPU 被占用的程度。以下是具体介绍:

总体原理


某进程的 CPU 使用率 = 该进程占用的 CPU 时间 / 总 CPU 时间。

不同操作系统下的具体实现


  • Linux 系统
    • 计算所有进程总的占用率:依赖于 “/proc/stat” 文件。此文件中包含了如 user(用户态的 CPU 时间)、nice(nice 值为正的用户态 CPU 时间)、system(内核时间)、idle(除硬盘 IO 等待时间以外其它等待时间)、iowait(硬盘 IO 等待时间)、irq(硬中断时间)、softirq(软中断时间)等参数,每个参数都有对应的从系统启动开始累计到当前时刻的计数值(单位:jiffies),CPU 总时间 = user + system + nice + idle + iowait + irq + softirq。计算某个状态的占用率,就用该状态下的计数值除以 CPU 总时间。例如,计算用户态占用率为 user / CPU 总时间。这些计数来源于每 cpu 变量 “kstat”,而 “kstat” 的字段数据来源于 tick 中断的采样,在定时产生的 tick 中断中判断中断前的状态进行计数,分为 “user”、“nice”、“irq”、“softirq”、“system”、“iowait”、“idle” 等几种状态。
    • 计算单个进程的占用率:依赖于 “/proc/pid/stat” 文件,其中的 “utime” 和 “stime” 分别表示进程的用户态和内核态时间计数,通过这两个字段可以计算单个进程的 CPU 占用率。

  • Windows 系统:Windows 系统通过性能计数器(Performance Counters)来获取 CPU 使用情况的相关数据。系统会记录不同进程和整个系统在不同时间点的 CPU 使用时间等信息,然后基于这些数据进行计算。例如,系统可能会记录每个进程在一段时间内处于运行状态的时钟周期数,通过计算某个进程的时钟周期数占总时钟周期数的比例来得到该进程的 CPU 占用率。

实际计算示例


比如在某一段时间内,一个进程的 “utime” 为 100 个时钟周期,“stime” 为 50 个时钟周期(假设 1 个时钟周期为 1 毫秒),总 CPU 时间为 1000 毫秒(即 1000 个时钟周期)。则该进程的 CPU 使用率 = ((100 + 50) - (上次的 utime + 上次的 stime)) / (1000) = (150 - 上次的值) / 1000 ,如果上次的值为 0,则此次 CPU 使用率为 150 / 1000 = 15%。
不同的操作系统和工具可能会采用略微不同的方法和数据来源来计算 CPU 占用率,但总体原理都是基于对 CPU 使用时间的统计和比较。在实际应用中,了解 CPU 占用率的计算原理有助于更好地分析系统性能、排查性能瓶颈以及优化程序和系统配置。

看过该文章的人还看了