网卡多队列,中断配置
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 202195: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 1 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 IR-PCI-MSI 2627584-edge enp5s0f396: 0 0 568542973 0 16929902 0 3284654 0 182591750 0 2263993 0 3753337 0 744015250 216870268 0 552241418 0 15685 0 3674387 0 112125 0 2881645 0 3546554 0 54391010 5256804 0 45385219 0 1656062 0 69829199 0 IR-PCI-MSI 2627585-edge enp5s0f3-TxRx-097: 0 0 4607649 0 1479663 0 2786155 0 46627891 0 736533668 0 3750151 0 1065625560 3765484 0 1693397 0 554069952 0 508746 0 18870 0 3239848 0 9600866 0 715468160 1272910 0 13978513 0 12613923 0 13481427 0 IR-PCI-MSI 2627586-edge enp5s0f3-TxRx-198: 0 0 0 0 510 0 11880 0 1803 0 14090 0 96163845 0 00 360800202 0 3084618 0 696758357 0 9 0 570 0 374160885 0 95515 0 19078180 6936473 0 190 0 196122799 0 8473283 0 IR-PCI-MSI 2627587-edge enp5s0f3-TxRx-299: 0 0 2245 0 8332855 0 36497 0 6115511 0 25791519 0 0 0 74550 167804562 0 543627622 0 0 0 18982920 0 541808143 0 2219164 0 294297212 0 14310210 27269 0 10280 0 114868812 0 6056541 0 IR-PCI-MSI 2627588-edge enp5s0f3-TxRx-3100: 0 0 9155 0 69422794 0 18162315 0 4466926 0 189110717 0 0 0 119952610 41574430 0 1680987 0 8875 0 1525786 0 521395 0 2322062 0 364377557 0 8238549730 40 0 17336324 0 940570 0 22848418 0 IR-PCI-MSI 2627589-edge enp5s0f3-TxRx-4101: 0 0 4931536 0 53429823 0 631213311 0 5700165 0 371677111 0 12402 0 11007380 65434558 0 896685 0 378432869 0 7574076 0 5807676 0 5615317 0 8297189 0 142078990 14640 0 194774810 0 3579341 0 5431105 0 IR-PCI-MSI 2627590-edge enp5s0f3-TxRx-5102: 0 0 761536 0 18302532 0 60965 0 2862940 0 7080043 0 4744878 0 2958830 0 0 3719027 0 0 0 124772699 0 859454102 0 46192 0 2767191 0 65194410 0 0 700 0 684847631 0 8185540 0 IR-PCI-MSI 2627591-edge enp5s0f3-TxRx-6103: 0 0 9565 0 4940735 0 1352508 0 55642 0 61360 0 554759678 0 826391470 360683 0 1632161 0 0 0 2458 0 25397625 0 4196539 0 185625265 0 15200 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_affinitycat /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_affinitycat /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
网卡多队列,中断配置相关推荐
- 网卡多队列:RPS、RFS、RSS、Flow Director(DPDK支持)
Table of Contents 多队列简介 RPS介绍(Receive Packet Steering) RFS介绍(Receive flow steering) RSS介绍(receive si ...
- linux网卡多队列技术
本篇文章主要是通过阅读了其他人的文章,后续进行了东拼西凑成自己可以理解的样子.但某些细节方面可以再进行深入研究和学习. 参考: https://www.cnblogs.com/lsgxeva/p/11 ...
- Linux网卡多队列学习笔记
Linux网卡多队列的原理 Linux kernel在2.6.21之前不支持网卡多队列的特性,也就是一个网卡只能申请一个中断号. 在2.6.21开始支持网卡多队列,当网卡驱动加载的时候,通过获取网卡型 ...
- 云服务器ECS网卡多队列优化
背景 在服务器网卡收包发包数量非常大时,在系统繁忙时,如果过多网卡中断集中在单一cpu上导致cpu来不及响应造成网络性能下降,网络性能的瓶颈一般不在网卡而在cpu,现在的网卡很多支持万兆和多队列. 为 ...
- 网卡多队列、RSS、RPS、RFS
1.网卡多队列 网卡升级换代之后,变成了多队列网卡,这个队列指的是供网卡DMA读取的ring buffer,即此时网卡会有多个ring buffer. 当有多个数据包到达网卡时,网卡的微处理器,根据数 ...
- linux 网卡多队列设置,网卡多队列
REF 简单命令 推荐使用较新的 Linux 发行版(如 CentOS 7.2)配置网卡多队列. 这里以 CentOS 7.2 为例介绍如何配置网卡多队列,假设是 2 个队列,网卡 interface ...
- STM32单片机外部中断配置讲解
2019独角兽企业重金招聘Python工程师标准>>> 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平.低电平).边沿变化(上升沿. ...
- CentOS下双网卡单网关路由配置
CentOS下双网卡单网关路由配置 大 | 中 | 小 [ 所属分类 系统(linux) | 发布者 店小二03 | 时间 20131001 |作者 路人甲 ]0人收藏点击收藏 CentOS下双网卡单 ...
- linux 单网卡 路由,CentOS下双网卡单网关路由配置
CentOS下双网卡单网关路由配置 假定主机的网卡1的IP地址为:219.223.244.233/21,网卡2的IP地址为:219.223.242.216/21单网为:219.223.240.1(这里 ...
最新文章
- Mysql使用存储过程快速添加百万数据
- 程序员的抱枕也太高大上了吧! | 每日趣闻
- 我是如何做到的:不切换 Git 分支,同时在多个分支上工作的?
- python爬虫吧-Python爬虫如何爬取贴吧内容
- 详解C中volatile关键字
- 如何使用计算机模拟函数图像,模拟图像
- 云服务器镜像麻烦吗_简单说说云服务器的镜像功能作用
- nginx 1.8.1安装使用
- css 样式通用样式
- POJ3585-Accumulation Degree【树形dp,二次扫描与换根法】
- 前端和后端怎么进行数据交互的_前端VS后端
- 《复联4》天价票被叫停了?电影局出手了 院线:确实收到口头通知
- 如何使用代码给菜单增加图标
- 使用opencv实现matlab中的imfill填充孔洞功能
- go和python互调
- 《数据库系统基础教程》读书笔记——第二章 关系数据模型(1)
- 2018.08.17 洛谷P3110 [USACO14DEC]驮运(最短路)
- 地理学中的经典统计分析方法
- answer的汉语_answers怎么读(answers中文是什么意思)
- 快速生成CRUD接口的神器-IDEA插件EasyCode