(1) 中断的配置
[root@zxinos ~]#/etc/init.d/irq_balancer status
Checking for service irqbalance running
--- /etc/init.d/irq_balancer 是linux下用于均分软中断的后台服务,在手工分配软中断前需要停止该服务。
[root@zxinos ~]#cat /proc/interrupts
73: 105588723 84012028 2264178 1534228 1555321 1534136 1555345 1534132 PCI-MSI-edge eth0
---- 找到eth0对应中断信号为73
[root@zxinos ~]#cat /proc/irq/73/smp_affinity
ff
--- ff表示73号中断可以分配到所有processor上。
echo 03 > /proc/irq/73/smp_affinity
--将eth0绑定到CPU0/CPU1
(2) 多队列网卡
在支持多队列网卡的系统,查看/proc/interrupts可以看到同一个网卡支持多个中断:
111: 0 1 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2
112: 1 0 3426776 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-0
113: 1 0 0 708047 0 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-1
114: 1 0 0 0 601650 0 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-2
115: 1 0 0 0 0 755997 0 0 0 0 IR-PCI-MSI-edge eth2-TxRx-3
116: 1 0 0 0 0 0 573019 0 0 0 IR-PCI-MSI-edge eth2-TxRx-4
117: 1 0 0 0 0 0 0 964420 0 0 IR-PCI-MSI-edge eth2-TxRx-5
118: 1 0 0 0 0 0 0 0716379 0 IR-PCI-MSI-edge eth2-TxRx-6
119: 1 0 0 0 0 0 0 0 0 286875 IR-PCI-MSI-edge eth2-TxRx-7
111~119都是eth2网卡的中断号,1个硬中断,8个收发队列中断,这样8个收发队列可以通过smp_affinity配置到不同的cpu核上,让不同核并发处理收发队列数据。
(3) 软件实现多队列
2.6.35 以后的内核版本都支持google的RPS/RFS补丁,需要手工开启。
echo ff > /sys/class/net/eth0/queues/rx-0/rps_cpus
---配置单网卡分配到所有cpu核上。
echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
配置单个每个虚拟队列支持的流数量,
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
---配置全局数据流表(rps_sock_flow_table)的总数 = 4096 * 8(8个processor)