cpu性能优化

1 性能优化-基础

image-20200629150003191

1.1 平均负载概念

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。

它和cpu使用率没有直接关系。

1.2 平均负载实战

  • mpstat: 常用多核cpu性能分析工具,用来实时查看cpu性能指标以及cpu的平均指标;
  • pidstat:常用进程性能分析工具,用来查看进程的cpu、内存、io以及上下文切换等指标;
1.2.1 cpu密集型进程
#### stress模拟cpu 100%场景
stress --cpu 1 --timeout 600
#### 观测
watch -d uptime
## -P ALL表示监控所有cpu,后面数字5表示间隔5s采集一组数据
mpstat -P ALL 5
## 间隔5s输出一组数据
pidstat -u 5 1
1.2.2 io密集群
#### stress模拟io压力
stress -i 1 --timeout 600
#### 观测
watch -d uptime
## -P ALL表示监控所有cpu,后面数字5表示间隔5s采集一组数据
mpstat -P ALL 5
## 间隔5s输出一组数据
pidstat -u 5 1
1.2.3 大量进程场景
#### stress模拟8个进程
stress -c 8 --timeout 600
#### 观测
watch -d uptime
## -P ALL表示监控所有cpu,后面数字5表示间隔5s采集一组数据
mpstat -P ALL 5
## 间隔5s输出一组数据
pidstat -u 5 1

2 cpu上下文切换

2.1 工作原理

根据任务的不同,cpu的上下文切换可以分为不同的场景:

  1. 进程上下文切换
  2. 线程上下文切换
  3. 中断上下文切换

image-20200629154940784

image-20200629162204352

线程是调度的基本单位,而进程是资源拥有的基本单位;

过多的上下文切换会把cpu的时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程的真正运行时间导致系统的整体性能大幅下降;

2.2 上下文切换定位

2.2.1 vmstat

vmstat是一个常用系统性能分析工具,只要用于分析系统的内存使用情况,也常用来分析cpu上下文切换和中断的次数;如下所示是重点的四列关注内容

  • cs(context switch):每秒上下文切换次数。
  • in(interrupt)每秒中断的次数。
  • r(running or runnable)是就绪队列的长度,也就是正在运行和等待cpu的进程数;
  • b(blocked)处于不可中断睡眠状态的进程数。

image-20200629162606696

vmstat只给出系统总体的上下文切换情况,想要查看进程的详细情况需要结合pidstat进行查看。

2.2.2 pidstat
  • cswch:自愿上下文切换,是指进程无法获取所需自愿,导致的上下文切换。
  • Nvcswch:非自愿上下文切换,指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。
fwd@fwd:~$ pidstat -w 5
Linux 5.3.0-55-generic (fwd) 	2020年06月29日 	_x86_64_	(4 CPU)

16时32分01秒   UID       PID   cswch/s nvcswch/s  Command
16时32分06秒     0         1      0.20      0.00  systemd
16时32分06秒     0        11     20.52      0.00  rcu_sched
16时32分06秒     0        12      0.20      0.00  migration/0
16时32分06秒     0        17      0.40      0.00  migration/1
16时32分06秒     0        23      0.40      0.00  migration/2
16时32分06秒     0        29      0.40      0.00  migration/3
16时32分06秒     0        42      0.20      0.00  khugepaged
16时32分06秒     0       276      0.40      0.00  kworker/3:1H-kblockd
16时32分06秒     0       277      0.20      0.00  kworker/1:1H-kblockd

image-20200629163216049

2.3 使用sysbench模拟器线程调度切换问题

sysbench是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况。

本次案例中,把它当做一个异常进程来看,作用是模拟上下文切换过多的问题。

安装工具如下所示:

sudo apt install sysbench sysstat

相关参考指令如下所示:

#### 间隔1s输出一组数据
vmstat 1 1
#### 以10个线程运行5分钟的基准测试,模拟多线程切换问题
sysbench --threads=10 --max-time=300 threads run
#### -wt输出线程的上下文切换指标
pidstat -wt 1

pidstat只是一个进程的性能分析工具,并不提供任何关于中断的详细信息,怎样才能知道中断发生的类型呢?

通过/proc/interrupts这个只读文件中读取。

/proc实际上是linux的一个虚拟文件系统,用于内核空间与用户空间之间的通信。

/proc/interrupts就是这种通信机制的一部分,提供了一个只读的中断使用情况。

使用如下命令进行观测:

watch -d cat /proc/interrupts

image-20200629165146203

通过观察可以发现重调度中断RES变化速度最快,这个中断类型表示,唤醒空闲状态的cpu来调度新的任务运行。这是多处理系统SMP中,调度器用来分散任务到不同cpu的机制,通常也被成为处理器中断(Inter-processor Interrups,IPI)

这里的中断升高还是因为过多任务的调度问题,和前面提到的上下文切换次数的分析一致。

2.4 上下文切换分析

上下文切换次数根据系统本身的cpu性能决定。如果系统的上下文切换次数较为稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数发生数量级的增长,就可能出现了性能问题。

  • 自愿上下文切换变多了,说明进程都在等待资源,可能发生了io等其他问题;
  • 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢cpu,说明cpu确实成为瓶颈了。

3 cpu 100%处理

3.1 cpu使用率

cpu使用率是单位时间内cpu使用情况的统计,以百分比的方式展示。

为了维护cpu时间,linux通过事先定义的节拍率(内核中表示HZ),触发时间中断,并使用全局变量jiffies记录卡机以来的节拍数。没发生一次中断,Jiffies的值就+1.

fwd@fwd:~$ uname -r
5.3.0-55-generic
fwd@fwd:~$ grep 'CONFIG_HZ=' /boot/config-$(uname -r)
CONFIG_HZ=250

image-20200629170537828

linux通过/proc虚拟文件系统,想用户空间提供了系统内部状态的信息,而/proc/stat提供的就是系统的cpu和任务统计信息。比方说,如果你只关注cpu的话,可以执行下面的命令:

image-20200629170947847

image-20200629171115334

image-20200629171141514

3.2 perf明确cpu占用过高函数

安装过程:

ubuntu的两种安装方式链接

#### ubuntu安装
sudo apt install linux-source
##到指定目录执行如下图所示命令 make; make install
#### centos安装
yum install perf

image-20200629173143025

常用操作函数:

#### 简单查看
perf top
#### 指定具体进程 -g开启调用关系分析  -p指定进程号
perf top -g -p 7420
#### 录制数据
perf record
#### 播放录制
perf report
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值