]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
This change represents a substantial restructure of the way we
authorrrs <rrs@FreeBSD.org>
Mon, 20 Aug 2018 12:43:18 +0000 (12:43 +0000)
committerrrs <rrs@FreeBSD.org>
Mon, 20 Aug 2018 12:43:18 +0000 (12:43 +0000)
commitf87b4f427674e4cf87cd5c95115cc52ecfaa2b7e
treef4c64f901dc39e7492aafeef039f783b49d74946
parenta7ba1751af1db0267380eb07d7d35d4540cf35e2
This change represents a substantial restructure of the way we
reassembly inbound tcp segments. The old algorithm just blindly
dropped in segments without coalescing. This meant that every
segment could take up greater and greater room on the linked list
of segments. This of course is now subject to a tighter limit (100)
of segments which in a high BDP situation will cause us to be a
lot more in-efficent as we drop segments beyond 100 entries that
we receive. What this restructure does is cause the reassembly
buffer to coalesce segments putting an emphasis on the two
common cases (which avoid walking the list of segments) i.e.
where we add to the back of the queue of segments and where we
add to the front. We also have the reassembly buffer supporting
a couple of debug options (black box logging as well as counters
for code coverage). These are compiled out by default but can
be added by uncommenting the defines.

Sponsored by: Netflix Inc.
Differential Revision: https://reviews.freebsd.org/D16626
sys/netinet/tcp_input.c
sys/netinet/tcp_log_buf.h
sys/netinet/tcp_reass.c
sys/netinet/tcp_stacks/rack.c
sys/netinet/tcp_subr.c
sys/netinet/tcp_usrreq.c
sys/netinet/tcp_var.h