测试环境:

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不够灵活,没有集成一些软件可以添加的高级功能。

Switch&NAT 测试的更多相关文章

  1. PROCESS_YIELD()宏和C语言的switch语句< contiki学习笔记之七>

    写在前面:  按照main()函数的代码一行一行的分析,该是看到了 etimer_process 这个位置.但是etimer_process实现里的一个宏 PROCESS_YIELD()引出了很多故事 ...

  2. C语法简单测试

    1.未初始化的枚举变量 /* uninitialized-enum.c */ #include <stdio.h> , black, blue}; int main(void) { enu ...

  3. switch 的穿透, 以及穿透利用

    switch 穿透测试: outputs: 添加break 阻止switch穿透: outputs: 利用switch的穿透功能:

  4. GNS3--cisco路由器NAT配置

    一.基础 Cisco路由器配置中NAT的主要命令: 静态NAT: 1.指定NAT内部接口 在内网相应接口的接口配置模式下执行:ip nat inside 2.指定NAT外部接口 在外网相应接口的接口配 ...

  5. ThreaLocal内存泄露的问题

    在最近一个项目中,在项目发布之后,发现系统中有内存泄漏问题.表象是堆内存随着系统的运行时间缓慢增长,一直没有办法通过gc来回收,最终于导致堆内存耗尽,内存溢出.开始是怀疑ThreadLocal的问题, ...

  6. [转]unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

  7. Unity3D脚本中文系列教程(八)

    ◆ static var matrix : Matrix4x4 描述:设置用于渲染所有gizmos的矩阵. 类方法 ◆ Static function DrawCube(center:Vector3, ...

  8. 2.一步一步学c#(二):核心c#

    简单的控制台应用程序. 代码(它有把某条消息写到屏幕上的一个类组成) 编译并运行程序得到结果: 在上面的代码示例中,前几行代码与名称空间有关,名称空间是把相关类组合在一起的方式.namespace关键 ...

  9. lvs+keepalive实现双主模式(采用DR),同时实现TCP和UDP检测实现非web端的负载均衡,同时实现跨网段的通讯

    因为公司领导需要,需要把lvs备机也使用上,故! 使用双主,相互是主的同时也相互是备机.本人用nat测试发现RS无法实现负载均衡,故采用DR模式来实现非web端的负载均衡 lvs1: DIP 10.6 ...

随机推荐

  1. jquery返回顶部,支持手机

    jquery返回顶部,支持手机 效果体验:http://hovertree.com/texiao/mobile/6/ 在pc上我们很容易就可以用scrollTop()来实现流程的向上滚动的返回到顶部的 ...

  2. jquery.dataTable.js 基础配置

    $(document).ready(function () { $('#dataTables-example').DataTable({ responsive: true, "bPagina ...

  3. SharePoint 2013 图文开发系列之可视化WebPart

    有了WebPart开发的基础,再进行可视化WebPart开发,就容易多了.创建和开发过程,两者非常相似,下面,我们简单介绍下可视化WebPart的开发. 1.添加新项目,选择SharePoint 20 ...

  4. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q112-Q115)

    Question  112 You are designing a public-facing SharePoint 2010 Web site for an elementary school th ...

  5. iOS中的交换空间(swap space)

    看来是没有交换空间,原因是闪存和SSD硬盘相比,速度很慢,也有电源管理的原因. the NAND flash is not designed to be used as swap. It is dam ...

  6. mysql安装及配置服务

    第一次安装mysql 1.本地环境:windows 7 -64,mysql版本5.5.28(mysql-5.5.28-winx64.msi) 2.双击mysql-5.5.28-winx64.msi,进 ...

  7. ORACLE NUMBER类型Scale为0引发的问题

    今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE ...

  8. ORACLE等待事件:enq: TX - row lock contention

    enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...

  9. [AlwaysOn Availability Groups]SQL Server错误日志(AG)

    SQL Server错误日志(AG) SQL Server错误日志会记录影响AG的时间,比如: 1.和Windows故障转移集群交互 2.可用副本的状态 3.可用数据的状态 4.AG endpoint ...

  10. 曲演杂坛--当ROW_NUMBER遇到TOP

    值班期间研发同事打来电话,说应用有超时,上服务器上检查发现有SQL大批量地执行,该SQL消耗IO资源较多,导致服务器存在IO瓶颈,细看SQL,发现自己都被整蒙了,不知道这SQL是要干啥,处理完问题赶紧 ...