异数OS TCP协议栈测试(二)--短连接篇
异数OS TCP协议栈测试(二)--短连接篇
本文来自异数OS社区
github: https://github.com/yds086/HereticOS
异数OS社区QQ群: 652455784
异数OS-织梦师(消息中间件)群: 476260389
测试目标
TCP 短链接IO性能测试,Client Server都采用单线程半双工模式,Client发起连接,连接后发送请求,接收Server回应,收到Server回应后,关闭连接,循环此ECHO流程。
基本测试环境
VMware 12
异数OS宿主操作系统 debian 8 64位
CPU : NUC i3 2.6G 双核
内存:2GB
TCP重要参数如下:
1. bPassiveForceClose,该参数等于1表示被动强制关闭连接,被关闭方收到Fin时,不在继续完成默认的Fin执行流程,而是发送RST重置链接,快速关闭连接。
2. nMSLTimeOut,MSL一般为30秒,在测试ECHO类应用性能时会导致Client 资源出现泄露(一般设计正常的Server端不会),为了方便测试默认设置为0,表示主动发起关闭链接的一方不进入TIME WAIT状态,直接进入CLOSED状态,
3. 带包头200字节负载,不带crc checksum, 无丢包,无硬件延迟情况。
测试方案一 (单核快速关闭)
在同一个CPU核上创建一个Server,1个Client, bPassiveForceClose=1,以太层使用异数OS软件交换机本地核定向转发。
总计ECHO IOPS 为1.8M ,软件交换机包交换能力26Mpps,由于Client占用50%的负载,软件交换机占用20%负载,所以预计真实环境中最大可达到4.0M左右的ECHO能力。
测试方案二 (单核正常关闭)
在同一个CPU核上创建一个Server,1个Client, bPassiveForceClose=0,以太层使用异数OS软件交换机本地核定向转发。
总计ECHO IOPS 为1.4M ,软件交换机包交换能力25Mpps,由于Client占用60%的负载,软件交换机占用10%负载,所以预计真实环境中最大可达到3.0M左右的ECHO能力。
测试方案三 (多核分载快速关闭)
双核CPU,CPU1 仅创建Server, CPU3上创建1个Client,bPassiveForceClose=1,以太层使用异数OS软件交换机定向跨核转发。
总计ECHO IOPS 为1.9M ,软件交换机包交换能力26Mpps,由于多核模式下软件交换机会占用50%以上负载,所以分载后性能甚至不如单核模式。
测试方案四 (多核分载正常关闭)
双核CPU,CPU1 仅创建Server, CPU3上创建1个Client,bPassiveForceClose=0,以太层使用异数OS软件交换机定向跨核转发。
总计ECHO IOPS 为1.5M ,软件交换机包交换能力26Mpps,相对快速关闭连接模式,在同样包转发能力下,性能下降25%左右。
总结
由于时间有限,简单看了下1400字节包的IO能力,性能大概降低有10%左右,由于软件交换机在单核环境中大概有20%的负载占用,多核更是达到50%,因此在真实硬件环境中预计每核有望达到4.0M的短链接能力,大概是主流操作系统IO能力的100倍左右,且主流操作系统一般IO能力不易多核扩充,下面是几种主流系统的单核ECHO对比,数据来自官网以及第三方测试,可比性可能不高,但也可做参考估算。
异数OS TCP单核短链接 | Seastar-Httpd短链接 | F-Stack nginx 短链接 | F-Stack nginx 长链接 | Asio epoll长连接 | Asio epoll短链接 |
400W | 32W | 9W | 20W | 14W(不可多核扩充) | 4W(不可多核扩充) |