diff options
author | 2024-10-02 17:30:42 +0000 | |
---|---|---|
committer | 2024-10-04 15:34:40 -0700 | |
commit | 81df4fa94ee8c0800ed42c47357435602ed105ad (patch) | |
tree | df289ef19ee340cfcca7a6582f13037978ae706f /net/dsa/port.c | |
parent | tcp: add a fast path in tcp_write_timer() (diff) | |
download | wireguard-linux-81df4fa94ee8c0800ed42c47357435602ed105ad.tar.xz wireguard-linux-81df4fa94ee8c0800ed42c47357435602ed105ad.zip |
tcp: add a fast path in tcp_delack_timer()
delack timer is not stopped from inet_csk_clear_xmit_timer()
because we do not define INET_CSK_CLEAR_TIMERS.
This is a conscious choice : inet_csk_clear_xmit_timer()
is often called from another cpu. Calling del_timer()
would cause false sharing and lock contention.
This means that very often, tcp_delack_timer() is called
at the timer expiration, while there is no ACK to transmit.
This can be detected very early, avoiding the socket spinlock.
Notes:
- test about tp->compressed_ack is racy,
but in the unlikely case there is a race, the dedicated
compressed_ack_timer hrtimer would close it.
- Even if the fast path is not taken, reading
icsk->icsk_ack.pending and tp->compressed_ack
before acquiring the socket spinlock reduces
acquisition time and chances of contention.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20241002173042.917928-4-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/dsa/port.c')
0 files changed, 0 insertions, 0 deletions