epoll_wait()消耗太多CPU

时间:2017-12-04 09:49:00

标签: linux epoll strace

我的epoll_wait()消耗了太多的CPU,一个简单的strace显示:

    strace -c -f -p 3655
    Process 3655 attached with 5 threads
    ^CProcess 3655 detached
    Process 3656 detached
    Process 3657 detached
    Process 3658 detached
    Process 3659 detached
    % time     seconds  usecs/call     calls    errors syscall
    ------ ----------- ----------- --------- --------- ----------------
     64.43   32.228205      596819        54           epoll_wait
     35.31   17.661939          17   1063312    195547 futex
      0.26    0.131803           0    448140           gettimeofday
      0.00    0.000090           3        27           write
      0.00    0.000050           1        54           epoll_ctl
      0.00    0.000000           0        54        27 read
      0.00    0.000000           0         9           sendmsg
      0.00    0.000000           0        90        54 recvmsg
    ------ ----------- ----------- --------- --------- ----------------
    100.00   50.022087               1511740    195628 total

只有54个epoll_wait()调用,但是epoll_wait()的usecs /调用是596819,为什么?

1 个答案:

答案 0 :(得分:2)

在这种情况下,strace报告的时间有点误导。

strace(1)告诉我们:

  

-c为每个系统调用计算时间,调用和错误并报告a   程序退出摘要。在Linux上,这会尝试显示系统时间   (在内核中运行的CPU时间),与挂钟时间无关。

但我怀疑它实际上只是从epoll_wait被调用到返回的时间。这并不意味着您的进程在内核中为"running"。它更有可能是睡觉,这对于epoll_wait来说是很自然的。