History log of /src/sys/netinet/tcp_vtw.h |
Revision | | Date | Author | Comments |
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
|