mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 00:51:51 -04:00
tcp: move tcp_rack_advance() to tcp_input.c
tcp_rack_advance() is called from tcp_ack() and tcp_sacktag_one(). Moving it to tcp_input.c allows the compiler to inline it and save both space and cpu cycles in TCP fast path. $ scripts/bloat-o-meter -t vmlinux.1 vmlinux.2 add/remove: 0/2 grow/shrink: 1/1 up/down: 98/-132 (-34) Function old new delta tcp_ack 5741 5839 +98 tcp_sacktag_one 407 395 -12 __pfx_tcp_rack_advance 16 - -16 tcp_rack_advance 104 - -104 Total: Before=22572680, After=22572646, chg -0.00% Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com> Link: https://patch.msgid.link/20260127032147.3498272-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
629a68865a
commit
d5fb143dbe
@@ -2514,8 +2514,6 @@ void tcp_newreno_mark_lost(struct sock *sk, bool snd_una_advanced);
|
||||
extern s32 tcp_rack_skb_timeout(struct tcp_sock *tp, struct sk_buff *skb,
|
||||
u32 reo_wnd);
|
||||
extern bool tcp_rack_mark_lost(struct sock *sk);
|
||||
extern void tcp_rack_advance(struct tcp_sock *tp, u8 sacked, u32 end_seq,
|
||||
u64 xmit_time);
|
||||
extern void tcp_rack_reo_timeout(struct sock *sk);
|
||||
|
||||
/* tcp_plb.c */
|
||||
|
||||
@@ -1558,6 +1558,38 @@ static int tcp_match_skb_to_sack(struct sock *sk, struct sk_buff *skb,
|
||||
return in_sack;
|
||||
}
|
||||
|
||||
/* Record the most recently (re)sent time among the (s)acked packets
|
||||
* This is "Step 3: Advance RACK.xmit_time and update RACK.RTT" from
|
||||
* draft-cheng-tcpm-rack-00.txt
|
||||
*/
|
||||
static void tcp_rack_advance(struct tcp_sock *tp, u8 sacked,
|
||||
u32 end_seq, u64 xmit_time)
|
||||
{
|
||||
u32 rtt_us;
|
||||
|
||||
rtt_us = tcp_stamp_us_delta(tp->tcp_mstamp, xmit_time);
|
||||
if (rtt_us < tcp_min_rtt(tp) && (sacked & TCPCB_RETRANS)) {
|
||||
/* If the sacked packet was retransmitted, it's ambiguous
|
||||
* whether the retransmission or the original (or the prior
|
||||
* retransmission) was sacked.
|
||||
*
|
||||
* If the original is lost, there is no ambiguity. Otherwise
|
||||
* we assume the original can be delayed up to aRTT + min_rtt.
|
||||
* the aRTT term is bounded by the fast recovery or timeout,
|
||||
* so it's at least one RTT (i.e., retransmission is at least
|
||||
* an RTT later).
|
||||
*/
|
||||
return;
|
||||
}
|
||||
tp->rack.advanced = 1;
|
||||
tp->rack.rtt_us = rtt_us;
|
||||
if (tcp_skb_sent_after(xmit_time, tp->rack.mstamp,
|
||||
end_seq, tp->rack.end_seq)) {
|
||||
tp->rack.mstamp = xmit_time;
|
||||
tp->rack.end_seq = end_seq;
|
||||
}
|
||||
}
|
||||
|
||||
/* Mark the given newly-SACKed range as such, adjusting counters and hints. */
|
||||
static u8 tcp_sacktag_one(struct sock *sk,
|
||||
struct tcp_sacktag_state *state, u8 sacked,
|
||||
|
||||
@@ -111,38 +111,6 @@ bool tcp_rack_mark_lost(struct sock *sk)
|
||||
return !!timeout;
|
||||
}
|
||||
|
||||
/* Record the most recently (re)sent time among the (s)acked packets
|
||||
* This is "Step 3: Advance RACK.xmit_time and update RACK.RTT" from
|
||||
* draft-cheng-tcpm-rack-00.txt
|
||||
*/
|
||||
void tcp_rack_advance(struct tcp_sock *tp, u8 sacked, u32 end_seq,
|
||||
u64 xmit_time)
|
||||
{
|
||||
u32 rtt_us;
|
||||
|
||||
rtt_us = tcp_stamp_us_delta(tp->tcp_mstamp, xmit_time);
|
||||
if (rtt_us < tcp_min_rtt(tp) && (sacked & TCPCB_RETRANS)) {
|
||||
/* If the sacked packet was retransmitted, it's ambiguous
|
||||
* whether the retransmission or the original (or the prior
|
||||
* retransmission) was sacked.
|
||||
*
|
||||
* If the original is lost, there is no ambiguity. Otherwise
|
||||
* we assume the original can be delayed up to aRTT + min_rtt.
|
||||
* the aRTT term is bounded by the fast recovery or timeout,
|
||||
* so it's at least one RTT (i.e., retransmission is at least
|
||||
* an RTT later).
|
||||
*/
|
||||
return;
|
||||
}
|
||||
tp->rack.advanced = 1;
|
||||
tp->rack.rtt_us = rtt_us;
|
||||
if (tcp_skb_sent_after(xmit_time, tp->rack.mstamp,
|
||||
end_seq, tp->rack.end_seq)) {
|
||||
tp->rack.mstamp = xmit_time;
|
||||
tp->rack.end_seq = end_seq;
|
||||
}
|
||||
}
|
||||
|
||||
/* We have waited long enough to accommodate reordering. Mark the expired
|
||||
* packets lost and retransmit them.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user