中断,会导致正在运行的CPU要停下手头的工作去响应,这需要工作任务的切换,就带来了我们熟知的上下文切换,而频繁上下文切换,是对系统性能的重要影响因素。
如何减少终端带来的影响?
中断问题一般出现在多核机器上,如果你的机器是多核,16核或者32核,能不能把中断绑定到其中一个CPU上,再把其他剩余的cpu用于应用的计算?
在linux中查看CPU中断的情况:
1:首先是top中
[root@VM-75-65 example]# top
top - 16:28:21 up 6 days, 1:54, 2 users, load average: 0.43, 0.44, 0.68
Tasks: 189 total, 1 running, 188 sleeping, 0 stopped, 0 zombie
%Cpu0 : 20.4 us, 7.1 sy, 0.0 ni, 70.4 id, 0.0 wa, 0.0 hi, 2.0 si, 0.0 st
%Cpu1 : 6.2 us, 3.1 sy, 0.0 ni, 90.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 3.1 us, 2.1 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st
%Cpu3 : 5.2 us, 2.1 sy, 0.0 ni, 92.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16266768 total, 12552760 free, 1475304 used, 2238704 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 14295516 avail Mem
其中,hi是硬中断的占比,si是软中断的占比!
2:mpstat
[root@VM-75-65 example]# mpstat -P ALL 1
Linux 3.10.0-957.el7.x86_64 (VM-75-65) 04/23/2020 _x86_64_ (4 CPU)
04:18:54 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:18:55 PM all 10.73 0.00 3.40 0.26 0.00 0.00 0.00 0.00 0.00 85.60
04:18:55 PM 0 18.56 0.00 6.19 0.00 0.00 1.03 0.00 0.00 0.00 74.23
04:18:55 PM 1 9.57 0.00 3.19 0.00 0.00 0.00 0.00 0.00 0.00 87.23
04:18:55 PM 2 9.47 0.00 2.11 0.00 0.00 0.00 0.00 0.00 0.00 88.42
04:18:55 PM 3 5.21 0.00 2.08 0.00 0.00 0.00 0.00 0.00 0.00 92.71
04:18:55 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:18:56 PM all 10.44 0.00 5.48 0.00 0.00 0.52 0.00 0.00 0.00 83.55
04:18:56 PM 0 9.38 0.00 3.12 0.00 0.00 1.04 0.00 0.00 0.00 86.46
04:18:56 PM 1 11.58 0.00 9.47 0.00 0.00 0.00 0.00 0.00 0.00 78.95
04:18:56 PM 2 8.25 0.00 2.06 0.00 0.00 0.00 0.00 0.00 0.00 89.69
04:18:56 PM 3 12.77 0.00 7.45 0.00 0.00 0.00 0.00 0.00 0.00 79.79
irp和soft
3:查看具体的上下文切换的次数
[root@VM-75-65 example]# vmstat -t 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
r b swpd free buff cache si so bi bo in cs us sy id wa st CST
1 0 0 12474608 6732 2240200 0 0 2 75 17 8 5 2 92 0 0 2020-04-23 17:04:41
0 0 0 12474480 6732 2240124 0 0 0 147 4507 8489 3 2 94 0 0 2020-04-23 17:04:42
3 0 0 12474628 6732 2240172 0 0 0 86 4550 8467 4 2 93 0 0 2020-04-23 17:04:43
0 0 0 12475164 6732 2240216 0 0 0 230 5453 9773 5 3 93 0 0 2020-04-23 17:04:44
0 0 0 12474028 6732 2240228 0 0 0 136 5201 9030 10 6 84 0 0 2020-04-23 17:04:45
通过上面的三种方式就能确定当前系统的中断情况,如果CPU2上处理的中断很多,而且此时我们把应用跑在了CPU2上,那么会影响应用的性能
优化思路:
1:通过代码控制应用的计算在除了跑中断情况的其他CPU上去跑!而那一个CPU专门用来处理上下文切换
2:通过irqbalance
启用 irqbalance 服务,既可以提升性能,又可以降低能耗。irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance mode 或 Power-save mode。
处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。
处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗。
开启IRQBalance服务:
service irqbalance start
关闭IRQBalance服务:
service irqbalance stop
关闭开机启动IRQBalance服务:
chkconfig --level 123456 irqbalance off
目前市场上的大多数云机器都在系统里安装了irqbalance 并且设置了开机自启动!
在检查系统进程的时候,一般都会看到它~
共勉!