History log of /src/usr.bin/netstat/vtw.c |
Revision | | Date | Author | Comments |
1.13 |
| 01-Sep-2022 |
msaitoh | KNF. No functional change.
|
1.12 |
| 30-Oct-2021 |
nia | netstat(1): convert malloc(x * y) and realloc(x * y) to reallocarr
|
1.11 |
| 02-Mar-2021 |
simonb | Don't show any of the completely and utterly undocumented VTW info if the feature isn't enabled (by checking net.inet.tcp.vtw.enable).
|
1.10 |
| 03-May-2018 |
maxv | branches: 1.10.4; Remove now unused tcpip.h includes. Some were already unused before.
|
1.9 |
| 29-Feb-2016 |
christos | branches: 1.9.8; 1.9.14; PR/50873: David Binderman: use logical or instead of arithmetic
|
1.8 |
| 16-Jun-2015 |
christos | fix some error handling.
|
1.7 |
| 18-Oct-2013 |
christos | - avoid pointer gymnastics - remove unused variables
|
1.6 |
| 11-May-2011 |
drochner | branches: 1.6.4; 1.6.10; use getmicrouptime(9) rather than microtime(9) for TIME_WAIT duration calculation, because this doesn't get confused by system time changes, and uses less CPU cycles reviewed by dyoung
|
1.5 |
| 10-May-2011 |
enami | Use ptrdiff_t to hold pointer difference to avoid coredump on LP64 system.
|
1.4 |
| 04-May-2011 |
pgoyette | Use %zx for _both_ size_t formats!
|
1.3 |
| 04-May-2011 |
dyoung | On second thought, make a more conservative change: use %zx instead of %x for size_t.
|
1.2 |
| 04-May-2011 |
dyoung | Use %zu format for size_t instead of %x.
|
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.6.10.1 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.6.4.1 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.9.14.1 |
| 21-May-2018 |
pgoyette | Sync with HEAD
|
1.9.8.1 |
| 12-Sep-2022 |
martin | Pull up the following, requested by msaitoh in ticket #1762:
usr.bin/netstat/atalk.c 1.18,1.20-1.21 usr.bin/netstat/bpf.c 1.16 via patch usr.bin/netstat/fast_ipsec.c 1.24 via patch usr.bin/netstat/if.c 1.97-1.99,1.101-1.104 via patch usr.bin/netstat/inet.c 1.111,1.115-1.116 via patch usr.bin/netstat/inet6.c 1.70,1.74-1.75,1.80-1.81 via patch usr.bin/netstat/main.c 1.100,1.102-1.103 usr.bin/netstat/mbuf.c 1.34-1.35 usr.bin/netstat/mroute.c 1.26-1.27 usr.bin/netstat/mroute6.c 1.16 usr.bin/netstat/netstat.h 1.52-1.53 usr.bin/netstat/pfkey.c 1.4-1.5 via patch usr.bin/netstat/pfsync.c 1.4-1.5 via patch usr.bin/netstat/route.c 1.87-1.88 usr.bin/netstat/unix.c 1.36-1.37 usr.bin/netstat/vtw.c 1.11,1.13
- Add names of a few more ICMPv6 messages. Also make the array be explicitly 256 entries long. - sprintf() -> snprintf(), and adjust a buffer size to avoid any potential for overflow. - Add missing {IP,IP6}_STAT_NOIPSEC to netstat. - Don't show any of the completely and utterly undocumented VTW info if the feature isn't enabled. - Print oqdrops correctly. - netstat.1: Add various xrefs present in the body to "See Also". - Limit maximum owner name to appease gcc. - KNF. Style fixes.
|
1.10.4.1 |
| 12-Sep-2022 |
martin | Pull up the following, requested by msaitoh in ticket #1522:
usr.bin/netstat/atalk.c 1.18,1.20-1.21 usr.bin/netstat/bpf.c 1.16 via patch usr.bin/netstat/fast_ipsec.c 1.24 usr.bin/netstat/if.c 1.97-1.99,1.101-1.104 via patch usr.bin/netstat/inet.c 1.111,1.115-1.116 via patch usr.bin/netstat/inet6.c 1.74-1.75,1.80-1.81 via patch usr.bin/netstat/main.c 1.100-1.103 usr.bin/netstat/mbuf.c 1.35 usr.bin/netstat/mroute.c 1.26-1.27 usr.bin/netstat/mroute6.c 1.16 usr.bin/netstat/netstat.h 1.52-1.53 usr.bin/netstat/pfkey.c 1.4-1.5 via patch usr.bin/netstat/pfsync.c 1.4-1.5 via patch usr.bin/netstat/route.c 1.86-1.88 usr.bin/netstat/unix.c 1.36-1.37 usr.bin/netstat/vtw.c 1.11,1.13
- sprintf() -> snprintf(), and adjust a buffer size to avoid any potential for overflow. - Fix netstat -rs to print it correctly. - Add missing {IP,IP6}_STAT_NOIPSEC to netstat. - Don't show any of the completely and utterly undocumented VTW info if the feature isn't enabled. - Print oqdrops correctly. - Remove Network ATM soft intr queue reporting, we don't have that in the kernel anymore. - netstat.1: Add various xrefs present in the body to "See Also". - KNF. Style fixes.
|