epoll vs poll

来源:互联网 发布:centos下安装jdk1.7 编辑:程序博客网 时间:2024/06/05 07:21

测试目的:             证明epoll和poll在应用层相同的使用条件下,epoll的开销要明显的小于poll
                                                     Epoll采用ET模式

测试方法:
服务端,对连接过来的n个客户端只读取数据,系统调用只有poll和read, 或者epoll_wait和read, 便于分析。为了poll和epoll_wait调用的次数相等的目的,poll和epoll进程都采用相同的read策略, 即读取fd发生EAGIAN或者读取的实际数据小于读取空间的数据。均采用非堵塞io

客户端,采用长连接接入后, 不断发送数据, 采用堵塞方式。

测试行为:

客户端采用40个线程,不间断发送100字节,可以观察到网卡已经被占满

Iptraf检测到

Poll流量:  95165  kbits/s

Epoll流量: 97950  kbis/s
  

Poll:
系统调用占据了绝大多数的时间, 空闲很少
10:51:38 AM  CPU   %user   %nice %system   %idle    intr/s
10:51:39 AM  all    2.00    0.00   78.00   20.00  12362.00
10:51:40 AM  all    2.00    0.00   75.00   23.00  12366.00
10:51:41 AM  all    4.00    0.00   74.00   22.00  12355.00
10:51:42 AM  all    0.00    0.00   83.00   17.00  12352.00
10:51:43 AM  all    2.00    0.00   77.00   21.00  12341.00
10:51:44 AM  all    4.00    0.00   80.00   16.00  12348.00
10:51:45 AM  all    2.00    0.00   78.00   20.00  12350.00
10:51:46 AM  all    1.00    0.00   82.00   17.00  12360.00
10:51:47 AM  all    2.00    0.00   80.00   18.00  12365.00
10:51:48 AM  all    4.00    0.00   82.00   14.00  12305.00
10:51:49 AM  all    3.00    0.00   82.00   15.00  12309.00
10:51:50 AM  all    2.00    0.00   81.00   17.00  12338.00
10:51:51 AM  all    5.00    0.00   77.00   18.00  12339.00
10:51:52 AM  all    2.00    0.00   80.00   18.00  12205.00
10:51:53 AM  all    3.00    0.00   71.00   26.00  12324.00
10:51:54 AM  all    2.00    0.00   74.00   24.00  12424.00
10:51:55 AM  all    1.00    0.00   79.00   20.00  12356.00
10:51:56 AM  all    3.00    0.00   78.00   19.00  12342.00
10:51:57 AM  all    5.00    0.00   74.00   21.00  12337.00
10:51:58 AM  all    2.00    0.00   79.00   19.00  12342.00
10:51:59 AM  all    2.00    0.00   79.00   19.00  12336.00
10:52:00 AM  all    6.00    0.00   70.00   24.00  12330.00
10:52:01 AM  all    6.00    0.00   74.00   20.00  12334.00
10:52:02 AM  all    3.00    0.00   74.00   23.00  12332.00
10:52:03 AM  all    2.00    0.00   77.00   21.00  12374.00
10:52:04 AM  all    3.00    0.00   77.00   20.00  12332.00
10:52:05 AM  all    0.00    0.00   78.00   22.00  12339.00
10:52:06 AM  all    0.00    0.00   80.00   20.00  12345.00
10:52:07 AM  all    5.00    0.00   75.00   20.00  12355.00
10:52:08 AM  all    3.00    0.00   77.00   20.00  12349.00
10:52:09 AM  all    1.00    0.00   81.00   18.00  12350.00
10:52:10 AM  all    3.00    0.00   76.00   21.00  12349.00
10:52:11 AM  all    8.00    0.00   74.00   18.00  12376.00

Epoll:

10:55:30 AM  CPU   %user   %nice %system   %idle    intr/s
10:55:31 AM  all    2.00    0.00   23.00   75.00  12333.00
10:55:32 AM  all    3.00    0.00   23.00   74.00  12374.00
10:55:33 AM  all    3.00    0.00   24.00   73.00  12334.00
10:55:34 AM  all    1.00    0.00   24.00   75.00  12352.00
10:55:35 AM  all    5.00    0.00   21.00   74.00  12389.00
10:55:36 AM  all    2.00    0.00   24.00   74.00  12351.00
10:55:37 AM  all    2.00    0.00   25.00   73.00  12353.00
10:55:38 AM  all    2.00    0.00   24.00   74.00  12341.00
10:55:39 AM  all    2.00    0.00   24.00   74.00  12355.00
10:55:40 AM  all    4.00    0.00   26.00   70.00  12370.00
10:55:41 AM  all    2.00    0.00   24.00   74.00  12343.00
10:55:42 AM  all    2.00    0.00   30.00   68.00  12337.00
10:55:43 AM  all    0.00    0.00   26.00   74.00  12340.00
10:55:44 AM  all    1.00    0.00   25.00   74.00  12341.00
10:55:45 AM  all    0.00    0.00   26.00   74.00  12353.00
10:55:46 AM  all    1.00    0.00   18.00   81.00  12346.00
10:55:47 AM  all    1.00    0.00   27.00   72.00  12377.00
10:55:48 AM  all    1.00    0.00   24.00   75.00  12361.00
10:55:49 AM  all    1.00    0.00   27.00   72.00  12348.00
10:55:50 AM  all    1.00    0.00   25.00   74.00  12345.00
10:55:51 AM  all    1.00    0.00   30.00   69.00  12342.00
10:55:52 AM  all    1.00    0.00   29.00   70.00  12343.00
10:55:53 AM  all    2.00    0.00   23.00   75.00  12334.00
10:55:54 AM  all    2.00    0.00   23.00   75.00  12340.00
10:55:55 AM  all    2.00    0.00   21.00   77.00  12367.00
10:55:56 AM  all    1.00    0.00   27.00   72.00  12363.00
10:55:57 AM  all    1.00    0.00   23.00   76.00  12349.00
10:55:58 AM  all    2.00    0.00   21.00   77.00  12340.00
10:55:59 AM  all    1.00    0.00   22.00   77.00  12342.00
10:56:00 AM  all    1.00    0.00   27.00   72.00  12352.00
10:56:01 AM  all    2.00    0.00   24.00   74.00  12357.00
10:56:02 AM  all    1.00    0.00   28.00   71.00  12346.00
10:56:03 AM  all    3.00    0.00   24.00   73.00  12314.00

Top:

Poll:
22105 loki      16   0   852  848   756 R    56.9  0.3   1:07   0 pollserver
21802 loki       9   0   608  608   552 S     0.9  0.2   0:00   0 mpstat

Epoll:
22108 loki      14   0   904  900   808 R     9.9  0.3   0:24   0 epollserver
22110 loki      11   0  1168 1168   884 R     0.5  0.4   0:00   0 top


Strac
Poll的系统调用统计结果:
strace -c ./pollserver
execve("./pollserver", ["./pollserver"], [/* 28 vars */]) = 0
ServerTest listen success!
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 54.95    8.240026          74    111511           poll
 45.03    6.751312          19    347887           read

 


Epoll的系统调用统计结果:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 55.78    9.780626          30    323798           epoll_wait
 44.20    7.749433          12    654077           read

Poll和epoll的I/O复用函数的调用比例基本是一致的,流量也是一样的,基本将网卡塞满

但是观察top,和mpstat的结果, 明显epoll的系统调用要强于poll


 

原创粉丝点击