做性能测试的必备知识系列, 可以看下面链接的文章哦
https://www.cnblogs.com/poloyy/category/1806772.html
回顾
CPU 使用率是单位时间内 CPU 使用情况的统计, 以百分比的方式展示
灵魂拷问
最常用什么指标来描述系统的 CPU 性能?
回答
CPU 使用率, 而不是平均负载, CPU 上下文切换
CPU 使用率
前言
前面说过, Linux 作为一个多任务操作系统, 将每个 CPU 的时间划分为很短的时间片, 在通过调度器轮流分配给各个任务使用, 因此造成多任务同时运行的错觉
了解节拍率
为了维护 CPU 时间, Linux 通过事先定义的节拍率(内核中表示为 HZ), 触发时间中断, 并使用全局变量 Jiffies 记录了开机以来的节拍数
每发生一次时间中断, Jiffies 的值 就加 1.
节拍率 HZ 是内核的可配选项, 可以设置为 100,250,1000 等
不同的系统可能设置不同数值, 你可以通过查询 /boot/config 内核选项来查看它的配置值
比如在我的系统中, 节拍率设置成了 1000, 也就是每秒钟触发 1000 次时间中断.
grep 'CONFIG_HZ=' /boot/config-$(uname -r)
了解用户空间节拍率
因为节拍率 HZ 是内核选项, 所以用户空间程序并不能直接访问
为了方便用户空间程序, 内核还提供了一个用户空间节拍率 USER_HZ
它总是固定为 100, 也就是 1/100 秒
这样, 用户空间程序并不需要关心内核中 HZ 被设置成了多少, 因为它看到的总是固定值 USER_HZ
系统 CPU 数据来源(了解)
Linux 通过 /proc 虚拟文件系统, 向用户空间提供了系统内部状态的信息
而 /proc/stat 提供的就是系统的 CPU 和任务统计信息
只查看 CPU 的数据
cat /proc/stat | grep ^CPU
结果分析
从左往右一共 11 列哦
CPU 编号: 第一行是 CPU 的累加
user(us): 用户态 CPU 的时间, 不包括下面的 nice 时间, 但包括了 guest 时间
nice(ni): 低优先级用户态 CPU 的时间, 就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间; 注意 nice 可取值范围是 -20 到 19, 数值越大, 优先级反而越低
system(sys): 内核态 CPU 的时间
idle(id): 空闲时间, 它不包括等待 I/O 的时间(iowait)
iowait(wa): 等待 I/O 的 CPU 时间
irq(hi): 处理硬中断的 CPU 时间
softirq(si): 处理软中断的 CPU 时间
steal(st): 当系统运行在虚拟机中的时间, 被其他虚拟机占用的 CPU 时间
guest: 通过虚拟化运行其他操作系统的时间, 就是运行虚拟机的 CPU 时间
guest_nice(gnice): 以低优先级运行虚拟机的时间
CPU 使用率计算公式(了解)
除了空闲时间外的其他时间占总 CPU 时间的百分比
灵魂拷问
/proc/stat 的数据, 算的是什么时间段的 CPU 使用率?
回答
这是开机以来的节拍数累加值, 所以直接算出来的, 是开机以来的平均 CPU 使用率, 一般没啥参考价值
性能工具所看到的 CPU 使用率的实际计算方法
为了计算 CPU 使用率, 性能工具一般都会取间隔一段时间 (比如 3 秒) 的两次值, 作差后, 再计算出这段时间内的平均 CPU 使用率
总结下
各种各样的性能分析工具已经帮我们计算好了 CPU 平均使用率, 不需要自己单独计算
不过要注意的是, 性能分析工具给出的都是间隔一段时间的平均 CPU 使用率, 所以要注意间隔时间的设置,
来源: https://www.cnblogs.com/poloyy/p/13373310.html