Home

Awesome

iprbench

comparing benchmarks for some golang IP routing table implementations:

	github.com/tailscale/art
	github.com/gaissmai/bart
	github.com/k-sone/critbitgo
	github.com/Asphaltt/lpmtrie
	github.com/gaissmai/cidrtree
	github.com/yl2chen/cidranger

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 1-32 for IPv4 and 1-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

size of the routing tables

The memory consumption of the multibit trie art with more than 100_000 randomly distributed IPv6 prefixes brings the OOM killer in action.

bart has a factor of ~20 lower memory consumption compared to art, but is generally slower for longest-prefix-match.

cidrtree is the most economical in terms of memory consumption, but this is also not a trie but a binary search tree and slower by a magnitude than the other algorithms.

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/size.bm │                art/size.bm                │
                         │    bytes     │     bytes       vs base                   │
Tier1PfxSize/100           31.52Ki ± 5%    802.98Ki ± 0%  +2447.89% (p=0.002 n=6)
Tier1PfxSize/1_000         204.2Ki ± 1%    7420.4Ki ± 0%  +3533.98% (p=0.002 n=6)
Tier1PfxSize/10_000        1.288Mi ± 0%    47.172Mi ± 0%  +3562.71% (p=0.002 n=6)
Tier1PfxSize/100_000       5.397Mi ± 0%   160.300Mi ± 0%  +2870.31% (p=0.002 n=6)
Tier1PfxSize/1_000_000     24.83Mi ± 0%    378.23Mi ± 0%  +1423.34% (p=0.002 n=6)
RandomPfx4Size/100         31.91Ki ± 5%    751.23Ki ± 0%  +2253.93% (p=0.002 n=6)
RandomPfx4Size/1_000       217.3Ki ± 1%    7241.9Ki ± 0%  +3232.85% (p=0.002 n=6)
RandomPfx4Size/10_000      1.738Mi ± 0%    57.774Mi ± 0%  +3224.76% (p=0.002 n=6)
RandomPfx4Size/100_000     13.19Mi ± 0%    522.14Mi ± 0%  +3860.08% (p=0.002 n=6)
RandomPfx4Size/1_000_000   79.85Mi ± 0%
RandomPfx6Size/100         94.30Ki ± 2%    732.11Ki ± 0%   +676.32% (p=0.002 n=6)
RandomPfx6Size/1_000       961.0Ki ± 0%    7720.0Ki ± 0%   +703.33% (p=0.002 n=6)
RandomPfx6Size/10_000      8.588Mi ± 0%    65.319Mi ± 0%   +660.61% (p=0.002 n=6)
RandomPfx6Size/100_000     81.63Mi ± 0%    748.08Mi ± 0%   +816.45% (p=0.002 n=6)
RandomPfx6Size/1_000_000   761.6Mi ± 0%
RandomPfxSize/100          43.28Ki ± 4%    700.64Ki ± 0%  +1518.81% (p=0.002 n=6)
RandomPfxSize/1_000        358.8Ki ± 0%    7445.9Ki ± 0%  +1975.11% (p=0.002 n=6)
RandomPfxSize/10_000       3.079Mi ± 0%    59.978Mi ± 0%  +1847.65% (p=0.002 n=6)
RandomPfxSize/100_000      27.65Mi ± 0%    554.55Mi ± 0%  +1905.64% (p=0.002 n=6)
RandomPfxSize/1_000_000    221.0Mi ± 0%
geomean                    2.575Mi          22.68Mi       +1856.79%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/size.bm  │           cidrtree/size.bm            │
                         │     bytes     │     bytes      vs base                │
Tier1PfxSize/100            31.52Ki ± 5%   12.36Ki ± 14%   -60.78% (p=0.002 n=6)
Tier1PfxSize/1_000         204.20Ki ± 1%   81.54Ki ±  2%   -60.07% (p=0.002 n=6)
Tier1PfxSize/10_000        1318.8Ki ± 0%   784.7Ki ±  0%   -40.50% (p=0.002 n=6)
Tier1PfxSize/100_000        5.397Mi ± 0%   7.633Mi ±  0%   +41.43% (p=0.002 n=6)
Tier1PfxSize/1_000_000      24.83Mi ± 0%   76.30Mi ±  0%  +207.29% (p=0.002 n=6)
RandomPfx4Size/100          31.91Ki ± 5%   11.61Ki ± 14%   -63.62% (p=0.002 n=6)
RandomPfx4Size/1_000       217.29Ki ± 1%   81.54Ki ±  2%   -62.47% (p=0.002 n=6)
RandomPfx4Size/10_000      1779.4Ki ± 0%   784.7Ki ±  0%   -55.90% (p=0.002 n=6)
RandomPfx4Size/100_000     13.185Mi ± 0%   7.633Mi ±  0%   -42.11% (p=0.002 n=6)
RandomPfx4Size/1_000_000    79.85Mi ± 0%   76.30Mi ±  0%    -4.45% (p=0.002 n=6)
RandomPfx6Size/100          94.30Ki ± 2%   11.61Ki ± 14%   -87.69% (p=0.002 n=6)
RandomPfx6Size/1_000       961.01Ki ± 0%   81.54Ki ±  2%   -91.52% (p=0.002 n=6)
RandomPfx6Size/10_000      8793.8Ki ± 0%   784.7Ki ±  0%   -91.08% (p=0.002 n=6)
RandomPfx6Size/100_000     81.629Mi ± 0%   7.633Mi ±  0%   -90.65% (p=0.002 n=6)
RandomPfx6Size/1_000_000   761.65Mi ± 0%   76.30Mi ±  0%   -89.98% (p=0.002 n=6)
RandomPfxSize/100           43.28Ki ± 4%   11.61Ki ± 14%   -73.18% (p=0.002 n=6)
RandomPfxSize/1_000        358.82Ki ± 0%   81.54Ki ±  2%   -77.28% (p=0.002 n=6)
RandomPfxSize/10_000       3153.4Ki ± 0%   784.7Ki ±  0%   -75.12% (p=0.002 n=6)
RandomPfxSize/100_000      27.649Mi ± 0%   7.633Mi ±  0%   -72.39% (p=0.002 n=6)
RandomPfxSize/1_000_000    220.96Mi ± 0%   76.30Mi ±  0%   -65.47% (p=0.002 n=6)
geomean                     2.575Mi        856.4Ki         -67.53%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/size.bm │           critbitgo/size.bm            │
                         │    bytes     │     bytes       vs base                │
Tier1PfxSize/100           31.52Ki ± 5%    15.67Ki ± 11%   -50.27% (p=0.002 n=6)
Tier1PfxSize/1_000         204.2Ki ± 1%    115.3Ki ±  1%   -43.56% (p=0.002 n=6)
Tier1PfxSize/10_000        1.288Mi ± 0%    1.094Mi ±  0%   -15.09% (p=0.002 n=6)
Tier1PfxSize/100_000       5.397Mi ± 0%   10.913Mi ±  0%  +102.21% (p=0.002 n=6)
Tier1PfxSize/1_000_000     24.83Mi ± 0%   109.12Mi ±  0%  +339.47% (p=0.002 n=6)
RandomPfx4Size/100         31.91Ki ± 5%    14.70Ki ± 11%   -53.93% (p=0.002 n=6)
RandomPfx4Size/1_000       217.3Ki ± 1%    112.8Ki ±  1%   -48.11% (p=0.002 n=6)
RandomPfx4Size/10_000      1.738Mi ± 0%    1.071Mi ±  0%   -38.34% (p=0.002 n=6)
RandomPfx4Size/100_000     13.19Mi ± 0%    10.68Mi ±  0%   -18.96% (p=0.002 n=6)
RandomPfx4Size/1_000_000   79.85Mi ± 0%   106.81Mi ±  0%   +33.77% (p=0.002 n=6)
RandomPfx6Size/100         94.30Ki ± 2%    16.25Ki ± 10%   -82.77% (p=0.002 n=6)
RandomPfx6Size/1_000       961.0Ki ± 0%    128.4Ki ±  1%   -86.64% (p=0.002 n=6)
RandomPfx6Size/10_000      8.588Mi ± 0%    1.224Mi ±  0%   -85.75% (p=0.002 n=6)
RandomPfx6Size/100_000     81.63Mi ± 0%    12.21Mi ±  0%   -85.04% (p=0.002 n=6)
RandomPfx6Size/1_000_000   761.6Mi ± 0%    122.1Mi ±  0%   -83.97% (p=0.002 n=6)
RandomPfxSize/100          43.28Ki ± 4%    14.97Ki ± 11%   -65.42% (p=0.002 n=6)
RandomPfxSize/1_000        358.8Ki ± 0%    115.8Ki ±  1%   -67.73% (p=0.002 n=6)
RandomPfxSize/10_000       3.079Mi ± 0%    1.102Mi ±  0%   -64.21% (p=0.002 n=6)
RandomPfxSize/100_000      27.65Mi ± 0%    10.99Mi ±  0%   -60.25% (p=0.002 n=6)
RandomPfxSize/1_000_000    221.0Mi ± 0%    109.9Mi ±  0%   -50.28% (p=0.002 n=6)
geomean                    2.575Mi         1.194Mi         -53.64%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/size.bm │            lpmtrie/size.bm             │
                         │    bytes     │     bytes       vs base                │
Tier1PfxSize/100           31.52Ki ± 5%    24.84Ki ± 11%   -21.17% (p=0.002 n=6)
Tier1PfxSize/1_000         204.2Ki ± 1%    208.9Ki ±  5%    +2.30% (p=0.015 n=6)
Tier1PfxSize/10_000        1.288Mi ± 0%    2.007Mi ±  4%   +55.86% (p=0.002 n=6)
Tier1PfxSize/100_000       5.397Mi ± 0%   19.979Mi ±  5%  +270.20% (p=0.002 n=6)
Tier1PfxSize/1_000_000     24.83Mi ± 0%   196.30Mi ±  8%  +690.62% (p=0.002 n=6)
RandomPfx4Size/100         31.91Ki ± 5%    24.02Ki ± 10%   -24.75% (p=0.002 n=6)
RandomPfx4Size/1_000       217.3Ki ± 1%    205.5Ki ±  5%    -5.42% (p=0.002 n=6)
RandomPfx4Size/10_000      1.738Mi ± 0%    1.973Mi ±  5%   +13.56% (p=0.002 n=6)
RandomPfx4Size/100_000     13.19Mi ± 0%    19.04Mi ±  6%   +44.37% (p=0.002 n=6)
RandomPfx4Size/1_000_000   79.85Mi ± 0%   170.24Mi ±  9%  +113.20% (p=0.002 n=6)
RandomPfx6Size/100         94.30Ki ± 2%    25.56Ki ± 13%   -72.89% (p=0.002 n=6)
RandomPfx6Size/1_000       961.0Ki ± 0%    222.5Ki ±  8%   -76.85% (p=0.002 n=6)
RandomPfx6Size/10_000      8.588Mi ± 0%    2.128Mi ±  7%   -75.23% (p=0.002 n=6)
RandomPfx6Size/100_000     81.63Mi ± 0%    20.94Mi ±  8%   -74.35% (p=0.002 n=6)
RandomPfx6Size/1_000_000   761.6Mi ± 0%    204.0Mi ±  8%   -73.22% (p=0.002 n=6)
RandomPfxSize/100          43.28Ki ± 4%    24.22Ki ± 11%   -44.04% (p=0.002 n=6)
RandomPfxSize/1_000        358.8Ki ± 0%    209.2Ki ±  5%   -41.69% (p=0.002 n=6)
RandomPfxSize/10_000       3.079Mi ± 0%    2.003Mi ±  5%   -34.95% (p=0.002 n=6)
RandomPfxSize/100_000      27.65Mi ± 0%    19.41Mi ±  7%   -29.80% (p=0.002 n=6)
RandomPfxSize/1_000_000    221.0Mi ± 0%    177.3Mi ±  9%   -19.77% (p=0.002 n=6)
geomean                    2.575Mi         2.062Mi         -19.95%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                         │ bart/size.bm │           cidranger/size.bm            │
                         │    bytes     │     bytes      vs base                 │
Tier1PfxSize/100           31.52Ki ± 5%    56.06Ki ± 5%    +77.89% (p=0.002 n=6)
Tier1PfxSize/1_000         204.2Ki ± 1%    525.9Ki ± 3%   +157.57% (p=0.002 n=6)
Tier1PfxSize/10_000        1.288Mi ± 0%    5.091Mi ± 2%   +295.30% (p=0.002 n=6)
Tier1PfxSize/100_000       5.397Mi ± 0%   50.258Mi ± 2%   +831.27% (p=0.002 n=6)
Tier1PfxSize/1_000_000     24.83Mi ± 0%   477.45Mi ± 2%  +1822.94% (p=0.002 n=6)
RandomPfx4Size/100         31.91Ki ± 5%    54.62Ki ± 6%    +71.16% (p=0.002 n=6)
RandomPfx4Size/1_000       217.3Ki ± 1%    513.5Ki ± 3%   +136.32% (p=0.002 n=6)
RandomPfx4Size/10_000      1.738Mi ± 0%    4.893Mi ± 3%   +181.59% (p=0.002 n=6)
RandomPfx4Size/100_000     13.19Mi ± 0%    45.74Mi ± 3%   +246.91% (p=0.002 n=6)
RandomPfx4Size/1_000_000   79.85Mi ± 0%   396.20Mi ± 3%   +396.17% (p=0.002 n=6)
RandomPfx6Size/100         94.30Ki ± 2%    61.11Ki ± 3%    -35.20% (p=0.002 n=6)
RandomPfx6Size/1_000       961.0Ki ± 0%    580.8Ki ± 0%    -39.56% (p=0.002 n=6)
RandomPfx6Size/10_000      8.588Mi ± 0%    5.599Mi ± 0%    -34.80% (p=0.002 n=6)
RandomPfx6Size/100_000     81.63Mi ± 0%    54.80Mi ± 0%    -32.86% (p=0.002 n=6)
RandomPfx6Size/1_000_000   761.6Mi ± 0%    534.1Mi ± 0%    -29.87% (p=0.002 n=6)
RandomPfxSize/100          43.28Ki ± 4%    55.12Ki ± 5%    +27.36% (p=0.002 n=6)
RandomPfxSize/1_000        358.8Ki ± 0%    524.1Ki ± 2%    +46.08% (p=0.002 n=6)
RandomPfxSize/10_000       3.079Mi ± 0%    5.024Mi ± 2%    +63.15% (p=0.002 n=6)
RandomPfxSize/100_000      27.65Mi ± 0%    47.54Mi ± 2%    +71.95% (p=0.002 n=6)
RandomPfxSize/1_000_000    221.0Mi ± 0%    424.9Mi ± 2%    +92.29% (p=0.002 n=6)
geomean                    2.575Mi         5.071Mi         +96.90%

lpm (longest-prefix-match)

In the lpm, art is the champion, closely followed by bart.

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           42.73n ± 28%   46.31n ± 19%        ~ (p=0.247 n=10)
LpmTier1Pfxs/RandomMatchIP6           47.99n ± 35%   47.42n ± 13%        ~ (p=0.954 n=10)
LpmTier1Pfxs/RandomMissIP4            46.09n ± 41%   29.88n ±  0%  -35.18% (p=0.001 n=10)
LpmTier1Pfxs/RandomMissIP6            15.57n ±  0%   29.83n ±  0%  +91.49% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP4   51.10n ± 30%   51.15n ± 10%        ~ (p=0.912 n=10)
LpmRandomPfxs100_000/RandomMatchIP6   49.26n ± 16%   52.33n ± 10%        ~ (p=0.353 n=10)
LpmRandomPfxs100_000/RandomMissIP4    67.79n ± 17%   29.77n ±  0%  -56.08% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP6    56.37n ± 10%   29.71n ±  0%  -47.29% (p=0.000 n=10)
geomean                               44.04n         38.30n        -13.03%

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           42.73n ± 28%    741.05n ± 94%  +1634.06% (p=0.000 n=10)
LpmTier1Pfxs/RandomMatchIP6           47.99n ± 35%   1302.00n ± 18%  +2613.07% (p=0.000 n=10)
LpmTier1Pfxs/RandomMissIP4            46.09n ± 41%   1100.50n ± 97%  +2287.46% (p=0.015 n=10)
LpmTier1Pfxs/RandomMissIP6            15.57n ±  0%     64.55n ±  2%   +314.41% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP4   51.10n ± 30%   1002.15n ± 37%  +1861.15% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP6   49.26n ± 16%   1409.50n ± 36%  +2761.35% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP4    67.79n ± 17%   1301.00n ± 14%  +1819.16% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP6    56.37n ± 10%   1033.50n ± 19%  +1733.42% (p=0.000 n=10)
geomean                               44.04n           775.0n        +1659.62%

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           42.73n ± 28%   159.25n ± 40%   +272.65% (p=0.000 n=10)
LpmTier1Pfxs/RandomMatchIP6           47.99n ± 35%   243.15n ± 25%   +406.67% (p=0.000 n=10)
LpmTier1Pfxs/RandomMissIP4            46.09n ± 41%   669.80n ± 19%  +1353.09% (p=0.000 n=10)
LpmTier1Pfxs/RandomMissIP6            15.57n ±  0%   428.20n ± 52%  +2649.28% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP4   51.10n ± 30%   481.80n ± 71%   +842.86% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP6   49.26n ± 16%   245.70n ± 19%   +398.78% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP4    67.79n ± 17%   483.35n ± 22%   +613.01% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP6    56.37n ± 10%   522.70n ± 23%   +827.27% (p=0.000 n=10)
geomean                               44.04n          367.4n         +734.21%

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           42.73n ± 28%   203.95n ± 22%  +377.24% (p=0.000 n=10)
LpmTier1Pfxs/RandomMatchIP6           47.99n ± 35%   132.70n ± 59%  +176.52% (p=0.000 n=10)
LpmTier1Pfxs/RandomMissIP4            46.09n ± 41%   144.90n ± 79%         ~ (p=0.305 n=10)
LpmTier1Pfxs/RandomMissIP6            15.57n ±  0%    13.02n ±  0%   -16.40% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP4   51.10n ± 30%   271.95n ±  6%  +432.19% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP6   49.26n ± 16%   155.90n ±  5%  +216.48% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP4    67.79n ± 17%   286.80n ± 10%  +323.07% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP6    56.37n ± 10%   182.70n ± 22%  +224.11% (p=0.000 n=10)
geomean                               44.04n          135.5n        +207.57%

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           42.73n ± 28%   188.70n ± 42%  +341.56% (p=0.000 n=10)
LpmTier1Pfxs/RandomMatchIP6           47.99n ± 35%   164.35n ± 66%  +242.47% (p=0.000 n=10)
LpmTier1Pfxs/RandomMissIP4            46.09n ± 41%   133.35n ± 65%  +189.29% (p=0.003 n=10)
LpmTier1Pfxs/RandomMissIP6            15.57n ±  0%    52.17n ±  9%  +234.99% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP4   51.10n ± 30%   136.45n ± 41%  +167.03% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMatchIP6   49.26n ± 16%   108.10n ± 18%  +119.45% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP4    67.79n ± 17%   194.75n ± 10%  +187.28% (p=0.000 n=10)
LpmRandomPfxs100_000/RandomMissIP6    56.37n ± 10%   203.45n ±  9%  +260.92% (p=0.000 n=10)
geomean                               44.04n          137.3n        +211.67%

update, insert/delete

bart is by far the fastest algorithm for updates under all competitors.

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                             │ bart/update.bm │             art/update.bm              │
                             │     sec/op     │    sec/op      vs base                 │
Insert/Insert_into_100           46.45n ±  7%    88.89n ±  1%   +91.38% (p=0.000 n=10)
Insert/Insert_into_1_000         46.26n ±  1%   108.15n ±  4%  +133.76% (p=0.000 n=10)
Insert/Insert_into_10_000        46.77n ±  2%   107.60n ±  9%  +130.06% (p=0.000 n=10)
Insert/Insert_into_100_000       47.18n ±  4%   124.00n ± 14%  +162.85% (p=0.000 n=10)
Insert/Insert_into_1_000_000     46.35n ±  7%   105.55n ±  1%  +127.70% (p=0.000 n=10)
Delete/Delete_from_100           17.37n ± 18%    13.83n ±  2%   -20.38% (p=0.000 n=10)
Delete/Delete_from_1_000         38.56n ±  6%    40.23n ±  1%         ~ (p=0.060 n=10)
Delete/Delete_from_10_000        38.56n ±  0%    42.36n ±  2%    +9.83% (p=0.000 n=10)
Delete/Delete_from_100_000       38.54n ±  1%    40.38n ±  6%    +4.79% (p=0.000 n=10)
Delete/Delete_from_1_000_000     38.53n ±  0%    40.48n ±  2%    +5.06% (p=0.000 n=10)
geomean                          39.14n          59.12n         +51.06%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                             │ bart/update.bm │            cidrtree/update.bm            │
                             │     sec/op     │     sec/op      vs base                  │
Insert/Insert_into_100           46.45n ±  7%    858.95n ± 11%  +1749.19% (p=0.000 n=10)
Insert/Insert_into_1_000         46.26n ±  1%   1061.00n ± 11%  +2193.31% (p=0.000 n=10)
Insert/Insert_into_10_000        46.77n ±  2%   1951.00n ±  5%  +4071.48% (p=0.000 n=10)
Insert/Insert_into_100_000       47.18n ±  4%   1423.50n ±  0%  +2917.49% (p=0.000 n=10)
Insert/Insert_into_1_000_000     46.35n ±  7%   2561.50n ±  0%  +5425.83% (p=0.000 n=10)
Delete/Delete_from_100           17.37n ± 18%    597.50n ±  0%  +3339.84% (p=0.000 n=10)
Delete/Delete_from_1_000         38.56n ±  6%   1441.00n ±  0%  +3637.03% (p=0.000 n=10)
Delete/Delete_from_10_000        38.56n ±  0%   1196.00n ±  0%  +3001.26% (p=0.000 n=10)
Delete/Delete_from_100_000       38.54n ±  1%   3183.00n ±  0%  +8158.95% (p=0.000 n=10)
Delete/Delete_from_1_000_000     38.53n ±  0%   3019.00n ±  1%  +7735.45% (p=0.000 n=10)
geomean                          39.14n           1.516µ        +3773.80%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                             │ bart/update.bm │          critbitgo/update.bm          │
                             │     sec/op     │    sec/op     vs base                 │
Insert/Insert_into_100           46.45n ±  7%    64.88n ± 0%   +39.67% (p=0.000 n=10)
Insert/Insert_into_1_000         46.26n ±  1%    74.98n ± 0%   +62.08% (p=0.000 n=10)
Insert/Insert_into_10_000        46.77n ±  2%    78.31n ± 0%   +67.43% (p=0.000 n=10)
Insert/Insert_into_100_000       47.18n ±  4%   110.65n ± 1%  +134.55% (p=0.000 n=10)
Insert/Insert_into_1_000_000     46.35n ±  7%   143.65n ± 0%  +209.89% (p=0.000 n=10)
Delete/Delete_from_100           17.37n ± 18%    52.81n ± 0%  +204.03% (p=0.000 n=10)
Delete/Delete_from_1_000         38.56n ±  6%    60.19n ± 0%   +56.08% (p=0.000 n=10)
Delete/Delete_from_10_000        38.56n ±  0%    66.20n ± 0%   +71.65% (p=0.000 n=10)
Delete/Delete_from_100_000       38.54n ±  1%    91.83n ± 0%  +138.26% (p=0.000 n=10)
Delete/Delete_from_1_000_000     38.53n ±  0%   100.20n ± 3%  +160.06% (p=0.000 n=10)
geomean                          39.14n          80.70n       +106.21%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                             │ bart/update.bm │           lpmtrie/update.bm            │
                             │     sec/op     │    sec/op     vs base                  │
Insert/Insert_into_100           46.45n ±  7%   490.75n ± 1%   +956.51% (p=0.000 n=10)
Insert/Insert_into_1_000         46.26n ±  1%   589.80n ± 1%  +1174.83% (p=0.000 n=10)
Insert/Insert_into_10_000        46.77n ±  2%   588.30n ± 6%  +1157.86% (p=0.000 n=10)
Insert/Insert_into_100_000       47.18n ±  4%   442.40n ± 0%   +837.78% (p=0.000 n=10)
Insert/Insert_into_1_000_000     46.35n ±  7%   471.15n ± 0%   +916.40% (p=0.000 n=10)
Delete/Delete_from_100           17.37n ± 18%    61.90n ± 0%   +256.39% (p=0.000 n=10)
Delete/Delete_from_1_000         38.56n ±  6%   124.45n ± 0%   +222.74% (p=0.000 n=10)
Delete/Delete_from_10_000        38.56n ±  0%   131.45n ± 0%   +240.85% (p=0.000 n=10)
Delete/Delete_from_100_000       38.54n ±  1%   262.90n ± 0%   +582.15% (p=0.000 n=10)
Delete/Delete_from_1_000_000     38.53n ±  0%   303.55n ± 0%   +687.83% (p=0.000 n=10)
geomean                          39.14n          279.1n        +613.15%

goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
                             │ bart/update.bm │           cidranger/update.bm            │
                             │     sec/op     │    sec/op      vs base                   │
Insert/Insert_into_100           46.45n ±  7%   2217.50n ± 0%   +4673.95% (p=0.000 n=10)
Insert/Insert_into_1_000         46.26n ±  1%   3849.50n ± 0%   +8220.54% (p=0.000 n=10)
Insert/Insert_into_10_000        46.77n ±  2%   4488.50n ± 0%   +9496.96% (p=0.000 n=10)
Insert/Insert_into_100_000       47.18n ±  4%   7162.00n ± 0%  +15081.77% (p=0.000 n=10)
Insert/Insert_into_1_000_000     46.35n ±  7%   7877.00n ± 0%  +16892.77% (p=0.000 n=10)
Delete/Delete_from_100           17.37n ± 18%    367.35n ± 0%   +2014.85% (p=0.000 n=10)
Delete/Delete_from_1_000         38.56n ±  6%    400.75n ± 1%    +939.29% (p=0.000 n=10)
Delete/Delete_from_10_000        38.56n ±  0%    416.10n ± 0%    +978.96% (p=0.000 n=10)
Delete/Delete_from_100_000       38.54n ±  1%    531.55n ± 0%   +1279.22% (p=0.000 n=10)
Delete/Delete_from_1_000_000     38.53n ±  0%    575.15n ± 0%   +1392.73% (p=0.000 n=10)
geomean                          39.14n           1.448µ        +3599.46%