• 关于linux系统上软中断只用到一个cpu的问题


     

    有些网卡的中断没有用到多个cpu,只用到一个CPU,导致那个cpu的软中断是100%,系统缓慢。

    [root@web ~]# cat /proc/interrupts
    CPU0       CPU1      
    0:  939474003          0    IO-APIC-edge  timer
    1:          7          2    IO-APIC-edge  i8042
    6:          2          3    IO-APIC-edge  floppy
    7:          0          0    IO-APIC-edge  parport0
    8:          1          0    IO-APIC-edge  rtc
    9:          0          0   IO-APIC-level  acpi
    12:          0        116    IO-APIC-edge  i8042
    15:   47539568      94428    IO-APIC-edge  ide1
    51:    4557238      12181   IO-APIC-level  ioc0
    59:          0          0   IO-APIC-level  vmci
    75:  101314205          0         PCI-MSI  eth0
    NMI:          0          0
    LOC:  998113903  999592029
    ERR:          0
    MIS:          0

    可以看到eth0只用到了cpu0,加外

    mpstat -P ALL 1

    top中的si

    也可以查看cpu中断的使用情况。

    解决这个问题,有两个办法:

    1) 用irqbalance服务

    irqbalance针对多核以及超线程采用共享缓存的系统只处理一次设备中断均衡,也即以静态方式分配各设备中断对应的CPU。在双核及单核系统中启动irqbalance,并不会影响系统资源,因为irqbalance在做完中断均衡相关判断、处理后即退出。

    centos上自带了irqbanlance,安装上

    chkconfig –level 345 irqbalance on

    service irqbalance start

    就行了。

    当然这个办法不是最好的办法。irqbalance仅是一个通用方案,而不是最佳方案。

    2) 修改内核参数/proc/irq/irq#/smp_affinity

    [root@archimedes /proc]# cat /proc/irq/75/smp_affinity
    00000001

    表示eth0只用到了第一个cpu,可以修改这个参数,使它使用多个cpu。

    参数:
    Binary       Hex
    CPU 0    0001         1
    CPU 1    0010         2
    CPU 2    0100         4
    CPU 3    1000         8

    参数是一个10进制的值,cpu n == 2 的 n 次方。

    如果用cpu0和cpu2:

    Binary       Hex
    CPU 0    0001         1
    + CPU 2    0100         4
    ———————–
    both     0101         5

    全用:
    Binary       Hex
    CPU 0    0001         1
    CPU 1    0010         2
    CPU 2    0100         4
    + CPU 3    1000         8
    ———————–
    both     1111         f

    修改:

    echo f > /proc/irq/75/smp_affinity

    需要注意的是:

    有些网卡在PCI-MSI模式下修改这个参数不起作用,需要在内核启动时加上pci=nomsi参数。网上看主要是Broadcom的网卡有这个问题。

  • 相关阅读:
    Elasticsearch 内存配置应用案例
    shell进阶篇之字典和数组结合应用案例
    shell进阶篇之数组应用案例
    nginx的负载均衡
    nginx的反向代理
    ajax的几种使用
    springboot整合Redis
    java的Spring中@Value注解的使用
    Redis的五种数据类型
    冒泡排序
  • 原文地址:https://www.cnblogs.com/ip99/p/15251512.html
Copyright © 2020-2023  润新知