lkml.org 
[lkml]   [2009]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] tcp: splice as many packets as possible at once
    > From fafe76713523c8e9767805cfdc7b73323d7bf180 Mon Sep 17 00:00:00 2001
    > From: Willy Tarreau <w@1wt.eu>
    > Date: Thu, 8 Jan 2009 17:10:13 +0100
    > Subject: [PATCH] tcp: splice as many packets as possible at once
    >
    > Currently, in non-blocking mode, tcp_splice_read() returns after
    > splicing one segment regardless of the len argument. This results
    > in low performance and very high overhead due to syscall rate when
    > splicing from interfaces which do not support LRO.
    >
    > The fix simply consists in not breaking out of the loop after the
    > first read. That way, we can read up to the size requested by the
    > caller and still return when there is no data left.
    >
    > Performance has significantly improved with this fix, with the
    > number of calls to splice() divided by about 20, and CPU usage
    > dropped from 100% to 75%.
    >

    I get similar results with my testing here. Benchmarking an application
    with this patch shows that more than one packet is being splice()d in at
    once, as a result I see a doubling in throughput.

    Tested-by: Ben Mansell <ben@zeus.com>

    > Signed-off-by: Willy Tarreau <w@1wt.eu>
    > ---
    > net/ipv4/tcp.c | 2 +-
    > 1 files changed, 1 insertions(+), 1 deletions(-)
    >
    > diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
    > index 35bcddf..80261b4 100644
    > --- a/net/ipv4/tcp.c
    > +++ b/net/ipv4/tcp.c
    > @@ -615,7 +615,7 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos,
    > lock_sock(sk);
    >
    > if (sk->sk_err || sk->sk_state == TCP_CLOSE ||
    > - (sk->sk_shutdown & RCV_SHUTDOWN) || !timeo ||
    > + (sk->sk_shutdown & RCV_SHUTDOWN) ||
    > signal_pending(current))
    > break;
    > }



    \
     
     \ /
      Last update: 2009-01-08 22:55    [W:2.640 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site