文章目录
- 一、概述
- 二、为什么需要负载平均值
- 2.1 什么是 loadavg
- 2.2 /proc/loadavg 格式
- 三、基本概念与原理
- 3.1 指数衰减算法(EMA)
- 3.2 采样机制
- 3.3 嵌入式场景的四个误区
- 四、源码解析
- 4.1 全局变量与采样入口
- 4.2 calc_load_fold_active:本 CPU 的活跃任务变化量
- 4.3 calc_global_load:全局负载更新
- 4.4 负载计算流程
- 五、RK3506 设备树与负载参数
- 5.1 CPU 节点
- 5.2 RK3506 负载参数
- 六、关键特性与约束
- 七、调试命令与实战案例
- 7.1 调试命令
- 7.2 实战案例:高负载但 CPU 不忙
- 📝 本节总结
- 🏠 课后练习
各位好,上一章我们认识了 Cortex-A7 这颗 CPU。这一章讲一个现场调试用得最多的指标–平均负载,也就是/proc/loadavg那三个数字。loadavg是运维和调试里最常用的指标,也是现场报障时第一个看的数字,但绝大多数人对它的理解是错的–以为"负载高就是 CPU 不够用"。本章的核心使命就是纠正这个误解,讲清楚"负载高但 CPU 不忙"是怎么回事。本章大概 35 分钟,重点放在第三节的 EMA 算法和第七节的"高负载但 CPU 不忙"案例;源码部分(第四节)按自己的水平取舍,新手先讲清采样流程,衰减系数的定点数细节可以略过。开讲前建议大家先在板子上cat /proc/loadavg看一眼,再top对比,直观感受一下"loadavg 6.5 但 CPU idle 40%"的怪象。
一、概述
嵌入式设备在现场卡顿,运维的第一反应就是看"负载"。但这里有个特别普遍的误解:很多人以为负载高就是 CPU 不够用,然后去查 CPU 占用,结果发现 CPU 还闲着一半,就懵了。其实/proc/loadavg统计的不只是"在跑"的任务,还有"在等"的任务–具体说,是 R 状态(运行/就绪)和 D 状态(不可中断等待)的任务之和。D 状态任务在等 IO,它不占 CPU 时间,但照样计入负载。这就是"负载高但 CPU 不忙"的根源。
RK3506 是三核,负载值超过 3.0 意味着平均每核满负荷,超过 6.0(核数×2)就是任务堆积了。本章我们就把 loadavg 的指数衰减算法、R/D 状态的统计规则、嵌入式场景的常见误区、