intel网卡中断的亲核性与性能

以intel网卡IGB驱动为例,网口eth0与网卡eth1的中断进行亲核性配置。两个网卡驱动起来之后,查看其中断分配情况。如下为eth0的中断217到225共9个中断,除去217号中断,其余8个一半为接收队列中断,另一半为发送队列中断。

/ # cat /proc/interrupts | grep eth0
 217:          1          0          0          0  IR-PCI-MSI-edge      eth0
 218:        411        875          0          0  IR-PCI-MSI-edge      eth0-rx-0
 219:        411        875          0          0  IR-PCI-MSI-edge      eth0-rx-1
 220:        411        875          0          0  IR-PCI-MSI-edge      eth0-rx-2
 221:        411        875          0          0  IR-PCI-MSI-edge      eth0-rx-3
 222:        411        875          0          0  IR-PCI-MSI-edge      eth0-tx-0
 223:        411        875          0          0  IR-PCI-MSI-edge      eth0-tx-1
 224:        411        875          0          0  IR-PCI-MSI-edge      eth0-tx-2
 225:        412        875          0          0  IR-PCI-MSI-edge      eth0-tx-3

网卡eth1的中断分配情况与eth0类似,自中断号236到243为4个接收队列中断和4个发送队列中断。

/ # cat /proc/interrupts | grep eth1
 235:          1          0          0          0  IR-PCI-MSI-edge      eth1
 236:        482        806          0          0  IR-PCI-MSI-edge      eth1-rx-0
 237:        482        806          0          0  IR-PCI-MSI-edge      eth1-rx-1
 238:        483        805          0          0  IR-PCI-MSI-edge      eth1-rx-2
 239:        483        805          0          0  IR-PCI-MSI-edge      eth1-rx-3
 240:        483        805          0          0  IR-PCI-MSI-edge      eth1-tx-0
 241:        485        804          0          0  IR-PCI-MSI-edge      eth1-tx-1
 242:        484        804          0          0  IR-PCI-MSI-edge      eth1-tx-2
 243:        484        804          0          0  IR-PCI-MSI-edge      eth1-tx-3

系统默认的亲核性为掩码F,由于当前处理器为4核心,表明每个中断都有可能调度到任意个核心上处理。

/ # cat /proc/irq/218/smp_affinity
f
/ # cat /proc/irq/236/smp_affinity
f

在配置亲核性之前,我们看一下默认的接收流的哈希配置,以eth0设备为例,默认的tcp4与tcp6的哈希字段相同,分别为源IP地址、目的IP地址、源端口号和目的端口号。哈希结果决定了数据包将发送到4个接收队列中的哪一个:

/ # ethtool --show-ntuple eth0 rx-flow-hash tcp4
TCP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]
/ # 
/ # ethtool --show-ntuple eth0 rx-flow-hash tcp6
TCP over IPV6 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]

默认的udp4和udp6的哈希字段相同,分别为源IP地址和目的IP地址。

/ # ethtool --show-ntuple eth0 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
/ # 
/ # ethtool --show-ntuple eth0 rx-flow-hash udp6
UDP over IPV6 flows use these fields for computing Hash flow key:
IP SA
IP DA

目前不需要改动接收哈希配置。在默认的接收哈希配置和中断亲核性配置情况下,进行实际的流量转发测试,记录测试结果。之后,改变中断的亲核性,再次实测一下系统的转发性能。将每个队列的中断绑定在一个核心上,如下的eth0设备:

/ # echo 1 > /proc/irq/218/smp_affinity  
/ # echo 2 > /proc/irq/219/smp_affinity  
/ # echo 4 > /proc/irq/220/smp_affinity  
/ # echo 8 > /proc/irq/221/smp_affinity  

/ # echo 1 > /proc/irq/222/smp_affinity  
/ # echo 2 > /proc/irq/223/smp_affinity  
/ # echo 4 > /proc/irq/224/smp_affinity 
/ # echo 8 > /proc/irq/225/smp_affinity 

同样,将设备eth1的队列中断都散列在不同的处理器核心上,如下:

/ # echo 1 > /proc/irq/236/smp_affinity
/ # echo 2 > /proc/irq/237/smp_affinity    
/ # echo 4 > /proc/irq/238/smp_affinity 
/ # echo 8 > /proc/irq/239/smp_affinity

/ # echo 1 > /proc/irq/240/smp_affinity  
/ # echo 2 > /proc/irq/241/smp_affinity  
/ # echo 4 > /proc/irq/242/smp_affinity  
/ # echo 8 > /proc/irq/243/smp_affinity 

后一个测试完成之后,中断在每个核心上的处理统计如下,以eth0设备为例,eth1与之相同,很明显每个核心处理了几乎相同数量的中断:

/ # cat /proc/interrupts | grep eth0
 217:          8          0          0          0  IR-PCI-MSI-edge      eth0
 218:    4058641          3          0          0  IR-PCI-MSI-edge      eth0-rx-0
 219:         78    4076468          0          0  IR-PCI-MSI-edge      eth0-rx-1
 220:         78          3    4108261          0  IR-PCI-MSI-edge      eth0-rx-2
 221:         78          3          0    4063524  IR-PCI-MSI-edge      eth0-rx-3
 222:    4131960          3          0          0  IR-PCI-MSI-edge      eth0-tx-0
 223:         78    4120127          0          0  IR-PCI-MSI-edge      eth0-tx-1
 224:         78          3    4159907          0  IR-PCI-MSI-edge      eth0-tx-2
 225:         81          3          0    3421841  IR-PCI-MSI-edge      eth0-tx-3

以实际测试来说,后者相较前者性能提升了大约50%。测试用处理器型号为4核心的: Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz。

 

 

你可能感兴趣的:(网卡驱动)