做性能测试的必备知识系列,可以看下面链接的文章哦
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 次时间中断。代码语言:javascript复制grep 'CONFIG_HZ=' /boot/config-$(uname -r)了解用户空间节拍率因为节拍率 HZ 是内核选项,所以用户空间程序并不能直接访问为了方便用户空间程序,内核还提供了一个用户空间节拍率 USER_HZ它总是固定为 100,也就是 1/100 秒这样,用户空间程序并不需要关心内核中 HZ 被设置成了多少,因为它看到的总是固定值 USER_HZ系统 CPU 数据来(了解)Linux 通过 虚拟文件系统,向用户空间提供了系统内部状态的信息/proc
而 提供的就是系统的 CPU 和任务统计信息/proc/stat
只查看 CPU 的数据
代码语言:javascript复制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 使用率,所以要注意间隔时间的设置,