今日,测试公司自行开发的一rpc中间件,期间发现top si的比例很高,且几乎只有一个cpu是繁忙的,其他均基本为0。

经查,si主要是系统软中断,最后确定是网卡导致的系统中断。于是,往上搜了下资料,主流的用法是如果网卡支持多队列的,则启用之。

常用的Intel的82575、82576,I350,Boardcom的57711等网卡都支持多队列。如果是实体机,可通过如下方式判断是否支持多队列:

lspci -vvv  #lspci在centos 6.x之后的版本不会默认安装,可yum install pciutils进行安装。

对于8257*网卡,如果有类似如下输出,则代表支持多队列模式(对于I350网卡,通常输出中并没有MSI-X信息,此时可查看/proc/interupts,见下文)。

Message Signaled Interrupts(MSI)是PCI规范的一个实现,可以突破CPU 256条interrupt的限制,使每个设备具有多个中断线变成可能,多队列网卡驱动给每个queue申请了MSI。MSI-X是MSI数组,Enable+指使能,TabSize是数组大小。

查看I350支持多队列网卡情况,如下:

[root@localhost conf]# cat /proc/interrupts | grep em

CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15      CPU16      CPU17      CPU18      CPU19      CPU20      CPU21      CPU22      CPU23

第一列为irq的序号,最后两列为可编程中断控制器,设备名称(request_irq的dev_name字段)。中间N列为每个CPU的中断次数。
122: 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-edge em1
123: 317 0 1525002 0 136796294 0 14608 0 36575 0 234650 0 112581 0 57594 0 2421679 0 356527 0 14841 0 43626 0 IR-PCI-MSI-edge em1-TxRx-0
124: 32759769 0 1014 0 2379 0 20687952 0 13631008 0 139 0 0 0 0 0 2329 0 1198 0 0 0 5017 0 IR-PCI-MSI-edge em1-TxRx-1
125: 79104 0 53120 0 197685 0 5310542 0 76355 0 188193 0 1942667 0 1344601 0 102724702 0 591552 0 257979 0 35252479 0 IR-PCI-MSI-edge em1-TxRx-2
126: 35124 0 28296053 0 298217 0 55493 0 41066 0 59423596 0 15789451 0 5433763 0 7282131 0 2488752 0 659172 0 740602 0 IR-PCI-MSI-edge em1-TxRx-3
127: 4348 0 37168 0 4258 0 6092 0 24019 0 7139 0 67133 0 70650 0 22483330 0 8788922 0 33297183 0 9071877 0 IR-PCI-MSI-edge em1-TxRx-4
128: 51834 0 19953406 0 32644 0 13201 0 50038651 0 78453 0 6586627 0 4350927 0 3563993 0 1590572 0 1227042 0 315684 0 IR-PCI-MSI-edge em1-TxRx-5
129: 13213287 0 13061 0 14871 0 5212485 0 17315 0 8097 0 486486 0 326284 0 918310 0 5816261 0 7420585 0 16253590 0 IR-PCI-MSI-edge em1-TxRx-6
130: 72244 0 72511 0 118347 0 6870910 0 156832 0 260694 0 21476142 0 5635175 0 4064530 0 8211846 0 2005408 0 3933305 0 IR-PCI-MSI-edge em1-TxRx-7
132: 0 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-edge em2
133: 90459 0 5975 0 62380 0 263900 0 41705 0 20558 0 262884 0 58614 0 43445 0 220422 0 57085 0 168755 0 IR-PCI-MSI-edge em2-TxRx-0
134: 7039 0 29185 0 25785 0 62442 0 29437 0 19950 0 243960 0 145535 0 101070 0 369315 0 176670 0 85794 0 IR-PCI-MSI-edge em2-TxRx-1
135: 9754 0 27260 0 37691 0 51555 0 34490 0 26055 0 112325 0 222156 0 130001 0 273594 0 208185 0 163116 0 IR-PCI-MSI-edge em2-TxRx-2
136: 8144 0 34842 0 27950 0 36975 0 27415 0 26215 0 197285 0 253643 0 148800 0 210380 0 170284 0 154249 0 IR-PCI-MSI-edge em2-TxRx-3
137: 9352 0 20077 0 29560 0 37561 0 25489 0 27155 0 130522 0 205660 0 214906 0 328060 0 124765 0 143075 0 IR-PCI-MSI-edge em2-TxRx-4
138: 7334 0 16901 0 21110 0 34270 0 29165 0 15060 0 162101 0 179681 0 202381 0 348260 0 192640 0 87279 0 IR-PCI-MSI-edge em2-TxRx-5
139: 9959 0 28310 0 30568 0 41550 0 32910 0 27325 0 154500 0 167498 0 218879 0 310999 0 145064 0 128620 0 IR-PCI-MSI-edge em2-TxRx-6
140: 11774 0 27740 0 43110 0 58246 0 37295 0 34885 0 196624 0 199484 0 152231 0 250235 0 123110 0 161448 0 IR-PCI-MSI-edge em2-TxRx-7
141: 0 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-edge em3
142: 11649 0 33485 0 36340 0 42105 0 44700 0 32530 0 191085 0 177009 0 163050 0 330534 0 160346 0 73349 0 IR-PCI-MSI-edge em3-TxRx-0
143: 11379 0 22335 0 35585 0 48650 0 35425 0 32335 0 179401 0 193488 0 192232 0 170335 0 136336 0 238681 0 IR-PCI-MSI-edge em3-TxRx-1
144: 10069 0 44811 0 37000 0 39910 0 39335 0 43160 0 134806 0 205363 0 226019 0 221720 0 127399 0 166590 0 IR-PCI-MSI-edge em3-TxRx-2
145: 15774 0 36851 0 49295 0 42040 0 51080 0 44805 0 108183 0 202266 0 189370 0 236519 0 156377 0 163622 0 IR-PCI-MSI-edge em3-TxRx-3
146: 15384 0 44440 0 63305 0 64655 0 41611 0 44325 0 111958 0 253747 0 217559 0 133340 0 196733 0 109125 0 IR-PCI-MSI-edge em3-TxRx-4
147: 14579 0 39240 0 58215 0 67860 0 61555 0 40870 0 102890 0 194096 0 287778 0 204359 0 104175 0 120565 0 IR-PCI-MSI-edge em3-TxRx-5
148: 14244 0 36155 0 56975 0 55257 0 50834 0 44535 0 91614 0 126635 0 179910 0 244226 0 229117 0 166680 0 IR-PCI-MSI-edge em3-TxRx-6
149: 15524 0 39270 0 61032 0 73560 0 49980 0 57285 0 83711 0 221278 0 219587 0 188061 0 183589 0 103305 0 IR-PCI-MSI-edge em3-TxRx-7
150: 0 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-edge em4
151: 14974 0 38157 0 52126 0 57610 0 48440 0 31945 0 172255 0 185329 0 129305 0 173168 0 234898 0 157975 0 IR-PCI-MSI-edge em4-TxRx-0
152: 16699 0 48430 0 64680 0 79250 0 68830 0 59345 0 117371 0 221335 0 155726 0 212181 0 172655 0 79680 0 IR-PCI-MSI-edge em4-TxRx-1
153: 18754 0 53052 0 65058 0 85732 0 78820 0 63424 0 78089 0 191158 0 196012 0 152555 0 95383 0 218145 0 IR-PCI-MSI-edge em4-TxRx-2
154: 17584 0 45570 0 62421 0 64330 0 58415 0 47925 0 111414 0 217125 0 185040 0 204959 0 153232 0 128167 0 IR-PCI-MSI-edge em4-TxRx-3
155: 16859 0 45385 0 57915 0 76571 0 72495 0 54665 0 132613 0 143151 0 191921 0 238210 0 159712 0 106685 0 IR-PCI-MSI-edge em4-TxRx-4
156: 17209 0 47805 0 75373 0 75690 0 67166 0 63775 0 135487 0 206185 0 159658 0 173140 0 180429 0 94265 0 IR-PCI-MSI-edge em4-TxRx-5
157: 16939 0 49385 0 75025 0 93725 0 82650 0 72350 0 138203 0 168072 0 81415 0 206450 0 174517 0 137451 0 IR-PCI-MSI-edge em4-TxRx-6
158: 18769 0 49092 0 76005 0 84715 0 89460 0 68645 0 93165 0 141489 0 151775 0 257523 0 150548 0 114996 0 IR-PCI-MSI-edge em4-TxRx-7

可以发现在本系统中,有4张网卡(PowerEdge R630的机器),两个CPU的网卡中断特别高,其中一个又是另一个的4倍左右。其中每张网卡最多支持8个队列,一般网卡规范都会说明。

[root@localhost conf]# cat /proc/irq/126/smp_affinity
00000000,00000000,00000000,00000000,00000000,00000040(‭00101000‬)

可知默认使用4/6号 CPU。

关于RPS/RFS,网上已经很多资料,读者搜一下就有很多了。本文更多的是从使用的角度进行一些介绍。

因为我们使用的是vmware上的linux虚拟机,因为vmware在vmxnet3开始支持多队列虚拟网卡,所以我们需要找到vmxnet是否安装以及其版本(往上很多都是转载的XEN的虚拟机,因此无法直接套用)。如下:

[root@localhost logs]# modprobe -cc | grep vmx
alias pci:v000015ADd000007B0sv*sd*bc*sc*i* vmxnet3

然后要查看vmxnet的实际版本号,如下:

[root@localhost logs]# ethtool -i eno16777736
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version:
bus-info: 0000:02:01.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

并且据官网所述,e1000好像不支持多队列特征,因此计划采用rps进行模拟,对于rps,可通过如下方式进行启用。

rps的设置在文件/sys/class/net/device/queues/rx-queue/rps_cpus中,参见https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/network-rps.html。

默认情况下,他们的值为0。

网上提及的rps_flow_cnt主要是RFS,其相当于RPS上的协调器,参见https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/network-rfs.html。

RPS有两种实现方式:

1 每队列绑定到1个CPU(其中eth0为网卡名,rx-n为队列号,如果不支持多队列的,则只会有rx-0)

/sys/class/net/eth0/queues/rx-0/rps_cpus 00000001

/sys/class/net/eth0/queues/rx-1/rps_cpus 00000002

/sys/class/net/eth0/queues/rx-2/rps_cpus 00000004

/sys/class/net/eth0/queues/rx-3/rps_cpus 00000008

/sys/class/net/eth0/queues/rx-4/rps_cpus 00000010

/sys/class/net/eth0/queues/rx-5/rps_cpus 00000020

/sys/class/net/eth0/queues/rx-6/rps_cpus 00000040

/sys/class/net/eth0/queues/rx-7/rps_cpus 00000080

2 每队列绑定到多个或所有CPU

/sys/class/net/eth0/queues/rx-0/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-1/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-2/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-3/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-4/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-5/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-6/rps_cpus 000000ff

/sys/class/net/eth0/queues/rx-7/rps_cpus 000000ff

通过,echo "000000ff" > /sys/class/net/eth0/queues/rx-0/rps_cpus 000000ff 启用了模拟之后,在我们的测试中,tps并没有预期的上升,而是下降了。

于是全部改了回去,si又降下来了,这个参数是实时生效的。

另外一篇讲解网卡优化较好的文章是https://www.mjmwired.net/kernel/Documentation/networking/scaling.txt。

网上较为合理的测试RFS/RPS的文章可以参考http://blog.csdn.net/yy405145590/article/details/9837839。

PS:阿里云ECS截至目前还不支持多队列网卡,同时也不支持一台ECS多张网卡,初步测试下来RPS的效果并没觉得有多好。阿里云那边反馈说可以考虑设置nox2apic boot选项看看,本地服务器测试了下,似乎没达到所说的软负载均衡的效果。

转载于:https://www.cnblogs.com/zhjh256/p/6020609.html

vmware linux top si高以及网卡队列、软负载相关优化相关推荐

  1. vmware linux ens32,修改Centos7的网卡ens32 改为eth0

    1. 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-eno16777984 修改下面两个配置项 NAME=ens32 DEVICE=ens32 改 ...

  2. 高并发多队列网卡设置CPU亲和性项目记录

    之前我转载过一篇smp-affinity的文章https://blog.csdn.net/yue530tomtom/article/details/76216503 实例 做ssl加速卡(高并发)测试 ...

  3. VMware linux 虚拟机(ubuntu18.04) 安装TL-WDN5200H 2.0网卡驱动 完美使用(适用于vmware无法桥接网络使用此方法)

    VMware linux 虚拟机(ubuntu18.04) 安装TL-WDN5200H 2.0网卡驱动 完美使用(适用于vmware无法桥接网络使用此方法) # 以下操作均已root用户操作 # 安装 ...

  4. VMware Linux虚拟机CPU占用过高

    VMware Linux虚拟机CPU占用过高 虚拟机内存占用过高是一个巨大的问题,之前已经讲过,而CPU占用过高更是重上加重,今天就来讲讲CPU占用过高的解决方法 CPU占用过高其实很简单,总共有两个 ...

  5. linux top cpu瓶颈,Linux命令----分析CPU的瓶颈

    衡量CPU性能的指标: 1,用户使用CPU的情况: CPU运行常规用户进程 CPU运行niced process CPU运行实时进程 2,系统使用CPU情况: 用于I/O管理:中断和驱动 用于内存管理 ...

  6. linux top命令看磁盘,linux top命令详解

    linux top命令详解 下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 ...

  7. Linux top命令参数详解

    Linux top命令参数详解 生产环境系统运行慢,出现无法响应通常原因主要还在于分析CPU.内存.磁盘使用率情况,并结合命令查找出具体进程,并在进程中进一步分析主要因子情况,渗透到对于其中包含线程占 ...

  8. 【Linux】一步一步学Linux——top命令(121)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. top相关说明 06. 附录 01. 命令概述 top命令是Linux下常用的性能 ...

  9. Linux Top 详细介绍,包含task排序

    Linux Top 当我们在终端输入 top 命令时,会弹出一个变化的页面,打印出当前系统的大量重要指标,以及很多进程当前的运行情况: 可以看到,top 命令主要是两部分,第一部分为 头部指标,打印的 ...

  10. linux 软中断过高处理

    https://blog.csdn.net/yue530tomtom/article/details/76216503 遇到linux的软中处理集中在一个core上导致单一cpu使用率过高. 出现问题 ...

最新文章

  1. RAM测试方法 C语言实现,有哪些常用单片机系统RAM测试方法?基于种子和逐位倒转的RAM故障测试法有什么优点?...
  2. java 中static 关键字的用法全解
  3. 华为手机微信网络连接到服务器失败怎么办,微信H5支付在华为手机里报错 网络环境未能通过安全验证,请稍后再试 怎么解决啊 试了好多方法也不行...
  4. docker安装mycat_分布式数据库中间件 MyCat 搞起来!
  5. php 设置curl不超时时间,curl命令的超时时间
  6. java中各种数据类型的使用
  7. C语言 neutralize函数,关于因子数据处理函数中的中性化函数的几个问题
  8. Fragment懒加载(三)
  9. texstudio自动拼写检测_学用系列|能够自动检查英语拼写的希沃白板5
  10. 可以提高千倍效率的Java代码小技巧
  11. go1.5源代码安装
  12. 掘地求生是什么游戏 把主播都逼疯的玩个锤子是什么游戏-李廷学
  13. matlab输出相反数,在MATLAB将等于某一数列相反数的数据都赋值为0
  14. 程序员真的很孤独吗?
  15. CLEAR: Contrastive Learning for Sentence Representation
  16. selenium-java 实现QQ音乐自动登录获取cookie数据,爬取qq音乐会员资源和网易云音乐会员资源。实现任意网站的会员资源爬取
  17. css3实现加载进度条的效果(二)
  18. 基于java的简单英雄联盟胜率计算
  19. 一名优秀的数据分析,需要满足哪些基本条件?
  20. 关于鼠标右键无法正常加载一直转圈

热门文章

  1. 阿里云存储开通与使用
  2. Java基础(一)之公共基础
  3. 常见测试概念-分级测试、灰度测试、AB测试
  4. 谷歌邮箱SMTP小白教程
  5. 用python写1加到100怎么写_python计算1到100的和
  6. 在oracle中bpa是什么意思,BPA是什么意思_BPA的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. 车载系统模块资料整理
  8. 第四章 春夏秋冬,二十四节气
  9. 嗖嗖移动大厅之使用场景类
  10. Loadrunner:管理员权限启动报错“win10为了对电脑进行保护,已经阻止此应用”