cpu是计算机里最重要的资源,没有之一,并且在性能优化领域,也是最需要理解的内容。
在代码执行方面,cpu执行代码的最终指令,调度资源,操作内存,对完成一个任务的各个方面都有较大影响。
首先,在linux中查看cpu信息的基础指令是看cpu的硬件信息
cat /proc/cpuinfoo
可以看到cpu的核数,单核的频率,以及cpu支持的一些特性。
另外一个最多接触到的内容是 load average 三联组,在很多命令中都会体现,w,top,uptime等等。
分别表示最近1,5,15分钟的cpu使用压力。
关于cpu的使用%比,和cpu load,是两个相似又有不同的概念,在linux里,cpu%也有不同的解释,具体不同,见下方解释。
cpu使用%
- top的最上面的部分
- us 总体用户态cpu的使用%
- sy 核心态
- wa cpu等待,这里主要是等待io
- iowait的产生是因为cpu处理的请求除了iowait之外就没有其它事情可以做了,或者说所有的线程,如果runable状态的都在做io操作
- id 空闲
- top中线程上看到的cpu%,是1个cpu对应100%,上面说的几个值是所有cpu对应100%,所以在多cpu的时候,会看到线程已经大于200%了,而上面的数据还很正常
load
- 主要关注的是等待执行的队列的长度
- 因为等待的队列长,造成的上下文切换也较多
- 上下文切换可以看vmstat的cs部分
- 另外如果cpu使用和load不同步,需要注意任务大大小。
- 如果任务太小,会造成load》cpu%
- 任务很大,cpu%》load
- 关于load的值,也是要看cpu的核数,如果load数<=cpu数,表明某个时间段,没有任何任务是需要等待cpu资源才能开始处理的