Home | History | Annotate | Download | only in netinet
History log of /src/sys/netinet/tcp_vtw.h
RevisionDateAuthorComments
 1.11  07-Oct-2024  jakllsch Allow CACHE_LINE_SIZE 256 with uint64_t fatp_word_t
 1.10  11-Dec-2022  mlelstv branches: 1.10.8;
Need larger fat pointers for 128bit cache lines.
 1.9  19-Apr-2018  christos s/static inline/static __inline/g for consistency.
 1.8  13-Dec-2016  ozaki-r branches: 1.8.14;
Remove unnecessary inclusions of nd6.h
 1.7  26-Apr-2016  ozaki-r branches: 1.7.2;
Sweep unnecessary route.h inclusions
 1.6  23-Nov-2012  joerg branches: 1.6.2; 1.6.14;
Add RCS keyword. Avoid overflow in constant.
 1.5  07-Jun-2011  joerg branches: 1.5.2; 1.5.12;
Be a bit cleaner and reduce the amount of namespace pollution
 1.4  06-Jun-2011  dyoung Don't allocate resources for vtw until/unless it is enabled. This will
further help those machines where memory is in short supply.

TBD: release resources after vtw is disabled and all entries have
expired.
 1.3  17-May-2011  dholland branches: 1.3.2; 1.3.4; 1.3.6;
typo in comment
 1.2  03-May-2011  dyoung Remove #ifdef INET6 throughout.
 1.1  03-May-2011  dyoung Reduces the resources demanded by TCP sessions in TIME_WAIT-state using
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.
 1.3.6.2  06-Jun-2011  jruoho Sync with HEAD.
 1.3.6.1  17-May-2011  jruoho file tcp_vtw.h was added on branch jruoho-x86intr on 2011-06-06 09:09:57 +0000
 1.3.4.1  23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.3.2.3  12-Jun-2011  rmind sync with head
 1.3.2.2  31-May-2011  rmind sync with head
 1.3.2.1  17-May-2011  rmind file tcp_vtw.h was added on branch rmind-uvmplock on 2011-05-31 03:05:08 +0000
 1.5.12.2  03-Dec-2017  jdolecek update from HEAD
 1.5.12.1  25-Feb-2013  tls resync with head
 1.5.2.1  16-Jan-2013  yamt sync with (a bit old) head
 1.6.14.2  05-Feb-2017  skrll Sync with HEAD
 1.6.14.1  29-May-2016  skrll Sync with HEAD
 1.6.2.1  17-Jul-2013  rmind Checkpoint work in progress:
- Move PCB structures under __INPCB_PRIVATE, adjust most of the callers
and thus make IPv4 PCB structures mostly opaque. Any volunteers for
merging in6pcb with inpcb (see rpaulo-netinet-merge-pcb branch)?
- Move various global vars to the modules where they belong, make them static.
- Some preliminary work for IPv4 PCB locking scheme.
- Make raw IP code mostly MP-safe. Simplify some of it.
- Rework "fast" IP forwarding (ipflow) code to be mostly MP-safe. It should
run from a software interrupt, rather than hard.
- Rework tun(4) pseudo interface to be MP-safe.
- Work towards making some other interfaces more strict.
 1.7.2.1  07-Jan-2017  pgoyette Sync with HEAD. (Note that most of these changes are simply $NetBSD$
tag issues.)
 1.8.14.1  22-Apr-2018  pgoyette Sync with HEAD
 1.10.8.1  02-Aug-2025  perseant Sync with HEAD

RSS XML Feed