epoll_wait 延迟较大

问题描述 投票:0回答:1

客户端和服务器运行在同一台机器上,客户端通过127.0.0.1连接到服务器
通过两个 send() 调用(标头和正文)发送消息,
服务器epoll_wait()和recv()数据,

问题是第二个wait()有40ms的延迟,这导致吞吐量低约11kB/s。

带有时间戳的客户端日志

[ 1585038.0005] start send 56  
[ 1585038.0006] end send 56  
[ 1585038.0006] start send 512  
[ 1585038.0006] end send 512  

服务器时间戳

[ 1585038.0002] epoll_wait 
[ 1585038.0006] start recv 56
[ 1585038.0006] recv return 56
[ 1585038.0006] start recv 512
[ 1585038.0006] recv return -1
[ 1585038.0006] epoll_wait
[ 1585038.0442] epoll_wait return 1
[ 1585038.0443] start recv 512
[ 1585038.0443] recv return 512

第二个 epoll_wait() 在 0.442 返回有 40ms 的延迟

linux epoll
1个回答
0
投票

我必须禁用 nagle 算法

int socket_set_nagle(int sock, int enable)
{
        int ret;

        ret = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int));
        if (ret < 0)
                ERROR("set socket nodelay option failed: %m\n");

        return ret;
}
© www.soinside.com 2019 - 2024. All rights reserved.