tcp: Revert "tcp: remove header prediction"
This reverts commit45f119bf93. Eric Dumazet says: We found at Google a significant regression caused by45f119bf93tcp: remove header prediction In typical RPC (TCP_RR), when a TCP socket receives data, we now call tcp_ack() while we used to not call it. This touches enough cache lines to cause a slowdown. so problem does not seem to be HP removal itself but the tcp_ack() call. Therefore, it might be possible to remove HP after all, provided one finds a way to elide tcp_ack for most cases. Reported-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c1d2b4c3e2
commit
31770e34e4
@@ -634,6 +634,29 @@ static inline u32 __tcp_set_rto(const struct tcp_sock *tp)
|
||||
return usecs_to_jiffies((tp->srtt_us >> 3) + tp->rttvar_us);
|
||||
}
|
||||
|
||||
static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
|
||||
{
|
||||
tp->pred_flags = htonl((tp->tcp_header_len << 26) |
|
||||
ntohl(TCP_FLAG_ACK) |
|
||||
snd_wnd);
|
||||
}
|
||||
|
||||
static inline void tcp_fast_path_on(struct tcp_sock *tp)
|
||||
{
|
||||
__tcp_fast_path_on(tp, tp->snd_wnd >> tp->rx_opt.snd_wscale);
|
||||
}
|
||||
|
||||
static inline void tcp_fast_path_check(struct sock *sk)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
if (RB_EMPTY_ROOT(&tp->out_of_order_queue) &&
|
||||
tp->rcv_wnd &&
|
||||
atomic_read(&sk->sk_rmem_alloc) < sk->sk_rcvbuf &&
|
||||
!tp->urg_data)
|
||||
tcp_fast_path_on(tp);
|
||||
}
|
||||
|
||||
/* Compute the actual rto_min value */
|
||||
static inline u32 tcp_rto_min(struct sock *sk)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user