网卡软中断过高

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

中断

# 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做性能测试

posted @   thomas_blog  阅读(609)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示