BeetleX新版本进入了性能测试阶段,设计目标除了优化设计结构、替换内存池方案希望初期性能和旧版本相当。不过从这次的测试结果来看还是相当理想的。在之前的测试中客户端压测使用了BeetleX旧版本编写的压测工具,压测效果并不太理想,主要原因无法压满租用服务器的CPU资源 。经过思考后决定采用新版本来写压测工具进行测试。
初始次压测的逻辑比较简单,从
Socket
接收数据经常框架事件分发到应用层,在应用层把数据读取到一个临时内存后再次写入Socket发送给压测端。
public classUserSession : SesionBase
{
publicUserSession()
{
}
privatebyte[] _data = newbyte[1024 * 8];
publicoverridevoidReceive(NetContext context, object message)
{
while (context.Reader.Length > 0)
{
var len = context.Reader.Read(_data, 0, _data.Length);
context.Writer.Write(_data, 0, len);
}
context.Writer.Flush();
}
publicoverridevoidConnected(NetContext context)
{
base.Connected(context);
}
}
在这里并没有直接返回会话接收的Byte[]链表,读取出来并写入更合一个网络通讯应用的基础规范。
具体测试用压测工具发起1000个连接,向服务器发送数据包,当接收到服务响应同样长度的数据包后再做二次请求,然后统计每秒产生的IO读写数据量并显示,测试发送的内容分别是128,2K和16K字节。测试硬件环境是两台A家云的32核云主机,网络适配器是100Gb。以下是测试结果截
128字节
2K字节
16K字节
测试结果来看在发送128字节的测试中读写IO的总量基本已经达到了每秒270万即每秒130万的请求响应,而CPU基本处于满负载状态了。2K字节测试中CPU和IO量有下降出入带宽和27Gb。当测试到16K字节的时候带宽出入总量已经达到了43Gb,但cpu使用量不到50%显然是带宽受限了。
其实测试最有意义的还是第一项,看一下IO读写吞吐在相应CPU上的极限, 每秒 270万的量说实话也是一个相当满意的效果了。当然这只是一个组件最基础的性能,后续会实现一个简单的HTTP协议在协议分析的基础上再进行性能测试。
BeetleX
开源跨平台通讯框架(支持TLS)
提供HTTP,Websocket,MQTT,Redis,RPC和服务网关开源组件
个人微信:henryfan128 QQ:28304340
关注公众号
https://github.com/beetlex-io/