Linux 中 CPU 利用率是如何算出来的?
💡
原文中文,约8900字,阅读约需22分钟。
📝
内容提要
本文深入分析了Linux统计系统CPU利用率的内部原理,通过定时器以固定节拍采样各个CPU核的使用情况,并将时间累加到不同的统计项中。top命令读取/proc/stat中的输出数据,这些数据是根据kernel_cpustat变量汇总并输出的。文章还解释了用户态、内核态和空闲时间的统计方法。总体而言,Linux的CPU利用率统计方法是基于采样的,虽然不是百分之百精确,但对于整体情况的评估是可靠的。
🎯
关键要点
- 本文分析了Linux统计CPU利用率的内部原理,使用定时器以固定节拍采样CPU核的使用情况。
- top命令读取/proc/stat中的数据,这些数据由kernel_cpustat变量汇总。
- CPU利用率的统计方法包括用户态、内核态和空闲时间的统计。
- Linux的CPU利用率统计方法基于采样,虽然不完全精确,但对整体情况的评估是可靠的。
- 设计计算CPU利用率的需求需要考虑准确性和瞬时状态的体现。
- 瞬时采样方法可能导致CPU利用率显示剧烈震荡,因此需要结合周期性统计。
- Linux通过每隔固定周期发出timer interrupt来更新CPU使用情况。
- 内核通过/proc/stat伪文件对用户态暴露CPU利用率数据。
- top命令通过访问/proc/stat获取CPU利用率数据,内核通过kernel_cpustat数组汇总。
- CPU时间统计分为用户态、内核态和空闲时间,iowait是CPU在等待IO时的空闲状态。
- top命令输出的CPU时间项目分为三类:用户态、内核态和空闲时间。
- 用户态时间包括user和nice,内核态时间包括irq、softirq和system,空闲时间包括iowait和idle。
➡️