查看: 541|回复: 9

[原创] 【UP Board】不循规蹈矩,另类UP Board测试

[复制链接]

134

主题

2

好友

4887

积分

版主

Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    昨天 06:32
  • 签到天数: 1056 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 发帖机器勋章 在线之王勋章 论坛骨干勋章

    发表于 2017-1-1 09:29:50 |显示全部楼层

    好吧,标题的名字可能起的比测试更另类,有标题党的嫌疑。不过呢,各种性能测试呀、跑分呀什么的太普遍了,也就没什么意思了。我的初衷就是想搞搞比较特别的,而且是和工作有些关系的来做个比较,所以最后决定测试一下UP Board能够支持的TCP长连接的最大数量。

        大家都知道UP Board采用的是Intel Z8350的CPU,最大只支持2G的内存,经过各大厂商改造后,通过减半带宽增加容量的方法强塞到4G的内存。虽然速度上有所损失,但是好歹内存扩大了一倍,这样就能同时运行更多的程序,尤其是接收大量TCP连接的这种对内存敏感的程序,也就使得这个测试有点用处,从另一个方面说明这个改造是否是成功的。
        由于是在家里用个人电脑测试的,和公司大量的电脑数量比不了,所以只能开虚拟机来模拟客户端发起连接。我的电脑配置是I7 3770和12G内存,其中1个G用做了内存盘,只剩下11个G可以使用,能开几个虚拟机就开几个吧。

        下面开始准备测试工具。
        1.从网上随便找的一个TCP压力测试工具,可以发起任意数量的TCP请求(受操作系统限制);
        2.用go语言写的一个最简单的TCP Server,echo和记录显示Client的数量,其他不做任何功能,只为测试使用。

    工具不用说了,TCP Server的代码如下:
    1. package main

    2. import (
    3.         "bufio"
    4.         "fmt"
    5.         "net"
    6.         "os"
    7.         "./Server"
    8. )

    9. var serverTCP *Server.ServerTCP

    10. func ServerOnReceived(Data []uint8, Len int, Client net.Conn) {
    11.         Client.Write(Data)
    12. }


    13. func main() {
    14.         serverTCP = new(Server.ServerTCP)
    15.         serverTCP.OnReceived = ServerOnReceived
    16.         serverTCP.Listen("8080")

    17.         reader := bufio.NewReader(os.Stdin)
    18.         for {
    19.                 key, _, _ := reader.ReadLine()
    20.                 switch string(key) {
    21.                 case "tcp":
    22.                         fmt.Println("Clients Count:", len(serverTCP.DeviceList))
    23.                 case "exit":
    24.                         return
    25.                 default:
    26.                         continue
    27.                 }
    28.         }
    29. }
    复制代码
        go语言天生自带协程属性光环,处理大量的TCP请求易如反掌,特别适合于服务器后台程序,测试的首选。
        本地编译运行略过不讲,为了方便查看,找了个小屏幕给UP Board接上,不用来回切换显示器的信号。
    0.jpg

    1.jpg

         TCP Server程序运行,表底内存为0.9G,最大3.4G,那么可用的内存就是2.5G左右,就看看这些内存能够容纳多少个连接吧。
    2.jpg

         我的电脑,也就是模拟客户端的机器。大约估计了一下,开了5个虚拟机运行测试程序,再加上主机运行的一个。懒得改电脑的最大连接数,就用系统默认的吧,每个程序发起16000个连接,总共96000个TCP,接近10万,应该够了。


    测试开始:
    3.jpg

        首先启动了主机的测试程序,1万6千个连接完成。
    4.jpg

        UP Board毫无压力,内存也从0.9涨到1.2,用了300M左右。

    第二个程序启动:
    5.jpg

        虚拟机上的程序开始运行,很快完成第二个16000。
    6.jpg

        UP Board那边32000易如反掌,内存变为1.4G,用了200多M。
    第三个程序运行:
    7.jpg

        正常连接,没有问题,第三个16000。
    8.jpg

        UP Board此时48000,内存1.7G,又是300多M。

    虚拟机上的第四个程序:
    9.jpg

        又是16000,没有报错。
    10.jpg

        64000个连接了,看来还很轻松,不过内存达到2.0G,已经占用1个G了。

    继续虚拟机程序:
    11.jpg

        已经是第五个程序了,还能连上。
    12.jpg

        UP Board显示80000个连接,一个不少,内存又多了200多。

    最后一个虚拟机程序:
    13.jpg

        电脑屏幕有点显示不开了,不过连接照样进行。
    14.jpg

        全部运行完成,9万6千个连接,接近10万了,内存又多了300,看来还有富余。
        不甘心呀,还是没到上限,再增加个虚拟机试试。但是虚拟机的连接复制要把主虚拟机停掉,所以只能先断开16000个连接了。
    15.jpg

        再次复制了个虚拟机出来之后,重新运行主虚拟机和新虚拟机,然后再发起32000个连接。
    16.jpg

        十一万两千个连接达成,UP Board依然健壮。而且内存2.6G,离全部用满还有不少。

        由于我的电脑主机内存已耗尽,无法再开启更多的虚拟机,测试到这里结束。最后的成果,UP Board在正确的保持了112000个TCP长连接且正常通讯没有丢包的情况下,内存依然还有800M左右。据此推算,这个小小的Windows开发板持续容纳十五万个连接应该是可以实现的。CPU的占用率一直很低,只在接收客户端发起的连接和发送数据的时候才会提高频率来计算。虽然我把客户端发送的时间调整为1分钟一次发送,没有那么频繁,但是考虑到Atom这样低端的CPU也能从容应对,并且这次的测试主要是针对连接数而不是处理性能,所以这个开发板可玩性还是很高的。如果换成UP2,自己再加个SSD,也许就真的能当作一台服务器来使用了。

    (完)



    回复

    使用道具 举报

    10

    主题

    0

    好友

    975

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    2016-7-19 10:35
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-1-1 11:49:38 |显示全部楼层
    测试很严谨,感谢分享!
    回复

    使用道具 举报

    无效楼层,该帖已经被删除

    6

    主题

    0

    好友

    1111

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 190 天

    [LV.7]常住居民III

    发表于 2017-1-1 19:16:37 |显示全部楼层
    这个很强!
    回复

    使用道具 举报

    5#
    无效楼层,该帖已经被删除

    0

    主题

    0

    好友

    12

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 2017-1-17 20:32:11 |显示全部楼层
    偷偷问一句: 例子里面包含的"./Server"在那里?
    回复

    使用道具 举报

    0

    主题

    0

    好友

    12

    积分

    白丁

    Rank: 1

    该用户从未签到

    发表于 2017-1-17 20:34:38 |显示全部楼层
    偷偷问一句,例子里面包含的“./Server"在那里
    回复

    使用道具 举报

    134

    主题

    2

    好友

    4887

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    昨天 06:32
  • 签到天数: 1056 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 发帖机器勋章 在线之王勋章 论坛骨干勋章

    发表于 2017-1-24 06:09:43 |显示全部楼层
    iphonefengtest1 发表于 2017-1-17 20:34
    偷偷问一句,例子里面包含的“./Server"在那里

    自己封装的一个类。
    回复

    使用道具 举报

    134

    主题

    2

    好友

    4887

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    昨天 06:32
  • 签到天数: 1056 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 发帖机器勋章 在线之王勋章 论坛骨干勋章

    发表于 2017-1-24 06:10:18 |显示全部楼层
    iphonefengtest1 发表于 2017-1-17 20:34
    偷偷问一句,例子里面包含的“./Server"在那里

    只是一个监听和计数而已。
    回复

    使用道具 举报

    8

    主题

    0

    好友

    1598

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    奋斗
    昨天 12:01
  • 签到天数: 288 天

    [LV.8]以坛为家I

    发表于 2017-1-24 08:27:41 |显示全部楼层
    不明觉厉。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-2-20 05:15 , Processed in 0.212211 second(s), 20 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部