HomeFreeBSD

tcp_input/syncache: acquire only read lock on PCB for SYN,!ACK packets

Description

tcp_input/syncache: acquire only read lock on PCB for SYN,!ACK packets

When packet is a SYN packet, we don't need to modify any existing PCB.
Normally SYN arrives on a listening socket, we either create a syncache
entry or generate syncookie, but we don't modify anything with the
listening socket or associated PCB. Thus create a new PCB lookup
mode - rlock if listening. This removes the primary contention point
under SYN flood - the listening socket PCB.

Sidenote: when SYN arrives on a synchronized connection, we still
don't need write access to PCB to send a challenge ACK or just to
drop. There is only one exclusion - tcptw recycling. However,
existing entanglement of tcp_input + stacks doesn't allow to make
this change small. Consider this patch as first approach to the problem.

Reviewed by: rrs
Differential revision: https://reviews.freebsd.org/D29576

Details

Provenance
glebiusAuthored on Mar 19 2021, 2:06 AM
Reviewer
rrs
Differential Revision
D29576: First take on syn-rlock.
Parents
R10:0c6282e842b3: bhyve: add SMBIOS Baseboard Information
Branches
Unknown
Tags
Unknown