David Anderson
623d72c83b
net/art: move child table pointers out of strideEntry
...
In preparation for a different refactor, but incidentally also saves
10-25% memory on overall table size in benchmarks.
Updates #7781
Signed-off-by: David Anderson <danderson@tailscale.com>
2023-08-16 12:17:25 -07:00
David Anderson
1e6f0bb608
net/art: fix slowPrefixTable bugs found by fuzzing
...
One is a straight "I forgot how to Go" bug, the others are semantic
mismatches with the main implementation around masking the prefixes
passed to insert/delete.
Updates #7781
Signed-off-by: David Anderson <danderson@tailscale.com>
2023-07-24 13:33:48 -07:00
David Anderson
aaca911904
net/art: add another consistency test for insert/delete
...
Updates #7781
Signed-off-by: David Anderson <danderson@tailscale.com>
2023-07-24 13:33:48 -07:00
David Anderson
b145a22f55
net/art: add more exhaustive table testing
...
Updates #7781
Signed-off-by: David Anderson <danderson@tailscale.com>
2023-07-24 13:33:48 -07:00
David Anderson
a5fd51ebdc
net/art: disable the IPv6 100k routes benchmark.
...
At the current unoptimized memory utilization of the various data structures,
100k IPv6 routes consumes in the ballpark of 3-4GiB, which risks OOMing our
386 test machine.
Until we have the optimizations to (drastically) reduce that consumption,
skip the test that bloats too much for 32-bit machines.
Signed-off-by: David Anderson <danderson@tailscale.com>
2023-04-13 09:04:17 -07:00
David Anderson
a7c910e361
net/art: implement the Table type, a multi-level art route table.
...
Updates #7781
│ sec/op │
TableInsertion/ipv4/10 1.562µ ± 2%
TableInsertion/ipv4/100 2.398µ ± 5%
TableInsertion/ipv4/1000 2.097µ ± 3%
TableInsertion/ipv4/10000 2.756µ ± 4%
TableInsertion/ipv4/100000 2.473µ ± 13%
TableInsertion/ipv6/10 7.649µ ± 2%
TableInsertion/ipv6/100 12.09µ ± 3%
TableInsertion/ipv6/1000 14.84µ ± 5%
TableInsertion/ipv6/10000 14.72µ ± 8%
TableInsertion/ipv6/100000 13.23µ ± 41%
TableDelete/ipv4/10 378.4n ± 5%
TableDelete/ipv4/100 366.9n ± 3%
TableDelete/ipv4/1000 418.6n ± 3%
TableDelete/ipv4/10000 609.2n ± 11%
TableDelete/ipv4/100000 679.2n ± 28%
TableDelete/ipv6/10 504.2n ± 4%
TableDelete/ipv6/100 959.5n ± 12%
TableDelete/ipv6/1000 1.436µ ± 6%
TableDelete/ipv6/10000 1.772µ ± 15%
TableDelete/ipv6/100000 1.172µ ± 113%
TableGet/ipv4/10 32.14n ± 11%
TableGet/ipv4/100 38.58n ± 2%
TableGet/ipv4/1000 45.03n ± 2%
TableGet/ipv4/10000 52.90n ± 7%
TableGet/ipv4/100000 135.2n ± 11%
TableGet/ipv6/10 41.55n ± 1%
TableGet/ipv6/100 44.78n ± 2%
TableGet/ipv6/1000 49.03n ± 2%
TableGet/ipv6/10000 65.38n ± 5%
TableGet/ipv6/100000 525.0n ± 39%
│ avg-B/op │
TableInsertion/ipv4/10 25.18Ki ± 0%
TableInsertion/ipv4/100 17.63Ki ± 0%
TableInsertion/ipv4/1000 14.14Ki ± 0%
TableInsertion/ipv4/10000 12.92Ki ± 0%
TableInsertion/ipv4/100000 11.13Ki ± 0%
TableInsertion/ipv6/10 76.87Ki ± 0%
TableInsertion/ipv6/100 98.33Ki ± 0%
TableInsertion/ipv6/1000 91.44Ki ± 0%
TableInsertion/ipv6/10000 90.39Ki ± 0%
TableInsertion/ipv6/100000 87.19Ki ± 0%
TableDelete/ipv4/10 3.230 ± 0%
TableDelete/ipv4/100 4.020 ± 0%
TableDelete/ipv4/1000 3.990 ± 0%
TableDelete/ipv4/10000 4.000 ± 0%
TableDelete/ipv4/100000 4.000 ± 0%
TableDelete/ipv6/10 16.00 ± 0%
TableDelete/ipv6/100 16.00 ± 0%
TableDelete/ipv6/1000 16.00 ± 0%
TableDelete/ipv6/10000 16.00 ± 0%
TableDelete/ipv6/100000 16.00 ± 0%
│ avg-allocs/op │
TableInsertion/ipv4/10 2.900 ± 0%
TableInsertion/ipv4/100 2.330 ± 0%
TableInsertion/ipv4/1000 2.070 ± 0%
TableInsertion/ipv4/10000 1.980 ± 0%
TableInsertion/ipv4/100000 1.840 ± 0%
TableInsertion/ipv6/10 6.800 ± 0%
TableInsertion/ipv6/100 8.420 ± 0%
TableInsertion/ipv6/1000 7.900 ± 0%
TableInsertion/ipv6/10000 7.820 ± 0%
TableInsertion/ipv6/100000 7.580 ± 0%
TableDelete/ipv4/10 1.000 ± 0%
TableDelete/ipv4/100 1.000 ± 0%
TableDelete/ipv4/1000 1.000 ± 0%
TableDelete/ipv4/10000 1.000 ± 0%
TableDelete/ipv4/100000 1.000 ± 0%
TableDelete/ipv6/10 1.000 ± 0%
TableDelete/ipv6/100 1.000 ± 0%
TableDelete/ipv6/1000 1.000 ± 0%
TableDelete/ipv6/10000 1.000 ± 0%
TableDelete/ipv6/100000 1.000 ± 0%
│ routes/s │
TableInsertion/ipv4/10 640.3k ± 2%
TableInsertion/ipv4/100 417.1k ± 5%
TableInsertion/ipv4/1000 477.0k ± 3%
TableInsertion/ipv4/10000 362.8k ± 5%
TableInsertion/ipv4/100000 404.5k ± 15%
TableInsertion/ipv6/10 130.7k ± 1%
TableInsertion/ipv6/100 82.69k ± 3%
TableInsertion/ipv6/1000 67.37k ± 5%
TableInsertion/ipv6/10000 67.93k ± 9%
TableInsertion/ipv6/100000 75.63k ± 29%
TableDelete/ipv4/10 2.642M ± 6%
TableDelete/ipv4/100 2.726M ± 3%
TableDelete/ipv4/1000 2.389M ± 3%
TableDelete/ipv4/10000 1.641M ± 12%
TableDelete/ipv4/100000 1.472M ± 27%
TableDelete/ipv6/10 1.984M ± 4%
TableDelete/ipv6/100 1.042M ± 11%
TableDelete/ipv6/1000 696.5k ± 6%
TableDelete/ipv6/10000 564.4k ± 13%
TableDelete/ipv6/100000 853.6k ± 53%
│ addrs/s │
TableGet/ipv4/10 31.11M ± 10%
TableGet/ipv4/100 25.92M ± 2%
TableGet/ipv4/1000 22.21M ± 2%
TableGet/ipv4/10000 18.91M ± 8%
TableGet/ipv4/100000 7.397M ± 12%
TableGet/ipv6/10 24.07M ± 1%
TableGet/ipv6/100 22.33M ± 2%
TableGet/ipv6/1000 20.40M ± 2%
TableGet/ipv6/10000 15.30M ± 5%
TableGet/ipv6/100000 1.905M ± 28%
│ B/op │
TableGet/ipv4/10 4.000 ± 0%
TableGet/ipv4/100 4.000 ± 0%
TableGet/ipv4/1000 4.000 ± 0%
TableGet/ipv4/10000 4.000 ± 0%
TableGet/ipv4/100000 4.000 ± 0%
TableGet/ipv6/10 16.00 ± 0%
TableGet/ipv6/100 16.00 ± 0%
TableGet/ipv6/1000 16.00 ± 0%
TableGet/ipv6/10000 16.00 ± 0%
TableGet/ipv6/100000 16.00 ± 0%
│ allocs/op │
TableGet/ipv4/10 1.000 ± 0%
TableGet/ipv4/100 1.000 ± 0%
TableGet/ipv4/1000 1.000 ± 0%
TableGet/ipv4/10000 1.000 ± 0%
TableGet/ipv4/100000 1.000 ± 0%
TableGet/ipv6/10 1.000 ± 0%
TableGet/ipv6/100 1.000 ± 0%
TableGet/ipv6/1000 1.000 ± 0%
TableGet/ipv6/10000 1.000 ± 0%
TableGet/ipv6/100000 1.000 ± 0%
Signed-off-by: David Anderson <danderson@tailscale.com>
2023-04-13 09:04:17 -07:00