【程序员必备小知识-性能基础13】cpu的使用

952 阅读3分钟

引言

对于cpu的性能方面也许大家最熟悉的不是cpu的上下文切换,也不是前面提到的cpu的负载,可能最先想到的是cpu的使用,是的cpu使用多少这个是能直观看出来的,cpu的使用即单位时间内使用cpu的情况统计,以百分比的形式显示,但是你知道cpu的使用具体是怎么来的嘛?今天带你了解一下吧。

时钟周期

前面我们反复提到,由于Linux具有多进程,多任务的特性,因此将cpu按照时间切片,保证每个进程都能够执行,但是时间到了就必须结束执行,也就是进行cpu的上下文切换,但是这个时间是怎么规定的呢?这就要说到cpu的时钟周期了。

百度是这么定义的:我们只需要看关键的部分即可: image.png

时钟周期是同步电路中时钟基础频率的倒数。那时钟的基础频率是啥呢就是时钟的节拍(内核中表示为 HZ),用来触发时间中断,并在内部维护了全局变量 Jiffies,每发生一次中断,变量计数就加1。

节拍率 HZ 是内核的可配选项,可以设置为 100、250、1000 等,如果设置成250,也就是每秒触发250次时间中断,当然这是一个可更改的选项,文件在/boot/config中,我们来看一下:

image.png

权限是可读可写,有两个文件不知道是哪个,这时候可以挨个打开,也可以使用命令打开,这里我们用命令找一下:

image.png

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 image.png

可以看出一共是四核cpu,上面显示的是总数,接着显示的是每个cpu的具体参数,列的话,最左面是cpu编号,接着显示的是cpu在不同场景下cpu 的累加节拍数,它的单位是 USER_HZ,当然不需要记住。

当然,/proc/stat中包含系统启动以来的很多系统和内核的统计信息,我们来了解一下: 数据整理如下: image.png

指标说明如下: image.png

CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,直接计算没有任何意义,一般我们的统计工具都是每隔一段时间进行计算差值来得到cpu的使用率,所以我们在使用性能分析工具的时候注意统计时间间隔的设定,一定要是一样的。