summaryrefslogtreecommitdiffstats
path: root/include/linux/tcp.h
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2012-07-20 05:45:50 +0000
committerDavid S. Miller <davem@davemloft.net>2012-07-20 10:59:41 -0700
commit6f458dfb409272082c9bfa412f77ff2fc21c626f (patch)
tree7475cd12eb01023b9852cbc957080b9aa7cfdc64 /include/linux/tcp.h
parent9dc274151a548ffd215caecec5a8872db8799447 (diff)
downloadlinux-stable-6f458dfb409272082c9bfa412f77ff2fc21c626f.tar.gz
linux-stable-6f458dfb409272082c9bfa412f77ff2fc21c626f.tar.bz2
linux-stable-6f458dfb409272082c9bfa412f77ff2fc21c626f.zip
tcp: improve latencies of timer triggered events
Modern TCP stack highly depends on tcp_write_timer() having a small latency, but current implementation doesn't exactly meet the expectations. When a timer fires but finds the socket is owned by the user, it rearms itself for an additional delay hoping next run will be more successful. tcp_write_timer() for example uses a 50ms delay for next try, and it defeats many attempts to get predictable TCP behavior in term of latencies. Use the recently introduced tcp_release_cb(), so that the user owning the socket will call various handlers right before socket release. This will permit us to post a followup patch to address the tcp_tso_should_defer() syndrome (some deferred packets have to wait RTO timer to be transmitted, while cwnd should allow us to send them sooner) Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Tom Herbert <therbert@google.com> Cc: Yuchung Cheng <ycheng@google.com> Cc: Neal Cardwell <ncardwell@google.com> Cc: Nandita Dukkipati <nanditad@google.com> Cc: H.K. Jerry Chu <hkchu@google.com> Cc: John Heffner <johnwheffner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/tcp.h')
-rw-r--r--include/linux/tcp.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 9febfb685c33..2761856987b2 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -515,7 +515,9 @@ struct tcp_sock {
enum tsq_flags {
TSQ_THROTTLED,
TSQ_QUEUED,
- TSQ_OWNED, /* tcp_tasklet_func() found socket was locked */
+ TCP_TSQ_DEFERRED, /* tcp_tasklet_func() found socket was owned */
+ TCP_WRITE_TIMER_DEFERRED, /* tcp_write_timer() found socket was owned */
+ TCP_DELACK_TIMER_DEFERRED, /* tcp_delack_timer() found socket was owned */
};
static inline struct tcp_sock *tcp_sk(const struct sock *sk)