Linux的中断

Posted 一个菜鸡运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的中断相关的知识,希望对你有一定的参考价值。

中断,会导致正在运行的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 并且设置了开机自启动!
在检查系统进程的时候,一般都会看到它~
共勉!

以上是关于Linux的中断的主要内容,如果未能解决你的问题,请参考以下文章

Linux设备树(四 中断)

Linux x86_64内核中断初始化

linux内核中断体系结构

linux中断处理函数

linux中断处理函数

如何关闭linux smp中断