测试epoll、io_uring的百万连接、建连、qps,以及qps客户端的实现
一、如何实现一个tcp_qps_client?
1.功能分析:
./tcp_qps_client -s 192.168.202.130 -p 9999 -t 50 -c 100 -n 1000000
开辟50个线程,100条连接,共发送100w个请求
2.实现流程:
参数解析--getopt(argc,argv,"s:p:t:c:n:?");
参数存储到--struct context_s结构体
循环开辟多个线程--pthread_create(&ptid,NULL,test_qps_entry,&ctx);
循环等待线程结束--pthread_join(ptid,NULL);
回调函数--test_qps_entry(char *ip,unsigned short port)--创建连接、收发数据
从开辟线程开始计时,到所有线程结束,结束计时
请求数/线程数=每个线程发送请求数
3.具体代码实现:
二、测试io同步处理的epoll、io异步处理的io_uring的百万并发、建连、qps?
服务器分别采用基于epoll实现的reactor、io_uring_server
均开放100个端口
epoll总积、io_uring的环形队列都设置为1024
1.百万连接测试
io同步处理的epoll_reactor:
io异步处理的io_uring:
对比:两个服务器都能实现百万连接,用时8min多
50w连接时,io异步处理的io_uring 比 io同步处理的epol_reactor 快8s
100w连接时,io异步处理的io_uring 比 io同步处理的epol_reactor 快16s
可见,异步处理的建连更快
2.qps测试
50线程 100w请求 数据包大小分别为64字节、128字节、256字节、512字节
对比:
64-512字节的数据包大小的变化 对qps影响不大
50线程 100w请求 异步的io_uring比同步epoll快2-3s
可见,异步处理qps更快