HomeFreeBSD

Rework IPV6 TCP path MTU discovery to match IPv4

Description

Rework IPV6 TCP path MTU discovery to match IPv4

  • Re-write tcp_ctlinput6() to closely mimic the IPv4 tcp_ctlinput()
  • Now that tcp_ctlinput6() updates t_maxseg, we can allow ip6_output() to send TCP packets without looking at the tcp host cache for every single transmit.
  • Make the icmp6 code mimic the IPv4 code & avoid returning PRC_HOSTDEAD because it is so expensive.

Without these changes in place, every TCP6 pmtu discovery or host
unreachable ICMP resulted in a call to in6_pcbnotify() which walks the
tcbinfo table with the write lock held. Because the tcbinfo table is
shared between IPv4 and IPv6, this causes huge scalabilty issues on
servers with lots of (~100K) TCP connections, to the point where even
a small percent of IPv6 traffic had a disproportionate impact on
overall throughput.

Reviewed by: bz, rrs, ae (all earlier versions), lstewart (in Netflix's tree)
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D7272

Details

Provenance
gallatinAuthored on
Reviewer
bz
Differential Revision
D7272: Rework IPv6 TCP path MTU discovery to match IPv4
Parents
rS303625: indent(1): Use a dash in the license headers.
Branches
Unknown
Tags
Unknown