• Linux的中断与上下文切换


    定义:

    所谓中断,会导致正在运行的CPU要停下手头的工作去响应,这需要工作任务的切换,就带来了我们熟知的上下文切换,而频繁上下文切换,是对系统性能的重要影响因素。
    如何减少终端带来的影响?
    中断问题一般出现在多核机器上,如果你的机器是多核,16核或者32核,能不能把中断绑定到其中一个CPU上,再把其他剩余的cpu用于应用的计算?
     

    在linux中查看CPU中断的情况:

    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是软中断的占比!

     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就表示硬中断和软中断的数据!

    vmstat

    [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
    其中;
    in:表示每秒的中断数;
    cs:表示每秒上下文切换次数
    命令行的 -t 参数表示以交互形式每秒输出一次数据,这里不做过多阐述。
     
    通过上面的三种方式就能确定当前系统的中断情况,假如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 并且设置了开机自启动!
    在检查系统进程的时候,一般都会看到它~不要觉得陌生哦~
    共勉!
  • 相关阅读:
    基于Vue.js的表格分页组件
    浅谈Vue.js
    利用js2image把代码压缩成圣诞树
    在AngularJS中的使用Highcharts图表控件
    使用Uploadify(UploadiFive)多文件上传控件遇到的坑
    iOS开源项目周报0323
    安卓开源项目周报0322
    前端开源项目周报0321
    iOS开源项目周报0316
    安卓开源项目周报0315
  • 原文地址:https://www.cnblogs.com/storyawine/p/13332131.html
Copyright © 2020-2023  润新知