测试环境:
PC1:Windows10
iperf3
PC2:Ubuntu
iperf3
都装有千兆网卡,直连的iperf速度是935Mbps。
因为TXRX两个方向的数据是差不多的,下面的测试数据只给出平均值。
1.1 TPLINK 841N
1.1.1 Switch测试
TPLIN841N使用了Marvell的88E6060芯片,使用了dsa技术,在Openwrt下面,所有的包都是软件网桥处理的。
l 内核大量打印到终端
默认在内核里面的网桥代码加入了不少的打印,测试的时候会吐出大量的日志。测试结果是1Mbps。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
|
Mem: 22572K used, 38140K free, 72K shrd, 2612K buff, 6752K cached
CPU: 0% usr 0% sys 0% nic 7% idle 0% io 0% irq 92% sirq
Load average: 1.61 0.97 0.95 7/33 1459
^[[7m PID PPID USER STAT VSZ %VSZ %CPU COMMAND^[[0m 1000 1 root R 1184 2% 29% /usr/sbin/ntpd -n -S /usr/sbin/ntpd-h 1422 1 root R 1636 3% 20% /usr/sbin/hostapd -P /var/run/wifi-ph 1339 1 root R 1168 2% 5% /sbin/logd -S 16 1173 1 dnsmasq R 1040 2% 5% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 1459 513 root R 1188 2% 5% top -d 1 3 2 root RW 0 0% 0% [ksoftirqd/0] 879 1 root S 1620 3% 0% /sbin/netifd 100 2 root SW 0 0% 0% [kworker/0:1] 1 0 root S 1520 2% 0% /sbin/procd 960 1 root S 1504 2% 0% /usr/sbin/uhttpd -f -h /www -r OpenWr 844 1 root S 1432 2% 0% /sbin/rpcd 893 1 root S 1272 2% 0% /usr/sbin/odhcpd 513 1 root S 1188 2% 0% /bin/ash --login 512 1 root S 1168 2% 0% /cnblogs/tanhangbo 943 1 root S 1052 2% 0% /usr/sbin/dropbear -F -P /var/run/dro 6 2 root SW 0 0% 0% [kworker/u2:0] 8 2 root SW 0 0% 0% [kworker/u2:1] 172 2 root SW 0 0% 0% [spi0] 99 2 root SW 0 0% 0% [kswapd0] 340 2 root SW< 0 0% 0% [kworker/0:1H]
|
可以看到CPU负载很高(Load average),CPU已经没有资源了。主要的消耗在内核的Softirq部分(92%)。
l 关闭内核的打印
使用dmesg -n 1关闭内核的打印,发现速率接近理想状况但不是最完美的。
观察到CPU资源没有被消耗完。
TP=83Mbps
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
|
Mem: 21380K used, 39332K free, 68K shrd, 2612K buff, 6744K cached
CPU: 21% usr 0% sys 0% nic 8% idle 0% io 0% irq 70% sirq
Load average: 0.55 0.74 0.91 4/33 1440
PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1339 1 root R 1168 2% 38% /sbin/logd -S 16 1422 1 root R 1636 3% 21% /usr/sbin/hostapd -P /var/run/wifi-ph 3 2 root RW 0 0% 18% [ksoftirqd/0] 1440 513 root R 1188 2% 7% top -d 1 100 2 root SW 0 0% 6% [kworker/0:1] 879 1 root S 1620 3% 0% /sbin/netifd 1 0 root S 1520 2% 0% /sbin/procd 960 1 root S 1504 2% 0% /usr/sbin/uhttpd -f -h /www -r OpenWr 844 1 root S 1432 2% 0% /sbin/rpcd 893 1 root S 1272 2% 0% /usr/sbin/odhcpd 1000 1 root S 1184 2% 0% /usr/sbin/ntpd -n -S /usr/sbin/ntpd-h 513 1 root S 1184 2% 0% /bin/ash --login 512 1 root S 1168 2% 0% /sbin/ubusd 943 1 root S 1052 2% 0% /usr/sbin/dropbear -F -P /var/run/dro 1173 1 dnsmasq S 1040 2% 0% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 6 2 root SW 0 0% 0% [kworker/u2:0] 8 2 root SW 0 0% 0% [kworker/u2:1] 172 2 root SW 0 0% 0% [spi0] 99 2 root SW 0 0% 0% [kswapd0] 340 2 root SW< 0 0% 0% [kworker/0:1H]
|
l 彻底关闭内核的打印
将代码内核打印的代码去掉,发现CPU空闲的资源变多了。
TP=92Mbps,已经可以满足要求
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
|
Mem: 18376K used, 42336K free, 68K shrd, 1788K buff, 5540K cached
CPU: 0% usr 0% sys 0% nic 60% idle 0% io 0% irq 37% sirq
Load average: 0.46 0.38 0.16 1/31 1284
PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1109 1 root S 1636 3% 1% /usr/sbin/hostapd -P /var/run/wifi-ph 3 2 root SW 0 0% 1% [ksoftirqd/0] 1284 448 root R 1176 2% 0% top 1148 1 dnsmasq S 1040 2% 0% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 99 2 root SW 0 0% 0% [kworker/0:1] 861 1 root S 1620 3% 0% /sbin/netifd 1 0 root S 1516 2% 0% /sbin/procd 882 1 root S 1272 2% 0% /usr/sbin/odhcpd 448 1 root S 1172 2% 0% /bin/ash --login 965 1 root S 1172 2% 0% /usr/sbin/ntpd -n -S /usr/sbin/ntpd-h 826 1 root S 1168 2% 0% /sbin/logd -S 16 447 1 root S 1168 2% 0% /sbin/ubusd 920 1 root S 1052 2% 0% /usr/sbin/dropbear -F -P /var/run/dro 171 2 root SW 0 0% 0% [spi0] 8 2 root SW 0 0% 0% [kworker/u2:1] 6 2 root SW 0 0% 0% [kworker/u2:0] 98 2 root SW 0 0% 0% [kswapd0] 66 2 root SW< 0 0% 0% [bioset] 65 2 root SW< 0 0% 0% [crypto]
^C339 2 root SW< 0 0% 0% [kworker/0:1H]
|
1.1.2 NAT测试
设置方法:PC1固定IP,连接到WAN口,PC2连接到LAN口。然后进路由器的命令行固定WAN口的IP。
测试结果:
LAN-WAN Result = 92Mbps
WAN-LAN Result = 88Mbps
可以看到CPU资源被占用了大部分,但是还是有16%的idle。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
|
Mem: 18656K used, 42056K free, 76K shrd, 1788K buff, 5608K cached
CPU: 0% usr 0% sys 0% nic 16% idle 0% io 0% irq 82% sirq
Load average: 0.00 0.03 0.06 2/33 1535
PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1109 1 root S 1636 3% 5% /usr/sbin/hostapd -P /var/run/wifi-ph 3 2 root RW 0 0% 4% [ksoftirqd/0] 1535 448 root R 1176 2% 3% top 99 2 root SW 0 0% 1% [kworker/0:1] 861 1 root S 1688 3% 0% /sbin/netifd 1 0 root S 1516 2% 0% /sbin/procd 882 1 root S 1272 2% 0% /usr/sbin/odhcpd 965 1 root S 1172 2% 0% /usr/sbin/ntpd -n -S /usr/sbin/ntpd-h 448 1 root S 1172 2% 0% /bin/ash --login 1425 861 root S 1172 2% 0% udhcpc -p /var/run/udhcpc-wan.pid -s 826 1 root S 1168 2% 0% /sbin/logd -S 16 447 1 root S 1168 2% 0% /sbin/ubusd 920 1 root S 1052 2% 0% /usr/sbin/dropbear -F -P /var/run/dro 1379 1 dnsmasq S 1040 2% 0% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 1428 861 root S 912 1% 0% odhcp6c -s /lib/netifd/dhcpv6.script 171 2 root SW 0 0% 0% [spi0] 8 2 root SW 0 0% 0% [kworker/u2:1] 6 2 root SW 0 0% 0% [kworker/u2:0] 98 2 root SW 0 0% 0% [kswapd0]
^C339 2 root SW< 0 0% 0% [kworker/0:1H]
|
1.2 XIAOMI MINI
1.2.1 Switch测试
小米MINI的switch转发路径是在硬件里面的,所以LAN转发的路径对CPU几乎没有占用。
测试结果:
94.7Mbps
可以看到CPU占用几乎没有。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
|
Mem: 20860K used, 105092K free, 560K shrd, 2060K buff, 7016K cached
CPU: 0% usr 3% sys 0% nic 94% idle 0% io 0% irq 1% sirq
Load average: 0.10 0.08 0.05 1/45 1536
PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1164 1 dnsmasq S 1044 1% 3% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 1530 1235 root R 1180 1% 1% top -d 1 1234 1147 root S 1124 1% 1% /usr/sbin/dropbear -F -P /var/run/dro 908 1 root S 1628 1% 0% /sbin/netifd 973 1 root S 1540 1% 0% /usr/sbin/uhttpd -f -h /www -r OpenWr 1 0 root S 1536 1% 0% /sbin/procd 872 1 root S 1440 1% 0% /sbin/rpcd 931 1 root S 1280 1% 0% /usr/sbin/odhcpd 1235 1234 root S 1180 1% 0% -ash 410 1 root S 1176 1% 0% /sbin/ubusd 863 1 root S 1176 1% 0% /sbin/logd -S 16 1089 908 root S 1176 1% 0% udhcpc -p /var/run/udhcpc-eth0.2.pid 1022 1 root S 1176 1% 0% /usr/sbin/ntpd -n -S /usr/sbin/ntpd-h 1147 1 root S 1056 1% 0% /usr/sbin/dropbear -F -P /var/run/dro 1091 908 root S 916 1% 0% odhcp6c -s /lib/netifd/dhcpv6.script 411 1 root S 892 1% 0% /sbin/askfirst /usr/libexec/login.sh 118 2 root SW 0 0% 0% [kworker/0:1] 175 2 root SW 0 0% 0% [spi0] 3 2 root SW 0 0% 0% [ksoftirqd/0]
^C 6 2 root SW 0 0% 0% [kworker/u2:0]
|
1.2.2 NAT测试
小米使用的硬件平台是MediaTek MT7620A ver:2 eco:6 ,带有NAT硬件加速,简称HNAT。
Openwrt不支持硬件NAT,测试结果如下:
Result= 94.7Mbps
在这个测试中,几乎占用了所有的CPU。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
|
Mem: 23308K used, 102644K free, 560K shrd, 2060K buff, 7024K cached
CPU: 1% usr 14% sys 0% nic 0% idle 0% io 0% irq 83% sirq
Load average: 0.29 0.16 0.08 2/47 1669
PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1089 908 root R 1176 1% 92% udhcpc -p /var/run/udhcpc-eth0.2.pid 3 2 root RW 0 0% 3% [ksoftirqd/0] 1164 1 dnsmasq S 1044 1% 2% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 1669 1659 root R 1180 1% 1% top 1658 1147 root S 1124 1% 1% /usr/sbin/dropbear -F -P /var/run/dro 118 2 root SW 0 0% 1% [kworker/0:1] 908 1 root S 1628 1% 0% /sbin/netifd 6 2 root SW 0 0% 0% [kworker/u2:0] 973 1 root S 1540 1% 0% /usr/sbin/uhttpd -f -h /www -r OpenWr 1 0 root S 1536 1% 0% /sbin/procd 872 1 root S 1440 1% 0% /sbin/rpcd 931 1 root S 1280 1% 0% /usr/sbin/odhcpd 1235 1234 root S 1180 1% 0% -ash 1659 1658 root S 1180 1% 0% -ash 410 1 root S 1176 1% 0% /sbin/ubusd 863 1 root S 1176 1% 0% /sbin/logd -S 16 1022 1 root S 1176 1% 0% /usr/sbin/ntpd -n -S /usr/sbin/ntpd-h 1234 1147 root S 1124 1% 0% /usr/sbin/dropbear -F -P /var/run/dro 1147 1 root S 1056 1% 0% /usr/sbin/dropbear -F -P /var/run/dro
^C091 908 root S 916 1% 0% odhcp6c -s /lib/netifd/dhcpv6.script
|
使用PandoraBox的固件可以挽救这一局面。它集成了私有的HNAT代码。
|
1
|
|
PandoraBox-ralink-mt7620-xiaomi-mini-squashfs-sysupgrade-r1024-20150608.bin
|
若要打开这个功能,需要在网页中设置,相关的脚本在/etc/init.d/下面,他会加载HNAT的驱动。

测试的结果是94.7Mbps
可以看到几乎没有CPU的占用。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
|
Mem: 48232K used, 78160K free, 0K shrd, 0K buff, 2146650668K cached
CPU: 0% usr 0% sys 0% nic 98% idle 0% io 0% irq 0% sirq
Load average: 0.00 0.09 0.12 1/42 2685
PID PPID USER STAT VSZ %VSZ %CPU COMMAND 2685 2625 root R 1376 1% 1% top -d 1 2124 1 root S 2576 2% 0% /usr/sbin/nmbd -D 2117 1 root S 2496 2% 0% /usr/sbin/smbd -D 2399 1 nobody S 1936 2% 0% /usr/sbin/dnsmasq -C /var/etc/dnsmasq 1784 1 root S 1548 1% 0% /usr/sbin/uhttpd -f -h /www -r Pandor 1650 1 root S 1472 1% 0% /sbin/netifd 1 0 root S 1404 1% 0% /sbin/procd 1769 1 root S 1376 1% 0% /usr/sbin/telnetd -F -l /bin/login.sh 2625 1769 root S 1376 1% 0% -ash 2354 1 root S 1376 1% 0% /usr/sbin/crond -f -c /etc/crontabs - 1722 1 root S 1372 1% 0% /usr/sbin/ntpd -n -l -p 0.pool.ntp.or 1851 1650 root S 1372 1% 0% udhcpc -p /var/run/udhcpc-eth0.2.pid 1685 1 root S 1160 1% 0% /usr/sbin/odhcpd 2157 1 root S 1148 1% 0% /usr/sbin/dropbear -F -P /var/run/dro 1614 1 root S 1040 1% 0% /sbin/logd -S 16 1801 1 root S 984 1% 0% /usr/sbin/vsftpd 480 1 root S 884 1% 0% /sbin/ubusd 1864 1650 root S 828 1% 0% odhcp6c -s /lib/netifd/dhcpv6.script 558 1 root S 768 1% 0% /sbin/askfirst /bin/login
^C559 1 root S 768 1% 0% /sbin/askfirst /bin/login
|
1.3 总结
1. 对于Switch和NAT功能,硬件可以实现offload功能,减轻CPU的负担
2. 对于满速的Throughput测试,CPU基本可以满足需求,但是会吃光CPU的资源。
3. 加入大量的打印会影响性能,如果将打印输出到串口会让性能降到几乎为0
l 打印和速率的关系(打印影响性能)

l 硬件Switch和软件网桥比较

可以看出来,硬件Switch的优势明显。
l 硬件NAT和软件NAT比较

可以看出来,实现硬件NAT会降低很多系统的负担。但是硬件NAT不够灵活,没有集成一些软件可以添加的高级功能。
- PROCESS_YIELD()宏和C语言的switch语句< contiki学习笔记之七>
写在前面: 按照main()函数的代码一行一行的分析,该是看到了 etimer_process 这个位置.但是etimer_process实现里的一个宏 PROCESS_YIELD()引出了很多故事 ...
- C语法简单测试
1.未初始化的枚举变量 /* uninitialized-enum.c */ #include <stdio.h> , black, blue}; int main(void) { enu ...
- switch 的穿透, 以及穿透利用
switch 穿透测试: outputs: 添加break 阻止switch穿透: outputs: 利用switch的穿透功能:
- GNS3--cisco路由器NAT配置
一.基础 Cisco路由器配置中NAT的主要命令: 静态NAT: 1.指定NAT内部接口 在内网相应接口的接口配置模式下执行:ip nat inside 2.指定NAT外部接口 在外网相应接口的接口配 ...
- ThreaLocal内存泄露的问题
在最近一个项目中,在项目发布之后,发现系统中有内存泄漏问题.表象是堆内存随着系统的运行时间缓慢增长,一直没有办法通过gc来回收,最终于导致堆内存耗尽,内存溢出.开始是怀疑ThreadLocal的问题, ...
- [转]unity3d 脚本参考-技术文档
unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...
- Unity3D脚本中文系列教程(八)
◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3, ...
- 2.一步一步学c#(二):核心c#
简单的控制台应用程序. 代码(它有把某条消息写到屏幕上的一个类组成) 编译并运行程序得到结果: 在上面的代码示例中,前几行代码与名称空间有关,名称空间是把相关类组合在一起的方式.namespace关键 ...
- lvs+keepalive实现双主模式(采用DR),同时实现TCP和UDP检测实现非web端的负载均衡,同时实现跨网段的通讯
因为公司领导需要,需要把lvs备机也使用上,故! 使用双主,相互是主的同时也相互是备机.本人用nat测试发现RS无法实现负载均衡,故采用DR模式来实现非web端的负载均衡 lvs1: DIP 10.6 ...
随机推荐
- 使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First
[前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费时间往下看了. 记得09年第一次接触ORM————Linq2Sql,从此对她的爱便一发不可收拾,一年后 ...
- OC 协议
OC 协议 概念:定义了一个接口,其他类负责来实现这些接口.如果你的类实现了一个协议的方法时,则说该类遵循此协议. 非正式协议:非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(Un ...
- EntityFramework 数据库连接可用代码动态设定
摘自:http://blog.csdn.net/dyllove98/article/details/9289553 数据库生成位置可控制(其实主要就是DbContext的构造函数) 1.使用DbCon ...
- 你买了多少ERP?
企业使用ERP(或是其他管理系统),有三种模式:自开发.采购.租赁(SAAS).不知道企业的各级管理者们,是否想过这个问题——我们到底买(做.租)了多少“量”的ERP呢? 这个问题也许不是那么好回答. ...
- iPhone 6 被盗记录二【写在315前夕:苹果售后福州直信创邺在没有三包的情况下帮小偷翻新、助力小偷换机销赃!无视王法。让人震惊,痛心,憎恨!消费者很受伤很无奈】
投诉公司: 北京直信创邺数码科技有限公司 标题: 写在315前夕:苹果售后在没有三包的情况下帮小偷翻新.助力小偷换机销赃!无视王法.让人震惊,痛心,憎恨!消费者很受伤很无奈 期望: 还我手机,或者赔 ...
- ToList()方法
//ToList()方法,翻译:把****转化为List集合. // 控制台试试: string[] fruits = { "apple", "passionfruit& ...
- Linux忘记root密码怎么办?
开篇前言:Linux系统的root账号是非常重要的一个账号,也是权限最大的一个账号,但是有时候忘了root密码怎么办?总不能重装系统吧,这个是下下策,其实Linux系统中,如果忘记了root账号密码, ...
- Excel画的图复制到Word中变形的解决办法
在Excel里画好了图,复制到Word里面经常会变形变的一塌糊涂,面目全非,实在是不理解微软为什么要把自己家的软件搞成这样. 要想保持形状不变,需要这样做: 1. 在Excel里面复制图形,和往常一样 ...
- linux shell 比较文件夹内容 diff
diff -ruNa test1 test2 > test12.diff -r 比较子目录中的文件 -u 以合并的方式显示文件的不同 -N 比较目录时,若文件A仅出现在某个目录中,预设 ...
- markdown简要说明显示样式
markdown 什么是markdown: Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown具有一系列 ...