引言
- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
对于cpu的性能方面也许大家最熟悉的不是cpu的上下文切换,也不是前面提到的cpu的负载,可能最先想到的是cpu的使用,是的cpu使用多少这个是能直观看出来的,cpu的使用即单位时间内使用cpu的情况统计,以百分比的形式显示,但是你知道cpu的使用具体是怎么来的嘛?今天带你了解一下吧。
时钟周期
前面我们反复提到,由于Linux具有多进程,多任务的特性,因此将cpu按照时间切片,保证每个进程都能够执行,但是时间到了就必须结束执行,也就是进行cpu的上下文切换,但是这个时间是怎么规定的呢?这就要说到cpu的时钟周期了。
百度是这么定义的:我们只需要看关键的部分即可:
时钟周期是同步电路中时钟基础频率的倒数。那时钟的基础频率是啥呢就是时钟的节拍(内核中表示为 HZ),用来触发时间中断,并在内部维护了全局变量 Jiffies,每发生一次中断,变量计数就加1。
节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等,如果设置成250,也就是每秒触发250次时间中断,当然这是一个可更改的选项,文件在/boot/config中,我们来看一下:
权限是可读可写,有两个文件不知道是哪个,这时候可以挨个打开,也可以使用命令打开,这里我们用命令找一下:
grep 'CONFIG_HZ=' /boot/config-$(uname -r),其中grep是管道,'CONFIG_HZ='是我们查找的变量,/boot/config-$(uname -r)是文件所在位置。
你这节拍率是内核选项啊,那我用户空间是没办法访问内核的,那怎么办呢?那就由内核提供一个用户空间节拍率 USER_HZ,这个值固定是100,时间周期就是也就是 1/100 秒。
cpu的任务和统计信息
cpu执行任务肯定是会有统计信息记录的,我们可以在/proc/stat进行查看,当然我们还是通过管道的方式进行查看:
cat /proc/stat | grep ^cpu
可以看出一共是四核cpu,上面显示的是总数,接着显示的是每个cpu的具体参数,列的话,最左面是cpu编号,接着显示的是cpu在不同场景下cpu 的累加节拍数,它的单位是 USER_HZ,当然不需要记住。
当然,/proc/stat中包含系统启动以来的很多系统和内核的统计信息,我们来了解一下:
数据整理如下:
指标说明如下:
CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,直接计算没有任何意义,一般我们的统计工具都是每隔一段时间进行计算差值来得到cpu的使用率,所以我们在使用性能分析工具的时候注意统计时间间隔的设定,一定要是一样的。