• W
    tcp: splice as many packets as possible at once · 33966dd0
    Willy Tarreau 提交于
    As spotted by Willy Tarreau, current splice() from tcp socket to pipe is not
    optimal. It processes at most one segment per call.
    This results in low performance and very high overhead due to syscall rate
    when splicing from interfaces which do not support LRO.
    
    Willy provided a patch inside tcp_splice_read(), but a better fix
    is to let tcp_read_sock() process as many segments as possible, so
    that tcp_rcv_space_adjust() and tcp_cleanup_rbuf() are called less
    often.
    
    With this change, splice() behaves like tcp_recvmsg(), being able
    to consume many skbs in one system call. With typical 1460 bytes
    of payload per frame, that means splice(SPLICE_F_NONBLOCK) can return
    16*1460 = 23360 bytes.
    Signed-off-by: NWilly Tarreau <w@1wt.eu>
    Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    33966dd0
tcp.c 74.7 KB