zoukankan      html  css  js  c++  java
  • 网卡软中断过高

    当网卡收到数据包时会产生中断,通知内核有新数据包,然后内核调用中断处理程序进行响应,把数据包从网卡缓存拷贝到内存

    中断

    # cat /proc/interrupts
               CPU0       CPU1       CPU2       CPU3       
      3:     204093     942723     502178     584481     GICv2  30 Level     arch_timer
      7:          0          0          0          0     GICv2 175 Level     arm-pmu
      8:          0          0          0          0     GICv2 176 Level     arm-pmu
      9:          0          0          0          0     GICv2 177 Level     arm-pmu
     10:          0          0          0          0     GICv2 178 Level     arm-pmu
     13:          0          0          0          0     GICv2 156 Level     zynqmp-dma
     14:          0          0          0          0     GICv2 157 Level     zynqmp-dma
     15:          0          0          0          0     GICv2 158 Level     zynqmp-dma
     16:          0          0          0          0     GICv2 159 Level     zynqmp-dma
     17:          0          0          0          0     GICv2 160 Level     zynqmp-dma
     18:          0          0          0          0     GICv2 161 Level     zynqmp-dma
     19:          0          0          0          0     GICv2 162 Level     zynqmp-dma
     20:          0          0          0          0     GICv2 163 Level     zynqmp-dma
     23:   45766295          0          0          0     GICv2  95 Level     eth0, eth0
    

    配置中断均衡
    法一:

    # echo f > /proc/irq/23/smp_affinity
    

    以十六进制输入

    法二:

    # echo 0-3 > /proc/irq/23/smp_affinity_list
    

    法三:

    # apt-get install irqbalance
    

    查看软中断占用

    cat /proc/softirqs 
                        CPU0       
              HI:          1
           TIMER:  247177394
          NET_TX:       1300
          NET_RX:  322174830
           BLOCK:    2828269
    BLOCK_IOPOLL:          0
         TASKLET:         16
           SCHED:          0
         HRTIMER:          0
             RCU:  178199932
    

    RPS/RFS
    RPS 全称是 Receive Packet Steering,这是Google工程师 Tom Herbert (therbert@google.com )提交的内核补丁,在2.6.35进入Linux内核。这个patch采用软件模拟的方式,实现了多队列网卡所提供的功能,分散了在多CPU系统上数据接收时的负载,把软中断分到各个CPU处理,而不需要硬件支持,大大提高了网络性能。
    RFS 全称是 Receive Flow Steering,这也是Tom提交的内核补丁,它是用来配合RPS补丁使用的,是RPS补丁的扩展补丁,它把接收的数据包送达应用所在的CPU上,提高cache的命中率。

    配置RPS/RFS

    # cat /proc/sys/net/core/rps_sock_flow_entries 
    # echo N > /proc/sys/net/core/rps_sock_flow_entries
    

    N:根据活跃连接数来配置

    # cat /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
    # echo N > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
    

    eth0:网卡设备(可能多个)
    rx-0:接收队列(可能多个)
    N:rps_sock_flow_entries/接收队列的数量(做除法)

    可以使用Netperf做性能测试

  • 相关阅读:
    CSU1784
    HDU 6128 Inverse of sum(数学)
    容斥原理入门
    HDU 6129 Just do it(规律)
    HDU 6140 Hybrid Crystals(zz)
    HDU 6143 Killer Names(排列+容斥,dp)
    zzuli 2177 Contest
    zzuli 2180 GJJ的日常之沉迷数学(逆元)
    除法逆元入门
    乘法逆元数论篇
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709316.html
Copyright © 2011-2022 走看看