You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/net
Brad Fitzpatrick 64ac64fb66 net/tsaddr: use bart in NewContainsIPFunc, add tests, benchmarks
NewContainsIPFunc was previously documented as performing poorly if
there were many netip.Prefixes to search over. As such, we never it used it
in such cases.

This updates it to use bart at a certain threshold (over 6 prefixes,
currently), at which point the bart lookup overhead pays off.

This is currently kinda useless because we're not using it. But now we
can and get wins elsewhere. And we can remove the caveat in the docs.

    goos: darwin
    goarch: arm64
    pkg: tailscale.com/net/tsaddr
                                     │    before    │                after                 │
                                     │    sec/op    │    sec/op     vs base                │
    NewContainsIPFunc/empty-8          2.215n ± 11%   2.239n ±  1%   +1.08% (p=0.022 n=10)
    NewContainsIPFunc/cidr-list-1-8    17.44n ±  0%   17.59n ±  6%   +0.89% (p=0.000 n=10)
    NewContainsIPFunc/cidr-list-2-8    27.85n ±  0%   28.13n ±  1%   +1.01% (p=0.000 n=10)
    NewContainsIPFunc/cidr-list-3-8    36.05n ±  0%   36.56n ± 13%   +1.41% (p=0.000 n=10)
    NewContainsIPFunc/cidr-list-4-8    43.73n ±  0%   44.38n ±  1%   +1.50% (p=0.000 n=10)
    NewContainsIPFunc/cidr-list-5-8    51.61n ±  2%   51.75n ±  0%        ~ (p=0.101 n=10)
    NewContainsIPFunc/cidr-list-10-8   95.65n ±  0%   68.92n ±  0%  -27.94% (p=0.000 n=10)
    NewContainsIPFunc/one-ip-8         4.466n ±  0%   4.469n ±  1%        ~ (p=0.491 n=10)
    NewContainsIPFunc/two-ip-8         8.002n ±  1%   7.997n ±  4%        ~ (p=0.697 n=10)
    NewContainsIPFunc/three-ip-8       27.98n ±  1%   27.75n ±  0%   -0.82% (p=0.012 n=10)
    geomean                            19.60n         19.07n         -2.71%

Updates #12486

Change-Id: I2e2320cc4384f875f41721374da536bab995c1ce
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
5 months ago
..
art all: use Go 1.22 range-over-int 7 months ago
connstats all: use Go 1.22 range-over-int 7 months ago
dns various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 5 months ago
dnscache net/dnscache: use parent context to perform lookup 5 months ago
dnsfallback tsd, ipnlocal, etc: add tsd.System.HealthTracker, start some plumbing 7 months ago
flowtrack all: update copyright and license headers 2 years ago
ktimeout net/ktimeout: add a package to set TCP user timeout 9 months ago
memnet net/memnet: export the network name (#9111) 1 year ago
netaddr all: update copyright and license headers 2 years ago
netcheck net/netcheck: fix probeProto.String result for IPv6 probes 5 months ago
neterror net/neterror, wgengine/magicsock: use UDP GSO and GRO on Linux (#7791) 2 years ago
netkernelconf ipn/{ipnlocal,localapi},net/netkernelconf,client/tailscale,cmd/containerboot: optionally enable UDP GRO forwarding for containers (#12410) 5 months ago
netknob all: update copyright and license headers 2 years ago
netmon net/netmon: remove spammy log statements (#11953) 7 months ago
netns net/{interfaces,netmon}, all: merge net/interfaces package into net/netmon 7 months ago
netstat net/{netns,netstat}: use new x/sys/cpu.IsBigEndian 2 years ago
netutil net/netmon, add: add netmon.State type alias of interfaces.State 7 months ago
packet all: use Go 1.22 range-over-int 7 months ago
ping net/ping: fix ICMP echo code field to 0 1 year ago
portmapper all: use math/rand/v2 more 6 months ago
proxymux all: cleanup unused code, part 1 (#10661) 11 months ago
routetable net/{interfaces,netmon}, all: merge net/interfaces package into net/netmon 7 months ago
socks5 net/socks5: add password auth support 2 years ago
sockstats net/{interfaces,netmon}, all: merge net/interfaces package into net/netmon 7 months ago
speedtest all: update copyright and license headers 2 years ago
stun derp/xdp,cmd/xdpderper: initial skeleton (#12390) 5 months ago
stunserver all: use Go 1.22 range-over-int 7 months ago
tcpinfo all: use Go 1.22 range-over-int 7 months ago
tlsdial tsd, ipnlocal, etc: add tsd.System.HealthTracker, start some plumbing 7 months ago
tsaddr net/tsaddr: use bart in NewContainsIPFunc, add tests, benchmarks 5 months ago
tsdial tsnet,wgengine/netstack: add ListenPacket and tests 6 months ago
tshttpproxy all: use Go 1.22 range-over-int 7 months ago
tstun net/tstun: do SNAT after filterPacketOutboundToWireGuard 6 months ago
wsconn net/wsconn: accept a remote addr string and plumb it through 1 year ago