网卡多队列,中断配置

1. 查看每一个cpu的负载以及中断指标:(参考:https://www.cnblogs.com/tcicy/p/10197136.html

业务方在使用KVM虚拟机进行性能压测时,发现某一个核的softirq占比特别高,如下所示:

mpstat -P ALL 1
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    9.96    0.00    3.17    0.01    0.71    2.00    0.00    0.00    0.00   84.15
Average:       0    0.30    0.00    0.51    0.00    0.05    1.24    0.00    0.00    0.00   97.89
Average:       1   55.32    0.00   18.52    0.00    0.53    0.14    0.00    0.00    0.00   25.49
Average:       2   37.03    0.00   15.00    0.00   11.73   12.93    0.00    0.00    0.00   23.30
Average:       3   56.76    0.00   18.98    0.00    0.50    0.14    0.00    0.00    0.00   23.62
Average:       4   50.96    0.00   11.05    0.00    1.41    0.07    0.00    0.00    0.00   36.52
Average:       5   55.81    0.00   19.03    0.00    0.47    0.14    0.00    0.00    0.00   24.56
Average:       6   43.61    0.00   10.13    0.00    0.49    0.09    0.00    0.00    0.00   45.68
Average:       7   57.33    0.00   19.45    0.00    0.47    0.13    0.00    0.00    0.00   22.62
Average:       8   44.77    0.00    9.83    0.00    0.42    0.09    0.00    0.00    0.00   44.90
Average:       9    1.08    0.00    2.77    0.00    1.42    0.08    0.00    0.00    0.00   94.65
Average:      10    0.04    0.00    0.17    0.00    1.21    6.78    0.00    0.00    0.00   91.79
Average:      11    0.02    0.00    0.06    0.00    0.01    0.01    0.00    0.00    0.00   99.89
Average:      12    0.02    0.00    0.16    0.00    1.39    7.04    0.00    0.00    0.00   91.39
Average:      13    0.02    0.00    0.08    0.01    0.01    0.00    0.00    0.00    0.00   99.88
Average:      14    0.00    0.00    0.07    0.00    0.00    0.00    0.00    0.00    0.00   99.92
Average:      15    0.04    0.00    0.09    0.00    0.00    0.00    0.00    0.00    0.00   99.86
Average:      16    0.02    0.00    0.05    0.00    0.00    0.00    0.00    0.00    0.00   99.92
Average:      17    0.04    0.00    0.03    0.00    0.01    0.01    0.00    0.00    0.00   99.91
Average:      18    0.00    0.00    0.04    0.00    0.01    0.01    0.00    0.00    0.00   99.94
Average:      19    0.05    0.00    0.23    0.03    0.00    0.00    0.00    0.00    0.00   99.68
Average:      20    0.03    0.00    0.13    0.00    1.05    7.76    0.00    0.00    0.00   91.03
Average:      21    0.02    0.00    0.03    0.00    0.00    0.00    0.00    0.00    0.00   99.94
Average:      22    0.01    0.00    0.01    0.00    0.00    0.00    0.00    0.00    0.00   99.98
Average:      23    0.02    0.00    0.02    0.09    0.00    0.00    0.00    0.00    0.00   99.86
Average:      24    0.00    0.00    0.12    0.00    3.17   15.49    0.00    0.00    0.00   81.22
Average:      25    0.00    0.00    0.18    0.00    0.00    0.00    0.00    0.00    0.00   99.82
Average:      26    0.03    0.00    0.06    0.00    0.00    0.04    0.00    0.00    0.00   99.86
Average:      27    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.99
Average:      28    0.02    0.00    0.03    0.00    0.00    0.05    0.00    0.00    0.00   99.90
Average:      29    0.44    0.00    0.94    0.00    0.02    0.01    0.00    0.00    0.00   98.59
Average:      30    0.01    0.00    0.02    0.00    0.00    0.00    0.00    0.00    0.00   99.97
Average:      31    0.01    0.00    0.08    0.05    0.00    0.00    0.00    0.00    0.00   99.85
Average:      32    0.05    0.00    0.08    0.00    0.00    0.00    0.00    0.00    0.00   99.85
Average:      33    0.03    0.00    0.04    0.00    0.00    0.00    0.00    0.00    0.00   99.91
Average:      34    0.00    0.00    0.10    0.00    1.33    6.77    0.00    0.00    0.00   91.79
Average:      35    0.06    0.00    0.15    0.00    0.01    0.00    0.00    0.00    0.00   99.77
Average:      36    0.06    0.00    0.10    0.00    1.30   10.50    0.00    0.00    0.00   88.05
Average:      37    0.02    0.00    0.07    0.00    0.02    0.02    0.00    0.00    0.00   99.86
Average:      38    0.05    0.00    0.14    0.00    1.35   10.39    0.00    0.00    0.00   88.07
Average:      39    0.02    0.00    0.13    0.18    0.01    0.01    0.00    0.00    0.00   99.64

其实,看到前面mpstat的显示,如果对网卡多队列,RPS/RFS很熟悉,就会意识到他们在这里不适用。 一句话解释:这个kvm虚拟机只有一个网卡,有网络包到达这个网卡后,它会给某一个cpu(如果没有设置亲和性,这个可以认为是随机的一个cpu,然后就会一直固定在这个cpu上)发中断,通知该cpu来处理这个包,然后cpu就会触发一个软中断把该包送到tcp/ip协议栈(对于tcp包而言)里去处理,该包被放入某一个socket的receive buffer中(如果是一个数据包),软中断结束。 
%soft就是指的CPU耗在软中断处理上的时间。 
可以看到核1的%soft很高,其他的核的%soft基本为0. 
所以就想着把核1的%soft给均摊下,是否可以提升QPS。 
我们想到的方法是网卡多队列,或者RPS/RFS。用这种手段来把网卡软中断给均摊到其他的核上去。

2. 查看每个CPU上的中断变化:

watch -d -n 1 'cat /proc/interrupts'
watch -d -n 1 'cat /proc/interrupts |grep -E "enp5s0f3"'
Every 1.0s: cat /proc/interrupts |grep -E "enp5s0f3"                                                                            localhost.localdomain: Thu Jan 21 20:46:10 2021

  95:          0          0          0          0          0          0          0          0          0          0          0          0          0          0          2
     0          1          0          0          0          0          0          0          0          0          0          0          0          0          0          0
      0          0          0          0          0          0          0          0          0  IR-PCI-MSI 2627584-edge      enp5s0f3
  96:          0          0  568542973          0   16929902          0    3284654          0  182591750          0    2263993          0    3753337          0   74401525
     0  216870268          0  552241418          0      15685          0    3674387          0     112125          0    2881645          0    3546554          0    5439101
      0    5256804          0   45385219          0    1656062          0   69829199          0  IR-PCI-MSI 2627585-edge      enp5s0f3-TxRx-0
  97:          0          0    4607649          0    1479663          0    2786155          0   46627891          0  736533668          0    3750151          0  106562556
     0    3765484          0    1693397          0  554069952          0     508746          0      18870          0    3239848          0    9600866          0   71546816
      0    1272910          0   13978513          0   12613923          0   13481427          0  IR-PCI-MSI 2627586-edge      enp5s0f3-TxRx-1
  98:          0          0          0          0        510          0      11880          0       1803          0      14090          0   96163845          0          0
     0  360800202          0    3084618          0  696758357          0          9          0        570          0  374160885          0      95515          0    1907818
      0    6936473          0        190          0  196122799          0    8473283          0  IR-PCI-MSI 2627587-edge      enp5s0f3-TxRx-2
  99:          0          0       2245          0    8332855          0      36497          0    6115511          0   25791519          0          0          0       7455
     0  167804562          0  543627622          0          0          0   18982920          0  541808143          0    2219164          0  294297212          0    1431021
      0      27269          0      10280          0  114868812          0    6056541          0  IR-PCI-MSI 2627588-edge      enp5s0f3-TxRx-3
 100:          0          0       9155          0   69422794          0   18162315          0    4466926          0  189110717          0          0          0   11995261
     0   41574430          0    1680987          0       8875          0    1525786          0     521395          0    2322062          0  364377557          0  823854973
      0         40          0   17336324          0     940570          0   22848418          0  IR-PCI-MSI 2627589-edge      enp5s0f3-TxRx-4
 101:          0          0    4931536          0   53429823          0  631213311          0    5700165          0  371677111          0      12402          0    1100738
     0   65434558          0     896685          0  378432869          0    7574076          0    5807676          0    5615317          0    8297189          0   14207899
      0      14640          0  194774810          0    3579341          0    5431105          0  IR-PCI-MSI 2627590-edge      enp5s0f3-TxRx-5
 102:          0          0     761536          0   18302532          0      60965          0    2862940          0    7080043          0    4744878          0     295883
     0          0          0    3719027          0          0          0  124772699          0  859454102          0      46192          0    2767191          0    6519441
      0          0          0        700          0  684847631          0    8185540          0  IR-PCI-MSI 2627591-edge      enp5s0f3-TxRx-6
 103:          0          0       9565          0    4940735          0    1352508          0      55642          0      61360          0  554759678          0   82639147
     0     360683          0    1632161          0          0          0       2458          0   25397625          0    4196539          0  185625265          0       1520
      0    4347106          0  848968539          0      65254          0   32430039          0  IR-PCI-MSI 2627592-edge      enp5s0f3-TxRx-7

网卡多队列配置如下:


[root@localhost ~]# cat /proc/irq/99/smp_affinity
0000,00000400
[root@localhost ~]# cat /proc/irq/100/smp_affinity
0040,00000000
[root@localhost ~]# cat /proc/irq/101/smp_affinity
0004,00000000
[root@localhost ~]# cat /proc/irq/102/smp_affinity
0000,01000000
[root@localhost ~]# cat /proc/irq/103/smp_affinity
0000,00001000
[root@localhost ~]# cat /proc/irq/104/smp_affinity
0000,10000000
[root@localhost ~]# cat /proc/irq/103/smp_affinity_list
12
[root@localhost ~]# cat /proc/irq/102/smp_affinity_list
24
[root@localhost ~]# cat /proc/irq/101/smp_affinity_list
34
[root@localhost ~]# cat /proc/irq/100/smp_affinity_list
38
[root@localhost ~]# cat /proc/irq/99/smp_affinity_list
10
[root@localhost ~]# cat /proc/irq/98/smp_affinity_list
36
[root@localhost ~]# cat /proc/irq/97/smp_affinity_list
20
[root@localhost ~]# cat /proc/irq/96/smp_affinity_list
2

[root@localhost ~]# echo 0080,00000000 > /proc/irq/103/smp_affinity
[root@localhost ~]# echo 0040,00000000 > /proc/irq/102/smp_affinity
[root@localhost ~]# echo 0020,00000000 > /proc/irq/101/smp_affinity
[root@localhost ~]# echo 0010,00000000 > /proc/irq/100/smp_affinity
[root@localhost ~]# cat /proc/irq/103/smp_affinity_list
39
[root@localhost ~]# cat /proc/irq/102/smp_affinity_list
38
[root@localhost ~]# cat /proc/irq/101/smp_affinity_list
37
[root@localhost ~]# cat /proc/irq/100/smp_affinity_list
36
[root@localhost ~]# echo 000f,00000000 > /proc/irq/99/smp_affinity
[root@localhost ~]# echo 0008,00000000 > /proc/irq/98/smp_affinity
[root@localhost ~]# echo 0004,00000000 > /proc/irq/97/smp_affinity
[root@localhost ~]# echo 0002,00000000 > /proc/irq/96/smp_affinity
需要先把irqbalance关闭:
关闭方式:
停止irqbalance服务。
systemctl stop irqbalance.service

关闭irqbalance服务。
systemctl disable irqbalance.service

查看irqbalance服务状态是否已关闭。
systemctl status irqbalance.service

网卡多队列配置脚本:
cat /proc/irq/96/smp_affinity
cat /proc/irq/97/smp_affinity
cat /proc/irq/98/smp_affinity
cat /proc/irq/99/smp_affinity
cat /proc/irq/100/smp_affinity
cat /proc/irq/101/smp_affinity
cat /proc/irq/102/smp_affinity
cat /proc/irq/103/smp_affinity

cat /proc/irq/103/smp_affinity_list 
cat /proc/irq/102/smp_affinity_list  
cat /proc/irq/101/smp_affinity_list  
cat /proc/irq/100/smp_affinity_list  
cat /proc/irq/99/smp_affinity_list    
cat /proc/irq/98/smp_affinity_list  
cat /proc/irq/97/smp_affinity_list  
cat /proc/irq/96/smp_affinity_list  

echo 0080,00000000 > /proc/irq/103/smp_affinity  
echo 0040,00000000 > /proc/irq/102/smp_affinity 
echo 0020,00000000 > /proc/irq/101/smp_affinity 
echo 0010,00000000 > /proc/irq/100/smp_affinity 
echo 0008,00000000 > /proc/irq/99/smp_affinity   
echo 0004,00000000 > /proc/irq/98/smp_affinity 
echo 0002,00000000 > /proc/irq/97/smp_affinity 
echo 0001,00000000 > /proc/irq/96/smp_affinity 

cat /proc/irq/96/smp_affinity
cat /proc/irq/97/smp_affinity
cat /proc/irq/98/smp_affinity
cat /proc/irq/99/smp_affinity
cat /proc/irq/100/smp_affinity
cat /proc/irq/101/smp_affinity
cat /proc/irq/102/smp_affinity
cat /proc/irq/103/smp_affinity

cat /proc/irq/103/smp_affinity_list  
cat /proc/irq/102/smp_affinity_list   
cat /proc/irq/101/smp_affinity_list   
cat /proc/irq/100/smp_affinity_list   
cat /proc/irq/99/smp_affinity_list     
cat /proc/irq/98/smp_affinity_list   
cat /proc/irq/97/smp_affinity_list   
cat /proc/irq/96/smp_affinity_list

 

### 网卡多队列接收数据的实现方式 在现代计算机网络环境中,为了提高性能并减少CPU中断次数,网卡通常采用多队列机制来处理接收到的数据包。通过这种方式,能够显著提升系统的吞吐量以及响应速度。 #### 多队列结构概述 每个多队列由独立的硬件资源支持,负责收集特定类型的流量或来自不同物理端口的数据帧。当一个数据包到达时,根据预设规则分配给相应的队列进行存储等待进一步处理[^2]。这种设计允许并发操作,即个处理器核心可以同时访问不同的队列而不发生冲突。 对于基于FPGA实现的高性能NIC(如100Gbps),不仅具备传统意义上的多队列特性,还引入了更复杂的调度算法以优化负载均衡效果。例如,在该类设备中实现了可编程的传输调度器,可以根据实时情况动态调整各条路径上的带宽分配策略,从而更好地适应复杂的应用场景需求[^3]。 #### 数据包筛选与分发过程 一旦数据帧进入网卡内部,会先经过初步解析判断是否满足基本的安全性和协议一致性要求;接着依据目的MAC地址、VLAN标签等因素决定转发至哪个具体的输入缓冲区——也就是所谓的“接收队列”。此过程中涉及到的关键技术有: - **MAC过滤**:仅保留那些目的地为本机的有效报文; - **VLAN识别**:按照所属虚拟局域网划分组别; - **优先级排序**:根据不同业务的重要性给予区别对待。 上述提到的功能均属于第二层交换层面的操作范畴内完成,确保只有合法合规的信息才能继续向上传输给操作系统或其他上层应用服务调用[^1]。 ```bash # 配置Linux系统下的网卡多队列参数示例命令 ethtool -L eth0 combined 8 # 设置eth0接口使用八个组合型收发线程 ``` ### 配置教程 针对具体平台而言,设置多队列特性的方法可能会有所差异。以下是针对主流Linux发行版的一般指导方针: 1. 使用`ethtool`工具查询当前网卡的支持状态及其默认配置。 ```bash ethtool -l <interface_name> ``` 2. 修改现有布局或将未使用的通道激活成新的工作单元 ```bash sudo ethtool -L <interface_name> combined N # 将N个逻辑实体合并在一起形成单一线程模式 ``` 3. 对于某些高级选项(比如RPS/RFS),可能还需要编辑对应的sysctl文件来进行微调 ```bash echo "net.core.rps_sock_flow_entries=32768" | sudo tee /etc/sysctl.d/rps.conf sysctl --system # 应用更改后的配置项 ``` 以上步骤完成后重启网络服务使改动生效即可享受更加流畅高效的联网体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值