源码地址
GitHub:https://github.com/KonsanAlide/KonsanNet
性能测试
昨天有空,对性能做了一些测试,今天整理下,把一些参数和截图发上来。
Windows服务端测试
在Windows上运行服务端,服务端的电脑参数如下:
系统:Windows 10
内存:16GB
CPU:i7 6700k (4核心)
网络:1000M
Windows服务端接收连接测试
先测试接收连接并发数,如下面表格:
测试项 | 客户端 | 服务端处理性能 |
测试每秒能处理的连接数 | 系统:Centos7 x64(虚拟机) 内存:2GB CPU:i7 7200k (2核心) 网络:1000M 连接数:6万 | 连接数:6397个/每秒 CPU:7%左右 内存:325MB
|
测试每秒能处理的连接数 | 系统:Windows 10 x64 内存:8GB CPU:i5 7200k (2核心) 网络:1000M 连接数:6万 | 连接数:10892个/每秒 CPU:7%左右 内存:49MB |
网上有朋友说Windows客户端发起连接测试,速度比较慢,一般在3000到4000的并发左右,而用Linux客户端发起的连接测试速度比较快,能达到15000左右,所以我都做了下测试,数据有些不同,大家大概知道下,自己回头有需要可以测试下,截图如下:
Windows客户端发起的连接测试(运行Windows服务器)图
windows服务端Linux客户端连接测试图
Windows服务端IOPS测试
客户端的电脑参数如下:
系统:Windows 10 x64
内存:8GB
CPU:i5 7200k (2核心)
网络:1000M
线程数:1000
几种情况下测试结果如下表格:
测试项 | 服务端处理性能 |
以100bytes的包大小发送测试。 线程数目:1000 每连接连续发送10万个包
| 以100字节的Buffer来接收 CPU:29%左右 内存:132MB IOPS:161859 |
以512bytes的包大小发送测试。 线程数目:1000 每连接连续发送10万个包
| 以512字节的Buffer来接收 CPU:5.7%左右 内存:51MB IOPS:27000 |
以1024bytes的包大小发送测试。 线程数目:1000 每连接连续发送10万个包
| 以1024字节的Buffer来接收 CPU:4.3%左右 内存:51MB IOPS:22000 |
以4096bytes的包大小发送测试。 线程数目:1000 每连接连续发送10万个包
| 以4096字节的Buffer来接收 CPU:0.8%左右 内存:51MB IOPS:5500 |
100字节IO并发测试图
4096字节IO并发测试图
在IOCP机制里面,WSARecv提交的Buffer的大小严重的影响IOPS,大家有空可以自己测试下,不过我的台式电脑测试的结果可能有些问题,容易出现卡顿。
Linux服务端测试
在Linux上运行服务端,服务端的电脑参数如下:
系统:Centos7 x64(虚拟机)
内存:6GB
CPU:i7 6700k (4核心)
网络:1000M
Linux服务端接收连接测试
先测试接收连接并发数,如下面表格:
测试项 | 客户端 | 服务端处理性能 |
测试每秒能处理的连接数 | 系统:Windows 10 x64 内存:8GB CPU:i5 7200k (2核心) 网络:1000M | 连接数:11000个/每秒 CPU:20%左右 内存:40MB
|
只测试了Windows客户端发起的连接,截图如下:
Linux服务端Windows客户端连接测试图
Linux服务端IOPS测试
客户端的电脑参数如下:
系统:Windows 10 x64
内存:8GB
CPU:i5 7200k (2核心)
网络:1000M
线程数:1000
两种情况下测试结果如下表格:
测试项 | 服务端处理性能 |
以100bytes的包大小发送测试。 线程数目:1000 每连接连续发送10万个包
| 以100字节的Buffer来接收 CPU:92%左右 内存:40MB IOPS:240000-430000 |
以4096bytes的包大小发送测试。 线程数目:1000 每连接连续发送10万个包
| 以4096字节的Buffer来接收 CPU:20%左右 内存:40MB IOPS:24000-26000 |
100字节包并发测试图
4096字节包并发测试图
总结
从以上的数据中,在连接接收方面IOCP和epoll差别不大,但是在数据接收处理方面,差距有点大,Linux的epoll的明显比IOCP的性能好很多,不过CPU用的有点高,IOPS的测试都是接收到包后直接扔掉,不放入后面的消息处理逻辑的。
不过因为我的Windows系统是win10,和Server版系统有不少差别,这也可能是出现卡顿、性能低的原因之一。