网卡中断不均衡处理

在数据量大的时候,硬中断和软中断会形成瓶颈。

网卡接收数据包,从网卡产生中断信号,CPU将网络数据包拷贝到内核,然后进行协议栈的处理,最后将数据部分传递给用户空间,但硬件中断处理仅仅做从网卡拷贝数据的工作,而协议栈的处理的工作就交给软中断处理。所以当硬中断和软中断集中在cpu0的时候,会给调度带来负担(集中在其他cpu也会造成性能瓶颈,这里举cpu0的例子,是因为集中在cpu0影响最大)。

  1. 关闭irqbalance服务,service irqbalance stop,irqbalance在负载不高的时候是不错的服务,但负载太高,就显得力不从心,关闭irqbalance服务,我们自己手动绑定中断号到cpu。
  2. 然后确定使用的是哪个网卡,先lshw -C network –short看看都有哪些网卡。

       

可知有eth0 eth1 eth2 eth3四个网卡

  1. 然后ifconfig看下各网卡的流量,跑压测,再ifconfig,对比前后流量,可知是哪个网卡在跑。

压测前

      

压测后

      

对比前后流量,可知用的是eth2

  1. 获取网卡的中断号

      

                  可知中断号是72-80

2.绑定

echo 9 > /proc/irq/72/smp_affinity_list

echo 10 > /proc/irq/73/smp_affinity_list

echo 11 > /proc/irq/74/smp_affinity_list

echo 12 > /proc/irq/75/smp_affinity_list

echo 13 > /proc/irq/76/smp_affinity_list

echo 14 > /proc/irq/77/smp_affinity_list

echo 15> /proc/irq/78/smp_affinity_list

echo 16 > /proc/irq/79/smp_affinity_list

echo 17 > /proc/irq/80/smp_affinity_list

 

         网卡中断号的绑定可以分散硬中断,不过这样还不够彻底,因为硬中断集中在上述配置的几个核上,且软中断在硬中断结束后工作,也在同一个核上,一个核同时跑硬中断和软中断,这样会大大降低硬中断和软中断的处理速度,会对性能造成极大的瓶颈,因为如果中断没处理完,就无法分发请求到haproxy的各进程。

可通过rps和rfs,将软中断均衡到各个核上。

echo ffffff > /sys/class/net/eth2/queues/rx-0/rps_cpus     24核,所以设置fffff,分散到各核

echo ffffff > /sys/class/net/eth2/queues/rx-1/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-2/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-3/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-4/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-5/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-6/rps_cpus

echo ffffff > /sys/class/net/eth2/queues/rx-7/rps_cpus

 

echo 4096 > /sys/class/net/eth2/queues/rx-0/rps_flow_cnt    32768/N,N为网卡多队列的队列数

echo 4096 > /sys/class/net/eth2/queues/rx-1/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-2/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-3/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-4/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-5/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-6/rps_flow_cnt

echo 4096 > /sys/class/net/eth2/queues/rx-7/rps_flow_cnt

echo 32768 > /proc/sys/net/core/rps_sock_flow_entries

posted @ 2017-04-01 23:47  抟九  阅读(6613)  评论(0编辑  收藏  举报