git: 71d2d5adfe18 - main - tcptw: count how many times a tcptw was actually useful
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 19 Dec 2021 16:23:07 UTC
The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=71d2d5adfe18e80e5f8afeb4f86ef69be1aaad81 commit 71d2d5adfe18e80e5f8afeb4f86ef69be1aaad81 Author: Gleb Smirnoff <glebius@FreeBSD.org> AuthorDate: 2021-12-19 16:22:12 +0000 Commit: Gleb Smirnoff <glebius@FreeBSD.org> CommitDate: 2021-12-19 16:22:12 +0000 tcptw: count how many times a tcptw was actually useful This will allow a sysadmin to lower net.inet.tcp.msl and see how long tcptw are actually useful. --- sys/netinet/tcp_timewait.c | 3 +++ sys/netinet/tcp_var.h | 5 +++++ usr.bin/netstat/inet.c | 14 ++++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c index f0ab77100336..999328df8392 100644 --- a/sys/netinet/tcp_timewait.c +++ b/sys/netinet/tcp_timewait.c @@ -462,6 +462,7 @@ tcp_twcheck(struct inpcb *inp, struct tcpopt *to, struct tcphdr *th, INP_TRY_UPGRADE(inp) == 0) goto drop; tcp_twclose(tw, 0); + TCPSTAT_INC(tcps_tw_recycles); return (1); } @@ -481,6 +482,7 @@ tcp_twcheck(struct inpcb *inp, struct tcpopt *to, struct tcphdr *th, th->th_seq+tlen, (tcp_seq)0, TH_RST|TH_ACK); } INP_UNLOCK(inp); + TCPSTAT_INC(tcps_tw_resets); return (0); } @@ -519,6 +521,7 @@ tcp_twcheck(struct inpcb *inp, struct tcpopt *to, struct tcphdr *th, th->th_seq != tw->rcv_nxt || th->th_ack != tw->snd_nxt) { TCP_PROBE5(receive, NULL, NULL, m, NULL, th); tcp_twrespond(tw, TH_ACK); + TCPSTAT_INC(tcps_tw_responds); goto dropnoprobe; } drop: diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h index 6b121a7fd311..c8e262ddf357 100644 --- a/sys/netinet/tcp_var.h +++ b/sys/netinet/tcp_var.h @@ -706,6 +706,11 @@ struct tcpstat { uint64_t tcps_dsack_bytes; /* Number of bytes DSACK'ed no TLP */ uint64_t tcps_dsack_tlp_bytes; /* Number of bytes DSACK'ed due to TLPs */ + /* TCPS_TIME_WAIT usage stats */ + uint64_t tcps_tw_recycles; /* Times time-wait was recycled. */ + uint64_t tcps_tw_resets; /* Times time-wait sent a reset. */ + uint64_t tcps_tw_responds; /* Times time-wait sent a valid ack. */ + uint64_t _pad[6]; /* 3 UTO, 3 TBD */ }; diff --git a/usr.bin/netstat/inet.c b/usr.bin/netstat/inet.c index dc777b0be990..b77447575911 100644 --- a/usr.bin/netstat/inet.c +++ b/usr.bin/netstat/inet.c @@ -857,13 +857,23 @@ tcp_stats(u_long off, const char *name, int af1 __unused, int proto __unused) "{N:/Path MTU discovery black hole detection min MSS activation%s}\n"); p(tcps_pmtud_blackhole_failed, "\t{:pmtud-failed/%ju} " "{N:/Path MTU discovery black hole detection failure%s}\n"); + + xo_close_container("pmtud"); + xo_open_container("tw"); + + p(tcps_tw_responds, "\t{:tw_responds/%ju} " + "{N:/time%s connection in TIME-WAIT responded with ACK}\n"); + p(tcps_tw_recycles, "\t{:tw_recycles/%ju} " + "{N:/time%s connection in TIME-WAIT was actively recycled}\n"); + p(tcps_tw_resets, "\t{:tw_resets/%ju} " + "{N:/time%s connection in TIME-WAIT responded with RST}\n"); + + xo_close_container("tw"); #undef p #undef p1a #undef p2 #undef p2a #undef p3 - xo_close_container("pmtud"); - xo_open_container("TCP connection count by state"); xo_emit("{T:/TCP connection count by state}:\n");