linux 性能分析之cpu

2019/02/28 阅读: linux

术语

CPU架构与术语解释

CPU架构

  • 处理器(processor): 插到系统槽或主板上的物理芯片,可以是一块或者多块
  • 核(Core): 多核处理器上的一个独立的CPU实例,核是使用处理器的一种扩展方式
  • 硬件线程(Hardware thread): 在同一个核上同时能执行多个线程的CPU架构

CPU绑定

把一个进程和线程绑定到单个CPU或者CPU组上,这样可以提升内存I/O的性能 主要有两种实现方式:

  • 进程绑定 配置一个进程跑在单个CPU上
  • 独占CPU组 将CPU分组,进程只能跑在这些分组上

linux的cpuset可以实现这一功能

# mkdir /dev/cpuset
# mount -t cpuset cpuset /dev/cpuset 
# cd /dev/cpuset
# mkdir prodset  # create a cpuset called "prodset"
# cd prodset
# echo 7-10 > cpus # assign CPUs 7-10
# echo 1 > cpu_exclusive # make prodset exclusive
# echo 1159 > tasks # assign PID 1159 to prodset

CPU内存缓存

为了提高内存的I/O性能,处理器提供多种硬件缓存,级数越小的速度越快,同时也引入一些线程数据共享同步问题和并发问题。

内存缓存

CPU运行队列

CPU运行队列

正在运行和就绪运行的线程数量,表示了CPU的饱和度,上图表示有四个线程和一个CPU上运行的线程。花在等待CPU运行上的时间称为运行队列延时。 内核会为每个CPU提供一个运行队列,并尽量使同一个线程运行在同一个队列中,这样避免了上下文切换,提高性能。

常用工具及名词解释

一些linux 下的cpu性能分析工具,使用方法

uptime

打印1,5,15分钟的平均负载

pi@raspberrypi:~ $ uptime
 15:48:27 up 4 days,  5:37,  1 user,  load average: 0.28, 0.13, 0.09

平均负载 是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数。 这个值不是cpu使用率,是通过正在运行的线程数和正在排队的线程数计算的。 这个值的意义:平均负载大于CPU个数,表示CPU不足以服务线程,有线程在等待;小于线程数表示有余量,线程想执行的时候执行。

平均负载 vs CPU 使用率 平均负载和CPU使用率并不一定是一样的

  • CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的
  • I/O 密集型进程,等待 I/O 也会导致平均负载升高,但CPU 使用率不一定很高

##

目录