tailscale/cmd
Joe Tsai 2e5d08ec4f
net/connstats: invert network logging data flow (#6272)
Previously, tstun.Wrapper and magicsock.Conn managed their
own statistics data structure and relied on an external call to
Extract to extract (and reset) the statistics.
This makes it difficult to ensure a maximum size on the statistics
as the caller has no introspection into whether the number
of unique connections is getting too large.

Invert the control flow such that a *connstats.Statistics
is registered with tstun.Wrapper and magicsock.Conn.
Methods on non-nil *connstats.Statistics are called for every packet.
This allows the implementation of connstats.Statistics (in the future)
to better control when it needs to flush to ensure
bounds on maximum sizes.

The value registered into tstun.Wrapper and magicsock.Conn could
be an interface, but that has two performance detriments:

1. Method calls on interface values are more expensive since
they must go through a virtual method dispatch.

2. The implementation would need a sync.Mutex to protect the
statistics value instead of using an atomic.Pointer.

Given that methods on constats.Statistics are called for every packet,
we want reduce the CPU cost on this hot path.

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
2022-11-28 15:59:33 -08:00
..
addlicense cmd/addlicense: add command to add licenseheaders to generated code 2021-07-19 15:31:56 -07:00
cloner cmd/{cloner,viewer}: add support for map values with pointers 2022-08-03 13:02:17 -07:00
containerboot all: standardize on LocalAPI 2022-11-16 23:15:24 +05:00
derper ipn/ipnauth, util/winutil: add temporary LookupPseudoUser workaround to address os/user.LookupId errors on Windows 2022-11-28 15:53:34 -06:00
derpprobe cmd/derpprobe: add -once flag for one-off CLI diagnostics 2022-11-23 17:41:12 -08:00
gitops-pusher cmd/gitops-pusher: standardize hujson before posting to validate (#5525) 2022-09-01 13:38:32 -04:00
hello refactor: move from io/ioutil to io and os packages 2022-09-15 21:45:53 -07:00
mkmanifest cmd/{tailscale,tailscaled}: embed manifest into Windows binaries 2022-11-21 18:15:51 -05:00
mkpkg cmd/mkpkg: use package flag (#4373) 2022-04-07 16:38:33 -04:00
netlogfmt cmd/netlogfmt: handle any stream of network logs (#6108) 2022-10-28 10:40:45 -07:00
nginx-auth cmd/nginx-auth: add experimental status badge to README 2022-10-25 11:03:40 -07:00
pgproxy cmd/pgproxy: link to blog post at the top. 2022-10-04 16:47:12 -07:00
printdep Docker: add ALPINE.txt to manage alpine versions 2022-06-29 11:47:09 -07:00
proxy-to-grafana all: gofmt for Go 1.19 2022-08-02 10:08:05 -07:00
speedtest net/speedtest: retune to meet iperf on localhost in a VM 2022-09-23 10:46:04 -07:00
ssh-auth-none-demo ssh/tailssh: add password-forcing workaround for buggy SSH clients 2022-10-11 15:03:02 -07:00
stunc cmd/stunc: add command for making debug stun requests 2022-11-23 15:38:54 -08:00
tailscale cmd/tailscale,ipn: improve UX of lock init command, cosmetic changes 2022-11-28 10:39:04 -08:00
tailscaled net/connstats: invert network logging data flow (#6272) 2022-11-28 15:59:33 -08:00
testcontrol all: use any instead of interface{} 2022-03-17 11:35:09 -07:00
tsconnect ipn/ipnserver: change Server to let LocalBackend be supplied async 2022-11-28 09:48:33 -08:00
tsshd all: remove old +build tags 2022-11-04 07:25:42 -07:00
viewer all: fix spelling mistakes 2022-09-29 13:36:13 -07:00