Skip to content

benchmarks for some golang IP routing table implementations

License

Notifications You must be signed in to change notification settings

gaissmai/iprbench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iprbench

comparing benchmarks for some golang IP routing table implementations:

	github.com/gaissmai/bart
	github.com/tailscale/art
	github.com/aromatt/netipds  <<< new kid around the block
	github.com/k-sone/critbitgo
	github.com/Asphaltt/lpmtrie
	github.com/yl2chen/cidranger
	github.com/gaissmai/cidrtree

The ~1_000_000 Tier1 prefix test records (IPv4 and IPv6 routes) are from a full routing table with typical ISP prefix distribution.

In comparison, the prefix lengths for the random test sets are equally distributed between /2-32 for IPv4 and /2-128 bits for IPv6, the randomly generated default-routes with prefix length 0 have been sorted out, they distorts the lookup times and there is no lookup miss at all.

The RandomPrefixes without IP versions labeling are composed of a distribution of 4 parts IPv4 to 1 part IPv6 prefixes, which is approximately the current ratio in the Internet backbone routers.

make your own benchmarks

  $ make dep
  $ make -B all   # takes some time!

lpm (longest-prefix-match)

bart is the fastest software algorithm for IP address lookup in routing tables.

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                                     │  bart/lpm.bm  │               art/lpm.bm               │
                                     │    sec/op     │    sec/op      vs base                 │
LpmTier1Pfxs/RandomMatchIP4            26.56n ±   6%    42.69n ± 12%   +60.71% (p=0.000 n=20)
LpmTier1Pfxs/RandomMatchIP6            25.54n ±  25%    44.90n ±  4%   +75.82% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP4             27.61n ±  51%    25.99n ±  7%         ~ (p=0.507 n=20)
LpmTier1Pfxs/RandomMissIP6             6.525n ±   2%   26.725n ±  3%  +309.58% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP4     21.46n ±  66%    41.33n ±  3%   +92.59% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP6     16.68n ±   5%    44.02n ±  3%  +163.94% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP4      23.58n ±   9%    26.35n ±  7%   +11.75% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP6      17.55n ±  14%    25.96n ±  5%   +47.91% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP4    24.35n ±  55%    40.52n ±  2%   +66.44% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP6    11.34n ±  96%    42.74n ±  1%  +277.11% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP4     27.98n ±   4%    26.66n ±  7%         ~ (p=0.101 n=20)
LpmRandomPfxs/10_000/RandomMissIP6     23.63n ±   6%    26.35n ±  5%   +11.49% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP4   10.98n ± 107%    50.00n ±  9%  +355.37% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP6   24.97n ±  57%    44.02n ±  6%   +76.29% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP4    38.63n ±   8%    26.26n ±  8%   -32.02% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP6    27.89n ±  25%    25.47n ± 12%    -8.69% (p=0.031 n=20)
geomean                                20.50n           33.85n         +65.08%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                                     │  bart/lpm.bm  │             netipds/lpm.bm             │
                                     │    sec/op     │    sec/op      vs base                 │
LpmTier1Pfxs/RandomMatchIP4            26.56n ±   6%    43.61n ±  8%   +64.19% (p=0.000 n=20)
LpmTier1Pfxs/RandomMatchIP6            25.54n ±  25%    40.29n ± 21%   +57.80% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP4             27.61n ±  51%    53.70n ± 11%   +94.48% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP6             6.525n ±   2%   39.560n ± 60%  +506.28% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP4     21.46n ±  66%    36.80n ±  1%   +71.48% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP6     16.68n ±   5%    32.58n ± 11%   +95.32% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP4      23.58n ±   9%    48.93n ±  3%  +107.51% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP6      17.55n ±  14%    29.45n ±  6%   +67.73% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP4    24.35n ±  55%    43.17n ± 24%   +77.35% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP6    11.34n ±  96%    33.70n ±  6%  +197.35% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP4     27.98n ±   4%    62.01n ±  3%  +121.58% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP6     23.63n ±   6%    36.35n ±  4%   +53.80% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP4   10.98n ± 107%    40.13n ±  1%  +265.53% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP6   24.97n ±  57%    30.54n ± 19%   +22.33% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP4    38.63n ±   8%    39.37n ±  1%    +1.90% (p=0.044 n=20)
LpmRandomPfxs/100_000/RandomMissIP6    27.89n ±  25%    46.50n ±  8%   +66.70% (p=0.000 n=20)
geomean                                20.50n           40.25n         +96.30%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                                     │  bart/lpm.bm  │             critbitgo/lpm.bm             │
                                     │    sec/op     │     sec/op      vs base                  │
LpmTier1Pfxs/RandomMatchIP4            26.56n ±   6%    116.35n ± 22%   +338.06% (p=0.000 n=20)
LpmTier1Pfxs/RandomMatchIP6            25.54n ±  25%    170.65n ± 24%   +568.30% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP4             27.61n ±  51%    649.85n ± 18%  +2253.68% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP6             6.525n ±   2%   361.250n ± 32%  +5436.40% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP4     21.46n ±  66%     96.07n ± 10%   +347.67% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP6     16.68n ±   5%    103.50n ±  5%   +520.50% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP4      23.58n ±   9%    154.70n ± 14%   +556.06% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP6      17.55n ±  14%    152.80n ±  6%   +770.41% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP4    24.35n ±  55%    106.05n ± 11%   +335.61% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP6    11.34n ±  96%    159.25n ± 17%  +1304.94% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP4     27.98n ±   4%    252.75n ± 16%   +803.16% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP6     23.63n ±   6%    201.90n ± 13%   +754.24% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP4   10.98n ± 107%    158.50n ± 36%  +1343.53% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP6   24.97n ±  57%    170.10n ± 10%   +581.22% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP4    38.63n ±   8%    523.70n ± 17%  +1255.68% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP6    27.89n ±  25%    379.70n ± 17%  +1261.18% (p=0.000 n=20)
geomean                                20.50n            196.8n         +859.78%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                                     │  bart/lpm.bm  │             lpmtrie/lpm.bm              │
                                     │    sec/op     │    sec/op      vs base                  │
LpmTier1Pfxs/RandomMatchIP4            26.56n ±   6%   197.85n ±  8%   +644.92% (p=0.000 n=20)
LpmTier1Pfxs/RandomMatchIP6            25.54n ±  25%   150.20n ± 34%   +488.21% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP4             27.61n ±  51%   101.71n ± 97%   +268.38% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP6             6.525n ±   2%   13.245n ±  8%   +102.99% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP4     21.46n ±  66%   132.70n ±  2%   +518.36% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP6     16.68n ±   5%   126.75n ± 18%   +659.89% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP4      23.58n ±   9%   103.95n ±  2%   +340.84% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP6      17.55n ±  14%    91.00n ±  8%   +418.37% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP4    24.35n ±  55%   155.25n ±  8%   +537.71% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP6    11.34n ±  96%   122.00n ±  9%   +976.31% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP4     27.98n ±   4%   143.50n ±  6%   +412.77% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP6     23.63n ±   6%   128.50n ±  8%   +443.69% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP4   10.98n ± 107%   179.25n ±  5%  +1532.51% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP6   24.97n ±  57%   155.30n ± 12%   +521.95% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP4    38.63n ±   8%   196.80n ±  5%   +409.45% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP6    27.89n ±  25%   178.45n ± 16%   +539.72% (p=0.000 n=20)
geomean                                20.50n           121.2n         +491.21%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                                     │  bart/lpm.bm  │            cidranger/lpm.bm             │
                                     │    sec/op     │    sec/op      vs base                  │
LpmTier1Pfxs/RandomMatchIP4            26.56n ±   6%   176.45n ± 10%   +564.34% (p=0.000 n=20)
LpmTier1Pfxs/RandomMatchIP6            25.54n ±  25%   226.05n ± 36%   +785.26% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP4             27.61n ±  51%   166.00n ± 70%   +501.23% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP6             6.525n ±   2%   60.160n ±  3%   +821.99% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP4     21.46n ±  66%   125.35n ±  7%   +484.11% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP6     16.68n ±   5%   148.80n ±  4%   +792.09% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP4      23.58n ±   9%   118.95n ± 10%   +404.45% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP6      17.55n ±  14%   142.00n ±  8%   +708.89% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP4    24.35n ±  55%   123.05n ± 33%   +405.44% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP6    11.34n ±  96%   144.70n ±  6%  +1176.58% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP4     27.98n ±   4%   153.75n ± 11%   +449.40% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP6     23.63n ±   6%   174.75n ± 10%   +639.37% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP4   10.98n ± 107%   120.65n ± 19%   +998.82% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP6   24.97n ±  57%   154.75n ± 17%   +519.74% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP4    38.63n ±   8%   210.35n ±  6%   +444.52% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP6    27.89n ±  25%   235.40n ±  7%   +743.88% (p=0.000 n=20)
geomean                                20.50n           148.4n         +623.89%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                                     │  bart/lpm.bm  │              cidrtree/lpm.bm              │
                                     │    sec/op     │     sec/op      vs base                   │
LpmTier1Pfxs/RandomMatchIP4            26.56n ±   6%    961.70n ± 15%   +3520.86% (p=0.000 n=20)
LpmTier1Pfxs/RandomMatchIP6            25.54n ±  25%    961.70n ± 18%   +3666.20% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP4             27.61n ±  51%   1027.50n ± 21%   +3621.48% (p=0.000 n=20)
LpmTier1Pfxs/RandomMissIP6             6.525n ±   2%    39.015n ±  0%    +497.93% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP4     21.46n ±  66%    326.15n ± 11%   +1419.80% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMatchIP6     16.68n ±   5%    868.55n ± 15%   +5107.13% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP4      23.58n ±   9%    491.15n ± 16%   +1982.91% (p=0.000 n=20)
LpmRandomPfxs/1_000/RandomMissIP6      17.55n ±  14%    549.40n ± 32%   +3029.59% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP4    24.35n ±  55%   1081.50n ± 27%   +4342.39% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMatchIP6    11.34n ±  96%   1428.00n ± 13%  +12498.15% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP4     27.98n ±   4%    647.35n ± 13%   +2213.20% (p=0.000 n=20)
LpmRandomPfxs/10_000/RandomMissIP6     23.63n ±   6%    908.80n ± 12%   +3745.14% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP4   10.98n ± 107%    948.35n ± 29%   +8537.07% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMatchIP6   24.97n ±  57%   1451.50n ± 20%   +5712.98% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP4    38.63n ±   8%    980.50n ± 23%   +2438.18% (p=0.000 n=20)
LpmRandomPfxs/100_000/RandomMissIP6    27.89n ±  25%   1160.50n ± 14%   +4060.24% (p=0.000 n=20)
geomean                                20.50n            708.5n         +3355.45%

size of the routing tables

bart has two orders of magnitude lower memory consumption compared to art and is similar in low memory consumption to a binary search tree, like the cidrtree but much faster in lookup times.

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                       │ bart/size.bm │              art/size.bm              │
                       │ bytes/route  │ bytes/route   vs base                 │
Tier1PfxSize/1_000         107.0 ± 2%    7590.0 ± 0%  +6993.46% (p=0.002 n=6)
Tier1PfxSize/10_000        79.54 ± 0%   4889.00 ± 0%  +6046.59% (p=0.002 n=6)
Tier1PfxSize/100_000       35.73 ± 0%   1669.00 ± 0%  +4571.14% (p=0.002 n=6)
Tier1PfxSize/200_000       24.14 ± 0%   1098.00 ± 0%  +4448.47% (p=0.002 n=6)
RandomPfx4Size/1_000       103.3 ± 2%    7563.0 ± 0%  +7221.39% (p=0.002 n=6)
RandomPfx4Size/10_000      76.16 ± 0%   6068.00 ± 0%  +7867.44% (p=0.002 n=6)
RandomPfx4Size/100_000     81.77 ± 0%   5489.00 ± 0%  +6612.73% (p=0.002 n=6)
RandomPfx4Size/200_000     72.84 ± 0%   4841.00 ± 0%  +6546.07% (p=0.002 n=6)
RandomPfx6Size/1_000       105.0 ± 2%    7812.0 ± 0%  +7340.00% (p=0.002 n=6)
RandomPfx6Size/10_000      84.77 ± 0%   6838.00 ± 0%  +7966.53% (p=0.002 n=6)
RandomPfx6Size/100_000     105.8 ± 0%    7832.0 ± 0%  +7302.65% (p=0.002 n=6)
RandomPfx6Size/200_000     100.9 ± 0%    7605.0 ± 0%  +7437.17% (p=0.002 n=6)
RandomPfxSize/1_000        106.0 ± 2%    7524.0 ± 0%  +6998.11% (p=0.002 n=6)
RandomPfxSize/10_000       75.21 ± 0%   6210.00 ± 0%  +8156.88% (p=0.002 n=6)
RandomPfxSize/100_000      82.42 ± 0%   5807.00 ± 0%  +6945.62% (p=0.002 n=6)
RandomPfxSize/200_000      78.50 ± 0%   5459.00 ± 0%  +6854.14% (p=0.002 n=6)
geomean                    77.48        5.178Ki       +6744.17%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                       │ bart/size.bm │           netipds/size.bm           │
                       │ bytes/route  │ bytes/route  vs base                │
Tier1PfxSize/1_000         107.0 ± 2%    100.6 ± 2%    -5.98% (p=0.002 n=6)
Tier1PfxSize/10_000        79.54 ± 0%    96.05 ± 0%   +20.76% (p=0.002 n=6)
Tier1PfxSize/100_000       35.73 ± 0%    94.33 ± 0%  +164.01% (p=0.002 n=6)
Tier1PfxSize/200_000       24.14 ± 0%    93.27 ± 0%  +286.37% (p=0.002 n=6)
RandomPfx4Size/1_000      103.30 ± 2%    99.41 ± 2%    -3.77% (p=0.002 n=6)
RandomPfx4Size/10_000      76.16 ± 0%    93.64 ± 0%   +22.95% (p=0.002 n=6)
RandomPfx4Size/100_000     81.77 ± 0%    86.53 ± 0%    +5.82% (p=0.002 n=6)
RandomPfx4Size/200_000     72.84 ± 0%    82.90 ± 0%   +13.81% (p=0.002 n=6)
RandomPfx6Size/1_000      105.00 ± 2%    99.63 ± 2%    -5.11% (p=0.002 n=6)
RandomPfx6Size/10_000      84.77 ± 0%    95.06 ± 0%   +12.14% (p=0.002 n=6)
RandomPfx6Size/100_000    105.80 ± 0%    92.66 ± 0%   -12.42% (p=0.002 n=6)
RandomPfx6Size/200_000    100.90 ± 0%    91.86 ± 0%    -8.96% (p=0.002 n=6)
RandomPfxSize/1_000       106.00 ± 2%    99.46 ± 2%    -6.17% (p=0.002 n=6)
RandomPfxSize/10_000       75.21 ± 0%    94.30 ± 0%   +25.38% (p=0.002 n=6)
RandomPfxSize/100_000      82.42 ± 0%    87.80 ± 0%    +6.53% (p=0.002 n=6)
RandomPfxSize/200_000      78.50 ± 0%    84.83 ± 0%    +8.06% (p=0.002 n=6)
geomean                    77.48         93.12        +20.19%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                       │ bart/size.bm │          critbitgo/size.bm          │
                       │ bytes/route  │ bytes/route  vs base                │
Tier1PfxSize/1_000         107.0 ± 2%    119.1 ± 2%   +11.31% (p=0.002 n=6)
Tier1PfxSize/10_000        79.54 ± 0%   114.70 ± 0%   +44.20% (p=0.002 n=6)
Tier1PfxSize/100_000       35.73 ± 0%   114.40 ± 0%  +220.18% (p=0.002 n=6)
Tier1PfxSize/200_000       24.14 ± 0%   114.40 ± 0%  +373.90% (p=0.002 n=6)
RandomPfx4Size/1_000       103.3 ± 2%    115.9 ± 2%   +12.20% (p=0.002 n=6)
RandomPfx4Size/10_000      76.16 ± 0%   112.30 ± 0%   +47.45% (p=0.002 n=6)
RandomPfx4Size/100_000     81.77 ± 0%   112.00 ± 0%   +36.97% (p=0.002 n=6)
RandomPfx4Size/200_000     72.84 ± 0%   112.00 ± 0%   +53.76% (p=0.002 n=6)
RandomPfx6Size/1_000       105.0 ± 2%    132.0 ± 1%   +25.71% (p=0.002 n=6)
RandomPfx6Size/10_000      84.77 ± 0%   128.30 ± 0%   +51.35% (p=0.002 n=6)
RandomPfx6Size/100_000     105.8 ± 0%    128.0 ± 0%   +20.98% (p=0.002 n=6)
RandomPfx6Size/200_000     100.9 ± 0%    128.0 ± 0%   +26.86% (p=0.002 n=6)
RandomPfxSize/1_000        106.0 ± 2%    118.8 ± 1%   +12.08% (p=0.002 n=6)
RandomPfxSize/10_000       75.21 ± 0%   115.50 ± 0%   +53.57% (p=0.002 n=6)
RandomPfxSize/100_000      82.42 ± 0%   115.20 ± 0%   +39.77% (p=0.002 n=6)
RandomPfxSize/200_000      78.50 ± 0%   115.20 ± 0%   +46.75% (p=0.002 n=6)
geomean                    77.48         118.3        +52.71%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                       │ bart/size.bm │           lpmtrie/size.bm           │
                       │ bytes/route  │ bytes/route  vs base                │
Tier1PfxSize/1_000         107.0 ± 2%    214.9 ± 5%  +100.84% (p=0.002 n=6)
Tier1PfxSize/10_000        79.54 ± 0%   210.50 ± 5%  +164.65% (p=0.002 n=6)
Tier1PfxSize/100_000       35.73 ± 0%   209.90 ± 5%  +487.46% (p=0.002 n=6)
Tier1PfxSize/200_000       24.14 ± 0%   209.20 ± 5%  +766.61% (p=0.002 n=6)
RandomPfx4Size/1_000       103.3 ± 2%    211.3 ± 5%  +104.55% (p=0.002 n=6)
RandomPfx4Size/10_000      76.16 ± 0%   206.80 ± 5%  +171.53% (p=0.002 n=6)
RandomPfx4Size/100_000     81.77 ± 0%   199.50 ± 7%  +143.98% (p=0.002 n=6)
RandomPfx4Size/200_000     72.84 ± 0%   194.60 ± 7%  +167.16% (p=0.002 n=6)
RandomPfx6Size/1_000       105.0 ± 2%    227.6 ± 8%  +116.76% (p=0.002 n=6)
RandomPfx6Size/10_000      84.77 ± 0%   223.10 ± 7%  +163.18% (p=0.002 n=6)
RandomPfx6Size/100_000     105.8 ± 0%    219.3 ± 8%  +107.28% (p=0.002 n=6)
RandomPfx6Size/200_000     100.9 ± 0%    217.8 ± 8%  +115.86% (p=0.002 n=6)
RandomPfxSize/1_000        106.0 ± 2%    214.4 ± 5%  +102.26% (p=0.002 n=6)
RandomPfxSize/10_000       75.21 ± 0%   209.70 ± 5%  +178.82% (p=0.002 n=6)
RandomPfxSize/100_000      82.42 ± 0%   203.20 ± 7%  +146.54% (p=0.002 n=6)
RandomPfxSize/200_000      78.50 ± 0%   199.20 ± 7%  +153.76% (p=0.002 n=6)
geomean                    77.48         210.5       +171.71%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                       │ bart/size.bm │          cidranger/size.bm           │
                       │ bytes/route  │ bytes/route  vs base                 │
Tier1PfxSize/1_000         107.0 ± 2%    539.2 ± 3%   +403.93% (p=0.002 n=6)
Tier1PfxSize/10_000        79.54 ± 0%   533.80 ± 3%   +571.11% (p=0.002 n=6)
Tier1PfxSize/100_000       35.73 ± 0%   527.20 ± 2%  +1375.51% (p=0.002 n=6)
Tier1PfxSize/200_000       24.14 ± 0%   522.20 ± 2%  +2063.21% (p=0.002 n=6)
RandomPfx4Size/1_000       103.3 ± 2%    526.6 ± 3%   +409.78% (p=0.002 n=6)
RandomPfx4Size/10_000      76.16 ± 0%   514.00 ± 3%   +574.89% (p=0.002 n=6)
RandomPfx4Size/100_000     81.77 ± 0%   479.90 ± 3%   +486.89% (p=0.002 n=6)
RandomPfx4Size/200_000     72.84 ± 0%   463.50 ± 3%   +536.33% (p=0.002 n=6)
RandomPfx6Size/1_000       105.0 ± 2%    594.5 ± 0%   +466.19% (p=0.002 n=6)
RandomPfx6Size/10_000      84.77 ± 0%   585.50 ± 0%   +590.69% (p=0.002 n=6)
RandomPfx6Size/100_000     105.8 ± 0%    574.6 ± 0%   +443.10% (p=0.002 n=6)
RandomPfx6Size/200_000     100.9 ± 0%    570.4 ± 0%   +465.31% (p=0.002 n=6)
RandomPfxSize/1_000        106.0 ± 2%    537.3 ± 2%   +406.89% (p=0.002 n=6)
RandomPfxSize/10_000       75.21 ± 0%   527.20 ± 2%   +600.97% (p=0.002 n=6)
RandomPfxSize/100_000      82.42 ± 0%   499.20 ± 2%   +505.68% (p=0.002 n=6)
RandomPfxSize/200_000      78.50 ± 0%   484.50 ± 2%   +517.20% (p=0.002 n=6)
geomean                    77.48         528.7        +582.41%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                       │ bart/size.bm │          cidrtree/size.bm           │
                       │ bytes/route  │ bytes/route  vs base                │
Tier1PfxSize/1_000        107.00 ± 2%    69.06 ± 3%   -35.46% (p=0.002 n=6)
Tier1PfxSize/10_000        79.54 ± 0%    64.35 ± 0%   -19.10% (p=0.002 n=6)
Tier1PfxSize/100_000       35.73 ± 0%    64.03 ± 0%   +79.21% (p=0.002 n=6)
Tier1PfxSize/200_000       24.14 ± 0%    64.02 ± 0%  +165.20% (p=0.002 n=6)
RandomPfx4Size/1_000      103.30 ± 2%    67.89 ± 3%   -34.28% (p=0.002 n=6)
RandomPfx4Size/10_000      76.16 ± 0%    64.35 ± 0%   -15.51% (p=0.002 n=6)
RandomPfx4Size/100_000     81.77 ± 0%    64.03 ± 0%   -21.69% (p=0.002 n=6)
RandomPfx4Size/200_000     72.84 ± 0%    64.02 ± 0%   -12.11% (p=0.002 n=6)
RandomPfx6Size/1_000      105.00 ± 2%    68.06 ± 2%   -35.18% (p=0.002 n=6)
RandomPfx6Size/10_000      84.77 ± 0%    64.35 ± 0%   -24.09% (p=0.002 n=6)
RandomPfx6Size/100_000    105.80 ± 0%    64.03 ± 0%   -39.48% (p=0.002 n=6)
RandomPfx6Size/200_000    100.90 ± 0%    64.02 ± 0%   -36.55% (p=0.002 n=6)
RandomPfxSize/1_000       106.00 ± 2%    67.89 ± 3%   -35.95% (p=0.002 n=6)
RandomPfxSize/10_000       75.21 ± 0%    64.37 ± 0%   -14.41% (p=0.002 n=6)
RandomPfxSize/100_000      82.42 ± 0%    64.03 ± 0%   -22.31% (p=0.002 n=6)
RandomPfxSize/200_000      78.50 ± 0%    64.02 ± 0%   -18.45% (p=0.002 n=6)
geomean                    77.48         65.13        -15.93%

update, insert/delete

bart is by far the fastest algorithm for inserts and one of the fastest for delete.

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/update.bm │              art/update.bm              │
                         │   sec/route    │   sec/route     vs base                 │
InsertRandomPfxs/1_000        42.59n ± 1%   278.35n ±   0%   +553.63% (p=0.002 n=6)
InsertRandomPfxs/10_000       54.10n ± 1%   548.30n ±   1%   +913.59% (p=0.002 n=6)
InsertRandomPfxs/100_000      137.0n ± 1%   1850.0n ±  29%  +1250.86% (p=0.002 n=6)
InsertRandomPfxs/200_000      232.1n ± 1%   1728.5n ± 193%   +644.72% (p=0.002 n=6)
DeleteRandomPfxs/1_000        17.79n ± 0%    17.49n ±   0%     -1.66% (p=0.002 n=6)
DeleteRandomPfxs/10_000       17.41n ± 2%    16.90n ±   1%     -2.93% (p=0.002 n=6)
DeleteRandomPfxs/100_000      17.67n ± 1%    17.41n ±   1%     -1.47% (p=0.002 n=6)
DeleteRandomPfxs/200_000      18.97n ± 1%    18.98n ±   1%          ~ (p=0.779 n=6)
geomean                       40.75n         121.6n          +198.31%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/update.bm │           netipds/update.bm            │
                         │   sec/route    │   sec/route    vs base                 │
InsertRandomPfxs/1_000        42.59n ± 1%   193.35n ±  2%   +354.03% (p=0.002 n=6)
InsertRandomPfxs/10_000       54.10n ± 1%   319.45n ±  6%   +490.54% (p=0.002 n=6)
InsertRandomPfxs/100_000      137.0n ± 1%    756.1n ±  6%   +452.14% (p=0.002 n=6)
InsertRandomPfxs/200_000      232.1n ± 1%    928.1n ± 27%   +299.87% (p=0.002 n=6)
DeleteRandomPfxs/1_000        17.79n ± 0%   140.25n ± 16%   +688.59% (p=0.002 n=6)
DeleteRandomPfxs/10_000       17.41n ± 2%   206.95n ±  1%  +1088.68% (p=0.002 n=6)
DeleteRandomPfxs/100_000      17.67n ± 1%   447.65n ±  5%  +2433.39% (p=0.002 n=6)
DeleteRandomPfxs/200_000      18.97n ± 1%   656.80n ±  2%  +3362.31% (p=0.002 n=6)
geomean                       40.75n         372.4n         +813.92%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/update.bm │          critbitgo/update.bm          │
                         │   sec/route    │   sec/route    vs base                │
InsertRandomPfxs/1_000        42.59n ± 1%   172.60n ±  2%  +305.31% (p=0.002 n=6)
InsertRandomPfxs/10_000       54.10n ± 1%   241.05n ±  1%  +345.60% (p=0.002 n=6)
InsertRandomPfxs/100_000      137.0n ± 1%    564.4n ±  1%  +312.08% (p=0.002 n=6)
InsertRandomPfxs/200_000      232.1n ± 1%    767.9n ±  3%  +230.85% (p=0.002 n=6)
DeleteRandomPfxs/1_000        17.79n ± 0%    70.89n ±  3%  +298.57% (p=0.002 n=6)
DeleteRandomPfxs/10_000       17.41n ± 2%    73.51n ±  1%  +322.23% (p=0.002 n=6)
DeleteRandomPfxs/100_000      17.67n ± 1%    78.01n ± 14%  +341.48% (p=0.002 n=6)
DeleteRandomPfxs/200_000      18.97n ± 1%    82.72n ±  2%  +336.03% (p=0.002 n=6)
geomean                       40.75n         167.0n        +309.95%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/update.bm │           lpmtrie/update.bm           │
                         │   sec/route    │  sec/route    vs base                 │
InsertRandomPfxs/1_000        42.59n ± 1%   385.15n ± 2%   +804.43% (p=0.002 n=6)
InsertRandomPfxs/10_000       54.10n ± 1%   480.85n ± 6%   +788.90% (p=0.002 n=6)
InsertRandomPfxs/100_000      137.0n ± 1%   1148.0n ± 2%   +738.26% (p=0.002 n=6)
InsertRandomPfxs/200_000      232.1n ± 1%   1252.0n ± 4%   +439.42% (p=0.002 n=6)
DeleteRandomPfxs/1_000        17.79n ± 0%    85.49n ± 0%   +380.69% (p=0.002 n=6)
DeleteRandomPfxs/10_000       17.41n ± 2%   146.30n ± 0%   +740.32% (p=0.002 n=6)
DeleteRandomPfxs/100_000      17.67n ± 1%   320.20n ± 2%  +1712.11% (p=0.002 n=6)
DeleteRandomPfxs/200_000      18.97n ± 1%   465.30n ± 2%  +2352.82% (p=0.002 n=6)
geomean                       40.75n         386.3n        +848.06%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/update.bm │           cidranger/update.bm            │
                         │   sec/route    │   sec/route     vs base                  │
InsertRandomPfxs/1_000        42.59n ± 1%   4495.00n ±  1%  +10455.36% (p=0.002 n=6)
InsertRandomPfxs/10_000       54.10n ± 1%   6452.00n ±  3%  +11827.17% (p=0.002 n=6)
InsertRandomPfxs/100_000      137.0n ± 1%   10631.5n ±  5%   +7663.05% (p=0.002 n=6)
InsertRandomPfxs/200_000      232.1n ± 1%   11937.0n ±  3%   +5043.04% (p=0.002 n=6)
DeleteRandomPfxs/1_000        17.79n ± 0%     95.47n ±  2%    +436.83% (p=0.002 n=6)
DeleteRandomPfxs/10_000       17.41n ± 2%     92.30n ±  5%    +430.18% (p=0.002 n=6)
DeleteRandomPfxs/100_000      17.67n ± 1%    142.85n ±  2%    +708.43% (p=0.002 n=6)
DeleteRandomPfxs/200_000      18.97n ± 1%    722.80n ± 20%   +3710.23% (p=0.002 n=6)
geomean                       40.75n          1.163µ         +2754.40%
goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/update.bm │            cidrtree/update.bm            │
                         │   sec/route    │    sec/route     vs base                 │
InsertRandomPfxs/1_000        42.59n ± 1%   1312.00n ±   2%  +2980.90% (p=0.002 n=6)
InsertRandomPfxs/10_000       54.10n ± 1%   1943.00n ±   1%  +3491.83% (p=0.002 n=6)
InsertRandomPfxs/100_000      137.0n ± 1%    3175.5n ±   7%  +2218.73% (p=0.002 n=6)
InsertRandomPfxs/200_000      232.1n ± 1%    3871.5n ±   1%  +1568.03% (p=0.002 n=6)
DeleteRandomPfxs/1_000        17.79n ± 0%     14.81n ±   7%    -16.73% (p=0.002 n=6)
DeleteRandomPfxs/10_000       17.41n ± 2%     15.19n ±   1%    -12.72% (p=0.002 n=6)
DeleteRandomPfxs/100_000      17.67n ± 1%     23.79n ±   6%    +34.61% (p=0.002 n=6)
DeleteRandomPfxs/200_000      18.97n ± 1%    432.50n ± 135%  +2179.92% (p=0.002 n=6)
geomean                       40.75n          303.8n          +645.55%

About

benchmarks for some golang IP routing table implementations

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published