c2e43be1c5
methods called Vestigial Time-Wait (VTW) and Maximum Segment Lifetime Truncation (MSLT). MSLT and VTW were contributed by Coyote Point Systems, Inc. Even after a TCP session enters the TIME_WAIT state, its corresponding socket and protocol control blocks (PCBs) stick around until the TCP Maximum Segment Lifetime (MSL) expires. On a host whose workload necessarily creates and closes down many TCP sockets, the sockets & PCBs for TCP sessions in TIME_WAIT state amount to many megabytes of dead weight in RAM. Maximum Segment Lifetimes Truncation (MSLT) assigns each TCP session to a class based on the nearness of the peer. Corresponding to each class is an MSL, and a session uses the MSL of its class. The classes are loopback (local host equals remote host), local (local host and remote host are on the same link/subnet), and remote (local host and remote host communicate via one or more gateways). Classes corresponding to nearer peers have lower MSLs by default: 2 seconds for loopback, 10 seconds for local, 60 seconds for remote. Loopback and local sessions expire more quickly when MSLT is used. Vestigial Time-Wait (VTW) replaces a TIME_WAIT session's PCB/socket dead weight with a compact representation of the session, called a "vestigial PCB". VTW data structures are designed to be very fast and memory-efficient: for fast insertion and lookup of vestigial PCBs, the PCBs are stored in a hash table that is designed to minimize the number of cacheline visits per lookup/insertion. The memory both for vestigial PCBs and for elements of the PCB hashtable come from fixed-size pools, and linked data structures exploit this to conserve memory by representing references with a narrow index/offset from the start of a pool instead of a pointer. When space for new vestigial PCBs runs out, VTW makes room by discarding old vestigial PCBs, oldest first. VTW cooperates with MSLT. It may help to think of VTW as a "FIN cache" by analogy to the SYN cache. A 2.8-GHz Pentium 4 running a test workload that creates TIME_WAIT sessions as fast as it can is approximately 17% idle when VTW is active versus 0% idle when VTW is inactive. It has 103 megabytes more free RAM when VTW is active (approximately 64k vestigial PCBs are created) than when it is inactive.
46 lines
1.3 KiB
Plaintext
46 lines
1.3 KiB
Plaintext
# $NetBSD: files.netinet,v 1.22 2011/05/03 18:28:45 dyoung Exp $
|
|
|
|
defflag opt_tcp_debug.h TCP_DEBUG
|
|
defparam opt_tcp_debug.h TCP_NDEBUG
|
|
defflag opt_inet.h INET INET6 TCP_SIGNATURE
|
|
TCP_OUTPUT_COUNTERS TCP_REASS_COUNTERS IPSELSRC
|
|
defparam opt_inet_conf.h SUBNETSARELOCAL HOSTZEROBROADCAST
|
|
|
|
defflag MROUTING
|
|
defflag PIM
|
|
defflag TCP_COMPAT_42
|
|
|
|
defparam opt_tcp_space.h TCP_RECVSPACE TCP_SENDSPACE
|
|
|
|
defflag opt_inet_csum.h INET_CSUM_COUNTERS TCP_CSUM_COUNTERS
|
|
UDP_CSUM_COUNTERS
|
|
|
|
defparam opt_tcp_congctl.h TCP_CONGCTL_DEFAULT
|
|
|
|
file netinet/igmp.c inet
|
|
file netinet/in.c inet
|
|
file netinet/in_offload.c inet
|
|
file netinet/in_pcb.c inet
|
|
file netinet/in_proto.c inet
|
|
file netinet/in_selsrc.c inet & ipselsrc
|
|
file netinet/ip_flow.c inet & gateway
|
|
file netinet/ip_icmp.c inet
|
|
file netinet/ip_id.c inet
|
|
file netinet/ip_input.c inet
|
|
file netinet/ip_mroute.c inet & mrouting
|
|
file netinet/ip_output.c inet
|
|
file netinet/ip_reass.c inet
|
|
file netinet/raw_ip.c inet
|
|
|
|
file netinet/tcp_debug.c (inet | inet6) & tcp_debug
|
|
file netinet/tcp_input.c inet | inet6
|
|
file netinet/tcp_output.c inet | inet6
|
|
file netinet/tcp_sack.c inet | inet6
|
|
file netinet/tcp_subr.c inet | inet6
|
|
file netinet/tcp_timer.c inet | inet6
|
|
file netinet/tcp_usrreq.c inet | inet6
|
|
file netinet/tcp_congctl.c inet | inet6
|
|
file netinet/tcp_vtw.c inet | inet6
|
|
|
|
file netinet/udp_usrreq.c inet | inet6
|