zoukankan      html  css  js  c++  java
  • [笔记]Linux内核学习之旅软中断(SIrq)与SMP IRQ Affinity

    中断过程简单来说就是一种CPU 与硬件沟通的方式

    中断分为两个过程,中间以中断控制器作为分隔。上半部分即中断上半部,下半部分为中断下半部。

    上半部分大部分为说说的硬件中断,下半部分为软中断。

    硬件中断通常由真实物理设备产生的脉冲信号作为信号源,也就是说这里的物理设备与中断控制器沟通方式是通过物理电信号来做的。

    软件中断由中断控制器负责统一调度,通常硬件设备产生信号,这个信号带有中断号发送给中断控制器,中断控制器轮训收到的信号来调用对应的中断处理程序。

    直观一点来看:

    通过

    shell> cat /proc/interrupts 

    可以查看到当前系统的软中断列表和对应的中断号

    从左到右依次表示:

    中断号,对应CPU中断次数,设备类型和设备名

    [root@localhost ~]# cat /proc/interrupts 
               CPU0       CPU1       
      0:      14678          0   IO-APIC-edge      timer
      1:          2          0   IO-APIC-edge      i8042
      4:          2          0   IO-APIC-edge    
      7:          0          0   IO-APIC-edge      parport0
      8:          1          0   IO-APIC-edge      rtc0
      9:          0          0   IO-APIC-fasteoi   acpi
     12:          4          0   IO-APIC-edge      i8042
     14:   45394223          0   IO-APIC-edge      ata_piix
     15:          0          0   IO-APIC-edge      ata_piix
     16:         56   16232636   IO-APIC-fasteoi   i915, p2p1
     18:    5333843   11365439   IO-APIC-fasteoi   uhci_hcd:usb4
     20:    2277759          0   IO-APIC-fasteoi   ata_piix
     21:          3          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
     22:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
     23:       3813       6412   IO-APIC-fasteoi   uhci_hcd:usb5, Intel ICH7
    NMI:       1037        925   Non-maskable interrupts
    LOC:  319530452  247726622   Local timer interrupts
    SPU:          0          0   Spurious interrupts
    PMI:       1037        925   Performance monitoring interrupts
    PND:          0          0   Performance pending work
    RES:     275434     264341   Rescheduling interrupts
    CAL:    4975165    5543634   Function call interrupts
    TLB:     452039     409944   TLB shootdowns
    TRM:          0          0   Thermal event interrupts
    THR:          0          0   Threshold APIC interrupts
    MCE:          0          0   Machine check exceptions
    MCP:      14411      14411   Machine check polls
    ERR:          0
    MIS:          0

    APIC表示高级可编程中断控制器(Advanced Programmable Interrupt Controlle

    APIC是SMP体系的核心,通过APIC可以将中断分发到不同的CPU 来处理

    比如我这里的0号中断都是由CPU 来处理的,一些其他的中断可以绑定CPU或者可以把中断处理平摊到CPU 上,这个过程叫做 SMP IRQ Affinity

    14号中断是属于硬盘设备中断,可以看到中断处理全部由单个CPU完成,这是因为为了使CPU 缓存的命中率提高等因素,使得CPU和硬盘中断绑定(IRQBalance)

    如果的多网卡多CPU的情况下,也可以考虑将指定的网卡软中断绑定到对应的CPU 上,这样可以将负载有效的平衡,且能最大限度的利用CPU 缓存。

    这样做的前提是先关闭IRQBalance

    /etc/init.d/irqbalance stop

    然后可以查看到

    cat /proc/irq/14/smp_affinity

    对应的软中断的多核CPU亲和性设置

    我这里显示的是3,是什么意思呢

    对应的CPU情况是这样的

    CPU0 ----------  00000001     1
    
    CPU1 ----------  00000010     2
    
    CPU2 ----------  00000100     4
    
    .
    
    .
    
    .
    
    CPUN ----------  XXXXXXX     2^N

    3 就表示1+2,也就是两个CPU 都均衡,因为开启了IRQ Balance,所以这里中断处理都会交给同一个CPU来保证效率

    这里的设置都需要硬件的支持,如果开启关闭IRQBalance自己设置中断处理的CPU亲和,有的设备在负载压力大的时候也是会转到其他CPU处理的,这里的亲和并不是强制性的CPU设置。

    亲和性设置建议:DB可以设置一部分CPU处理硬盘IO,一部分CPU处理网络IO,多网卡服务器可以设置对应CPU对应网卡。当然具体情况看生产情况而定

    文章属原创,转载请注明出处 联系作者: Email:zhangbolinux@sina.com QQ:513364476
  • 相关阅读:
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
  • 原文地址:https://www.cnblogs.com/Bozh/p/2864201.html
Copyright © 2011-2022 走看看