Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/netinet add a big comment
details: https://anonhg.NetBSD.org/src/rev/6227922cd8eb
branches: trunk
changeset: 778796:6227922cd8eb
user: yamt <yamt%NetBSD.org@localhost>
date: Fri Apr 13 15:37:12 2012 +0000
description:
add a big comment
(copy and paste from cvs log rev.1.1)
diffstat:
sys/netinet/tcp_vtw.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 49 insertions(+), 1 deletions(-)
diffs (67 lines):
diff -r c95c99a3597a -r 6227922cd8eb sys/netinet/tcp_vtw.c
--- a/sys/netinet/tcp_vtw.c Fri Apr 13 15:35:57 2012 +0000
+++ b/sys/netinet/tcp_vtw.c Fri Apr 13 15:37:12 2012 +0000
@@ -26,6 +26,54 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
+
+/*
+ * 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.
+ */
+
#include <sys/cdefs.h>
#include "opt_ddb.h"
@@ -76,7 +124,7 @@
#include <netinet/tcp_vtw.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_vtw.c,v 1.8 2011/07/17 20:54:53 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_vtw.c,v 1.9 2012/04/13 15:37:12 yamt Exp $");
#define db_trace(__a, __b) do { } while (/*CONSTCOND*/0)
Home |
Main Index |
Thread Index |
Old Index