[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4A0A3E5A.6040702@cosmosbay.com>
Date: Wed, 13 May 2009 05:28:26 +0200
From: Eric Dumazet <dada1@...mosbay.com>
To: John Dykstra <john.dykstra1@...il.com>
CC: "David S. Miller" <davem@...emloft.net>,
Linux Netdev List <netdev@...r.kernel.org>
Subject: Re: [PATCH] tcp: tcp_prequeue() can use keyed wakeups
John Dykstra a écrit :
> On Thu, 2009-05-07 at 19:20 +0200, Eric Dumazet wrote:
>> We can avoid waking up tasks not interested in receive notifications,
>> using wake_up_interruptible_poll() instead of wake_up_interruptible()
>
> Is there any reason why we shouldn't do the same thing on the write
> side?
No special reason, apart that this event is not so frequent.
(For tcp, sock_wfree() doesnt call ->sk_write_space())
I wonder if sk_stream_write_space() is actually called at all, I never got it in profiles :)
I see it is called from setsockopt(SO_SNFBUF),
and from tcp_new_space() only if SOCK_NOSPACE was set.
To see a benefit of this patch, we would need two threads, one blocked in a recv(),
one blocked in a send() on same socket (or a poll/epoll user with same bi-directional trafic)
Acked-by: Eric Dumazet <dada1@...mosbay.com>
>
> Compile-tested only.
>
> -- John
>
> ---
> [PATCH net-next-2.6] tcp: Don't wake up reading threads on write space
>
> When TCP frees up write buffer space, avoid waking up tasks that have
> done a poll() or select() on the same socket specifying read-side
> events.
>
> This is an extension of a read-side patch by Eric Dumazet.
>
> Signed-off-by: John Dykstra <john.dykstra1@...il.com>
> ---
> net/core/stream.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/net/core/stream.c b/net/core/stream.c
> index 8727cea..a37debf 100644
> --- a/net/core/stream.c
> +++ b/net/core/stream.c
> @@ -33,7 +33,8 @@ void sk_stream_write_space(struct sock *sk)
> clear_bit(SOCK_NOSPACE, &sock->flags);
>
> if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
> - wake_up_interruptible(sk->sk_sleep);
> + wake_up_interruptible_poll(sk->sk_sleep, POLLOUT |
> + POLLWRNORM | POLLWRBAND);
> if (sock->fasync_list && !(sk->sk_shutdown & SEND_SHUTDOWN))
> sock_wake_async(sock, SOCK_WAKE_SPACE, POLL_OUT);
> }
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists