techdoc centre
本站搜索 用户名: 密码:
   HOME  TECHDOC  WEB  SDK  NSDT  TOPIC  BIZDOC   LOGIN
  发布地区 Global 发布类别 TECHDOC Programming High-capability
字体:
  Epoll & Select性能比较测试
于 2017-10-10 编辑: Eric 查看: 2644 次   Article Url Print this page

测试程序分客户端(client)及服务端(server). 服务端分别以select和epoll两种I/O模型实现.

1.连接建立速度测试
某个时刻连续向server发起大量连接请求,比较两种I/O模型下Server端的连接接收速度。在客户端记录下连接数完全建立后所花费的时间.
操作步骤:
I.启动服务端程序.
Selectserver命令:(./SelectServer 192.168.0.30 8000 1>/dev/null)
EpollServer命令: (./EpollServer 192.168.0.30 8000 1>/dev/null)
参数1(192.168.0.30)为server绑定的IP, 参数2(8000)为server监听的端口号;
II.启动客户端程序
命令:./deadlink 192.168.0.30 8000 800
参数1(192.168.0.30)是server端的IP, 参数2(8000)是server监听的端口,参数3(800)是你想要建立连接的数量.等连接全部建立完毕后程序会自动打印出所花费的时间及成功建立的连接数.每个连接数量记录5组数据,去除一个最大及最小值后,取余下的3组数据的平均值作为最终结果.

2.数据传输性能测试
client 端创建若干线程,每个线程与server建立一个连接。连接建立后向server发送取数据请求,然后读取server端返回的数据.如此反复循环。每个 client请求server返回的数据字节数为1K(1024bytes)大小.当连接全部建立后,系统稳定下来,记录此时的服务程序对应的CPU占用率及内存使用率.每个连接数量记录下12组数据供分析使用.分析结果中将除去一个最大值及最小值,取余下的10组数据的平均值作为最终结果。
操作步骤:
I启动服务端
Selectserver命令:(./SelectServer 192.168.0.30 8000 1>/dev/null)
EpollServer命令: (./EpollServer 192.168.0.30 8000 1>/dev/null)
参数1(192.168.0.30)为server绑定的IP, 参数2(8000)为server监听的端口号;
II.启动客户端
命令: ./activelink 192.168.0.30 8000 800
参数1(192.168.0.30)是server端的IP, 参数2(8000)是server监听的端口,参数3(800)是你想要建立的线程数(连接数).因为每个线程建立一个连接,所以此数量亦即建立的连接数。
III. netstat –la | grep “192.168.0.250” | wc –l 查看连接数量,等待建立完成.此处192.168.0.250为客户端机器IP地址。
IV.连接全部建立后等待5-6分钟,待系统稳定下来后top查看并记录12 组Server 程序所占CPU/内存使用率.
1.2 测试平台说明
Server机器配置
CPU(处理器) Intel(R) Pentium(R) 4 CPU 2.40GHz, L2 cache size: 512 KB
RAM(内存) 248384kb, 约为242M
OS(操作系统) Redhat Linux 9.0, kernel 2.6.16-20
NIC(网卡) Realtek Semiconductor RTL-8139/8139C/8139C+ (rev 10), work on negotiated 100baseTx-FD

client机器配置
CPU(处理器) Intel(R) Pentium(R) 4 CPU 2.0GHz, L2 cache size: 512 KB
RAM(内存) 222948kb, 约为218M
OS(操作系统) Redhat Linux 9.0, kernel 2.4.20-8
NIC(网卡) VIA Technologies VT6102 [Rhine-II] (rev 74)
1.3 测试工具说明

Server端程序:
源代码文件:server.cpp (请用UE打开) ,运行make生成SelectServer 及 EpollServer可执行文件.

客户端程序:
源代码文件:deadlink.cpp, activelink.cpp(请用UE打开),运行make生成deadlink(接收连接速度测试客户端),activelink(数据传输测试客户端)

2 测试结果
2.1 接收连接速度测试结果
表 2 1接收连接速度测试结果
连接数IO模型 SelectServer(单位 秒s) EpollServer(单位 秒s)
100 0s 0s
200 0s 0s
300 6s 0s
400 14s 0s
500 24s 0s
600 36s 0.3s
700 48s 0s
800 59s 0s
900 72s 0s
1000 84s 0s

2.2 数据传输性能测试
表 2 2数据传输性能测试结果
连接数IO模型 SelectServer [cpu%, mem%] EpollServer [cpu%, mem%]
100 [28.06, 0.3] [21.74, 0.3]
200 [43.66, 0.3] [40.50, 0.3]
300 [47.09, 0.3] [42.73, 0.3]
400 [59.04, 0.3] [44.55, 0.3]
500 [54.44, 0.3] [51.00, 0.3]
600 [63.38, 0.3] [50.76, 0.3]
700 [65.77, 0.3] [51.47, 0.3]
800 [70.52, 0.3] [52.80, 0.3]

3.分析与结论
3.1 连接速度比较
SelectServer:在连接数为100-200时建立连接无明显的时间延迟,300时需要6s钟。以后随着连接数的增加所需要时间呈线性增加的趋势。连接数量越大,连接全部建立所需的时间越长
EpollServer:建立1000 以内的连接基本上无时延。在本例中受客户端所能打开的最大文件数限制,暂未对1000以上的连接数进行测试。

结论:Epoll比Select更高效.

3.2 传输性能比较
SelectServer:内存占用率一直维持在0.3%。随着连接数的增加,CPU占用率增加很明显。值得注意的是在连接数为500时出现了CPU占用率反而比400时小的情况。这可能是在连接数为400时观测时间间隔不够长,当时系统还未稳定下来的原因。总的趋势还是随着连接数的增大,CPU占用线性增长.
EpollServer:连接数由100跳至200时,400升至500时CPU占用率增大比较快,其它的间隔上随着连接数的增大,CPU占用率有少量的增加。

结论:在连接数达到600~1000时,Epoll的CPU占用率比Select少 12% ~ 17%左右。


网址: 相关网址

相关文章:

o 我所熟悉的网站负载均衡技术
o libevent源码分析
o LINUX下提高性能的三个系统调用
o 高性能服务器设计
o 提高 Linux 上 socket 性能
o 促进高效数据传输的TCP/IP选项
o 使用sendfile()让传输得到最优化
o The C10K problem
o 可伸缩的网络编程(Scalable Network Programming)
o 提高 Linux 上 socket 性能


   Search:

   

   Categories:

 Open All Close


Copyright techdoc.netsoftlab.ca powered by netsoft lab. 2007-2012  
Friend Websites:   netsoftlab.ca   cnstar.ca   CS lessions