vmware linux top si高以及网卡队列、软负载相关优化
今日,测试公司自行开发的一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 0 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选项看看,本地服务器测试了下,似乎没达到所说的软负载均衡的效果。
vmware linux top si高以及网卡队列、软负载相关优化的更多相关文章
- VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三)
首先启动Nginx 1. 相关浏览 两个 Tomcat 配置: VMware Linux 下 Nginx 安装配置 - Tomcat 配置 (二) Nginx 安装配置启动: VMware Linu ...
- VMware Linux 下 Nginx
负载 VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三) Weiseditor 2014-11-26 23:42 阅读:1 评论 ...
- linux top命令中各cpu占用率含义
linux top命令中各cpu占用率含义 [尊重原创文章摘自:http://www.iteye.com/topic/1137848]0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间 ...
- (转)linux top命令中各cpu占用率含义及案例分析
原文:https://blog.csdn.net/ydyang1126/article/details/72820349 linux top命令中各cpu占用率含义 0 性能监控介绍 1 确定应用类型 ...
- Linux top和负载的说明
转自:http://bbs.linuxtone.org/thread-1684-1-1.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windo ...
- Linux top和负载的解释
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, ...
- Linux top和负载的解释(转载)
转载自://www.blogjava.net/freeman1984/archive/2011/12/08/365853.html op命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程 ...
- Linux top、VIRT、RES、SHR、SWAP(S)、DATA Memory Parameters Detailed
catalog . Linux TOP指令 . VIRT -- Virtual Image (KB) . RES -- Resident size (KB) . SHR -- Shared Memor ...
- linux top ps 命令
http://javawind.net/p131 VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内 ...
随机推荐
- “享受”英语的快乐—我是如何学英语的
一:扬长避短重新认识英语课本 目前市场上的课本都有弊端,<新概念><走遍美国><疯狂英语>等等,不怪你学不下去,不是你的问题,课本本身就有漏洞的,但我怎么学的呢,我 ...
- Object-C Categories和Protocols
Category 要扩展一个不可修改的类,通常的做法是为该类创建一个子类,在子类中实现想要实现的方法,在Object-C中,可以通过category来实现,并且实现方式更为简单. 现在有如下定义:一个 ...
- 超微 X9DRL-iF 服务器主板简介 BIOS相关图解
超微 X9DRL-iF 服务器主板简介 BIOS相关图解 板载串口阵列相关简介 网烁信息805 发布时间:2012-6-15 21:10:09 浏览数:2745 随着Intel E5至强的 ...
- [原]Android Native Debug
1,安装adt插件,cdt插件2,SDK目录配置: Eclipse文件菜单选择“Window”--->“Preferences”--->“Android”--->设置“SDK Loc ...
- 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
先看一下效果图: 实现功能:点击不同的色块可以改变文字的颜色. 实现步骤: 一.创建一个默认的Qt Quick工程: 二.添加文件Cell.qml 这一步主要是为了实现一个自定义的组件,这个组件就是我 ...
- iOS 7.1 安装 企业应用 提示 无法下载应用程序
首先这种情况排除https影响,这个就不提了.请自行查询iOS https 部署. 其次系统版本是iOS 7.1,之后的版本安装都没问题. 说下我是怎么发现问题的,我找了个真机,发现直接调试提示bun ...
- 高手详解SQL性能优化十条建议
1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 解决办法: 其实只需要对该脚本略做改进,查询速度便 ...
- set -x与set +x指令
转载自:http://www.2cto.com/os/201304/205118.html 参考: http://blog.csdn.net/t0nsha/article/details/860688 ...
- 解决debian中脚本无法使用source的问题
#!/bin/sh source scripts/common.sh 现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which s ...
- UliPad 初体验----python 开发利器
学习python 有段时间,最近博客更新比较慢了,空闲时间在零零碎碎的学python ,难成文,也就没整理成博客. 学习python 最苦恼的就是没有趁手IDE ,之前学java 时 Eclipse ...