1

Followup Measuring BGP Stacks Performance

 3 years ago
source link: https://elegantnetwork.github.io/posts/followup-measuring-BGP-stacks/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Followup Measuring BGP Stacks Performance

Systematic performance measurement of Open Source BGP Stacks, adding RustyBGP and OpenBGPD

Published on Aug 9, 2021 by Justin Pietsch

After I published the post on measuring open source BGP stacks, I was embarrassed after I realized how haphazard the testing was. I was not very systematic about the way I tried different test parameters. So I hacked on bgperf, added some more reporting and created a new batch feature that iterates through parameters systematically, and automatically graphs the results. By request, I added RustyBGP and OpenBGPD. I’ve only added rudimentary support for these just to get started testing the number of prefixes and neighbors. RustyBGP isn’t yet a fully formed BGP stack; I don’t think it has much support for any kind of policy yet.

In these tests I stopped testing GoBGP, even though bgperf still supports it. As you can see from the previous post, it uses a lot more resources and is much slower. It makes the graphs much harder to interpret. I also only test the single table version of bird, because it’s the easier config and it’s faster.

Last time for FRR I (accidentally) used a dev version which took an excess amount of time establishing neighbors when there were > 30 neighbors. This time I’m using FRRouting 7.5.1 from dockerhub container and FRRouting 8.0 that bgperf compiled from github, neither of which have problems with neighbor times. I’m not going to show neighbor results here because for the most part they are uninteresting.

There are all kinds of different uses for BGP stacks. I try to cover a set of interesting scenarios to demonstrate how these perform.

The goal in all of this is to add some quantitative power to any decision making about different BGP stacks. It’s not the only aspect to consider, often it’s the least important.

Results

The first set of results we’ll look at are from my AMD 3950 32 core machine with 64 GB RAM.

10K prefixes

We’ll start with 10K prefixes. It iterates through 10, 30, 50, and then 100 neighbors. It looks like 100 neighbors with each 10K prefixes is pretty taxing on many of these stacks.

Route reception is the time from the first route received until all routes are received.

route reception time

The first thing that jumps out is how much slower OpenBGPD is especially at 100, and even 50, neighbors. While harder to see, BIRD and RustyBGP at 100 neighbors are considerably slower than the two FRRoutings, 18s compared to 9-10s.

max cpu

RustyBGP uses a lot more CPU resources, even though it isn’t any faster than FRR or BIRD.

max mem

OpenBGPD uses a tremendous amount of memory, especially at 100 neighbors. I’m not sure what’s going on here, but that looks troubling to me.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 10 10000 4 2 0 2 14.1 33 0.015 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (47d89c7b746a). 10 10000 0 3 0 3 12.4 38 0.09 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (8bc4400841d8). 10 10000 0 3 0 3 12.29 31 0.1 2021-08-02 32 62.82GB rustybgp rustybgp 10 10000 5 3 0 3 17.64 252 0.032 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 10 10000 0 2 0 2 11.22 104 0.193 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 30 10000 4 4 0 4 28.13 100 0.173 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (ec526afa5b01). 30 10000 0 3 0 3 22.83 79 0.299 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (dbf3b58d31c8). 30 10000 1 3 0 3 24.14 83 0.294 2021-08-02 32 62.82GB rustybgp rustybgp 30 10000 5 4 0 4 29.67 397 0.133 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 30 10000 0 11 0 11 30.15 104 1.373 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 50 10000 3 5 0 5 42.18 100 0.371 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (397e49823ba4). 50 10000 0 5 0 5 36.95 101 0.493 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (0059e9cea26d). 50 10000 1 5 0 5 36.77 104 0.526 2021-08-02 32 62.82GB rustybgp rustybgp 50 10000 7 6 0 6 46.25 522 0.337 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 50 10000 0 29 0 29 58.62 104 3.588 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 100 10000 3 18 0 18 93.32 100 1.333 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (d242197e9f14). 100 10000 1 9 0 9 77.01 102 1.276 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (35e3bbe2dfa2). 100 10000 1 10 0 10 75.0 110 1.235 2021-08-02 32 62.82GB rustybgp rustybgp 100 10000 6 16 0 16 81.65 587 1.248 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 100 10000 0 140 0 140 195.81 102 13.935 2021-08-02 32 62.82GB

Many (many) neighbors, 10 prefixes

This iterates through neighbors from 250 to 1750. More than that runs out of memory on my 64 GB machine (because of all the ExaBGP). It uses a very minimal amount of prefixes just to see if we can understand anything regarding max prefixes.

route reception time

The time to receive prefixes, all 10 per neighbor, doesn’t matter in this test.

max cpu

Interestingly, RustyBGP uses the smallest amount of CPU and OpenBGPD uses the most, by a lot. FRRouting 8 uses more CPU at 1750 neighbors than 7.5.1. I don’t know that is important since it’s still not very much

max mem

OpenBGPD uses a lot more memory, several orders of magnitude more.

Because it’s so hard to see everything but OpenBGPD, going to remove it so we can look at the others.

max mem

FRRouting 8 uses a lot more memory than FRRouting 7.5.1 or BIRD. Don’t know if this matters because it’s only 10 prefixes, but it’s interesting. There looks like some kind of per neighbor memory tax in FRRouting 8. It is too much? I don’t know. Is it impactful as there are more routes? Let’s see.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 250 10 3 1 0 1 37.45 1 0.011 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (efbcfbcfae46). 250 10 1 2 0 2 35.56 6 0.03 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (58d6fcaff2bd). 250 10 1 2 0 2 35.56 2 0.183 2021-08-02 32 62.82GB rustybgp rustybgp 250 10 4 1 0 1 37.12 1 0.02 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 250 10 0 1 0 1 33.71 2 0.115 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 500 10 4 1 0 1 68.57 2 0.018 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (a0cfaad48bb8). 500 10 1 2 0 2 66.44 4 0.051 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (3cc686c6c1b7). 500 10 1 2 0 2 66.3 3 0.351 2021-08-02 32 62.82GB rustybgp rustybgp 500 10 7 1 0 1 69.38 2 0.028 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 500 10 0 1 0 1 63.87 4 0.386 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 750 10 3 1 0 1 100.03 4 0.024 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (e0bd4c7ed94e). 750 10 1 2 0 2 99.83 6 0.069 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (3ce1d73e7577). 750 10 1 2 0 2 99.88 5 0.518 2021-08-02 32 62.82GB rustybgp rustybgp 750 10 3 1 0 1 94.65 3 0.039 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 750 10 0 1 0 1 95.74 7 0.825 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 1000 10 4 1 0 1 136.78 6 0.032 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (2cc17c82ab54). 1000 10 1 2 0 2 139.09 11 0.089 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (a943c59da7ef). 1000 10 1 1 0 1 138.45 15 0.684 2021-08-02 32 62.82GB rustybgp rustybgp 1000 10 3 1 0 1 126.63 3 0.049 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 1000 10 0 2 0 2 133.29 19 1.431 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 1250 10 4 1 0 1 179.07 8 0.038 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (98d192542e54). 1250 10 1 2 0 2 184.74 9 0.109 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (bd9d6e72020c). 1250 10 1 2 0 2 184.2 9 0.854 2021-08-02 32 62.82GB rustybgp rustybgp 1250 10 7 1 0 1 162.06 4 0.059 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 1250 10 0 2 0 2 174.82 37 2.206 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 1500 10 3 1 0 1 245.5 14 0.047 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (da063c606061). 1500 10 1 2 0 2 240.3 12 0.129 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (9ffc847915c4). 1500 10 1 2 0 2 240.3 11 1.025 2021-08-02 32 62.82GB rustybgp rustybgp 1500 10 6 1 0 1 193.44 4 0.071 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 1500 10 0 2 0 2 228.24 119 3.148 2021-08-02 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 1750 10 4 1 0 1 397.92 19 0.059 -s 2021-08-02 32 62.82GB frr frr FRRouting 7.5.1_git (3c5848cd611a). 1750 10 1 2 0 2 348.19 15 0.15 2021-08-02 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (a94a18882cb0). 1750 10 1 2 0 2 343.93 28 1.19 2021-08-02 32 62.82GB rustybgp rustybgp 1750 10 5 1 0 1 228.38 6 0.08 2021-08-02 32 62.82GB openbgp openbgp OpenBGPD 7.1 1750 10 0 2 0 2 346.25 55 4.259 2021-08-03 32 62.82GB

Many neighbors, 100 prefixes

This only goes from 250 to 750 neighbors with 100 prefixes. More than that runs out of memory on my 64 GB machine (because of all the ExaBGP processes.)

route reception time

Again, route reception is trivial. Maybe it matters that OpenBGPD at 750 neighbors is 4 seconds, but not sure.

max cpu

Similar to the 10 prefix tests, OpenBGPD uses many more CPU resources than the others.

max mem

Similar to the 10 prefix tests, OpenBGPD uses many more memory resources than the others. What’s troubling is that at 10 prefixes and 750 neighbors it’s about 1GB but at 100 prefixes, 750 neighbors it’s 6GB.

Let’s again remove OpenBGPD so we can understand the others better.

max mem

FRRouting 8 is still a lot higher than the others, but it grows to about 0.58 GB from 0.52 at 750 neighbors. That again leads credence to a per neighbor memory tax, but doesn’t seem to be in the way as more prefixes are added.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 250 100 4 1 0 1 42.5 4 0.016 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (0c1e5f60fc82). 250 100 1 2 0 2 40.71 2 0.049 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (5682965a9a3e). 250 100 1 2 0 2 40.32 2 0.198 2021-08-03 32 62.82GB rustybgp rustybgp 250 100 7 1 0 1 41.65 5 0.024 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 250 100 0 1 0 1 36.33 8 0.882 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 500 100 3 1 0 1 84.13 11 0.033 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (301d657c0456). 500 100 1 2 0 2 87.72 5 0.089 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (ffd5a10353a7). 500 100 1 2 0 2 87.33 5 0.391 2021-08-03 32 62.82GB rustybgp rustybgp 500 100 3 1 0 1 67.44 10 0.04 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 500 100 0 2 0 2 78.06 104 3.431 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 750 100 4 1 0 1 149.08 18 0.06 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (89f4d47d3ae2). 750 100 1 2 0 2 152.63 20 0.134 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (314f7f88d2c2). 750 100 1 2 0 2 151.09 19 0.581 2021-08-03 32 62.82GB rustybgp rustybgp 750 100 4 1 0 1 99.12 13 0.057 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 750 100 0 4 0 4 123.41 107 6.336 2021-08-03 32 62.82GB

Prefix iterations

This set of tests iterates from 50 to 250 neighbors and 10 prefixes to 1000.

route reception time

Route Reception is trivial, except OpenBGPD at 250 neighbors, 1000 prefixes. It plain freaks out.

max cpu

max mem

Zoom in without OpenBGPD again.

max mem

Not sure how to interpret this exactly. It looks like additional routes don’t really matter for memory until 1000 ish. FRRouting 8 still uses more memory but looks like a fixed amount perf neighbor not a percentage, so probably not so concerning. RustyBGP is the lowest memory user still.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 50 10 4 1 0 1 18.51 0 0.011 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (113d0e12c79d). 50 10 1 2 0 2 12.69 1 0.02 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (929f08570080). 50 10 1 2 0 2 12.79 1 0.058 2021-08-03 32 62.82GB rustybgp rustybgp 50 10 4 1 0 1 15.07 0 0.019 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 50 10 0 1 0 1 10.69 0 0.022 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 50 100 3 1 0 1 14.12 1 0.006 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (bfb4538bb47a). 50 100 0 2 0 2 11.79 2 0.017 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (549dc45ac858). 50 100 1 2 0 2 12.99 1 0.051 2021-08-03 32 62.82GB rustybgp rustybgp 50 100 6 1 0 1 17.18 2 0.01 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 50 100 0 1 0 1 10.94 2 0.051 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 50 1000 3 2 0 2 17.42 8 0.012 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (3f3302806935). 50 1000 1 2 0 2 15.16 9 0.058 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (bf6b61ccc50b). 50 1000 1 2 0 2 16.03 5 0.086 2021-08-03 32 62.82GB rustybgp rustybgp 50 1000 5 2 0 2 19.18 20 0.024 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 50 1000 0 2 0 2 14.29 26 0.375 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 100 10 3 1 0 1 19.13 0 0.007 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (ee0acdb717c0). 100 10 1 2 0 2 18.34 1 0.018 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (ae7b80997a7b). 100 10 1 2 0 2 18.36 1 0.081 2021-08-03 32 62.82GB rustybgp rustybgp 100 10 5 1 0 1 21.51 1 0.01 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 100 10 0 1 0 1 16.35 1 0.032 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 100 100 4 1 0 1 21.07 1 0.008 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (b204d0230f45). 100 100 1 2 0 2 19.05 2 0.026 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (dcda0c4d95dc). 100 100 1 2 0 2 18.94 1 0.087 2021-08-03 32 62.82GB rustybgp rustybgp 100 100 6 1 0 1 23.07 3 0.013 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 100 100 0 1 0 1 16.93 3 0.159 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 100 1000 4 2 0 2 30.5 24 0.05 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (17f321e4cf3d). 100 1000 1 3 0 3 26.98 19 0.096 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (96afe9d83314). 100 1000 1 2 0 2 28.19 6 0.164 2021-08-03 32 62.82GB rustybgp rustybgp 100 1000 5 2 0 2 26.78 33 0.042 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 100 1000 0 2 0 2 24.23 109 1.278 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 250 10 3 1 0 1 37.03 1 0.011 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (d66c80e8a89f). 250 10 1 2 0 2 35.44 5 0.03 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (ac4494486900). 250 10 1 2 0 2 35.5 2 0.182 2021-08-03 32 62.82GB rustybgp rustybgp 250 10 5 1 0 1 38.57 1 0.017 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 250 10 0 1 0 1 33.71 2 0.114 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 250 100 3 1 0 1 40.27 4 0.016 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (43f298acd0af). 250 100 1 2 0 2 40.53 3 0.049 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (76c98d3e45de). 250 100 1 2 0 2 39.94 2 0.201 2021-08-03 32 62.82GB rustybgp rustybgp 250 100 5 1 0 1 39.2 6 0.024 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 250 100 0 2 0 2 37.19 8 0.882 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 250 1000 4 2 0 2 99.93 46 0.322 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (372804f61f88). 250 1000 1 3 0 3 98.98 55 0.255 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (d38410082c83). 250 1000 1 1 0 1 99.79 16 0.409 2021-08-03 32 62.82GB rustybgp rustybgp 250 1000 5 2 0 2 50.75 93 0.1 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 250 1000 0 53 0 53 102.39 104 8.234 2021-08-03 32 62.82GB

1M routes.

Since the internet is getting close to 1M routes, how do these stacks do with 1M routes and multiple neighbors?

CAVEAT As I’ve been thinking about this test I’ve realized it’s not doing a good job of representing actually connecting to internet routes. It’s 1M /32s that are all unique, so in the end, if you have 5 neighbors, you have 5 million routes. It’s what I can do for now, I’ll continue to work on improving this test.

route reception time

This is the first time that RustyBGP is considerably slower than all the others.

FRR 8 is somewhat slower than 7.5.1 or BIRD. OpenBGPD looks good here.

max cpu

max mem

BIRD uses 1/3 the memory of FRRouting. RustyBGP also uses significantly less memory than FRRouting, but it’s slower too. OpenBGPD uses the most memory, as usual.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 1 1000000 3 73 67 6 120.59 28 0.099 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (d3abdbb78d48). 1 1000000 0 75 68 7 119.25 100 0.748 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (0614e7d8586a). 1 1000000 0 75 67 8 116.55 83 0.753 2021-08-03 32 62.82GB rustybgp rustybgp 1 1000000 6 86 69 17 134.92 611 0.342 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 1 1000000 0 74 68 6 117.27 116 0.615 2021-08-03 32 62.82GB bird -s bird v2.0.8-59-gf761be6b 5 1000000 4 104 71 33 307.44 100 1.329 -s 2021-08-03 32 62.82GB frr frr FRRouting 7.5.1_git (6f77a7b2651b). 5 1000000 0 105 72 33 310.54 105 3.757 2021-08-03 32 62.82GB frr 8 frr_c FRRouting 8.0-bgperf (45f6898ec515). 5 1000000 0 113 71 42 311.39 101 3.744 2021-08-03 32 62.82GB rustybgp rustybgp 5 1000000 5 161 72 89 366.39 1767 1.815 2021-08-03 32 62.82GB openbgp openbgp OpenBGPD 7.1 5 1000000 0 118 71 47 313.93 160 6.55 2021-08-03 32 62.82GB

Results from EC2 m5

I wanted to see what would happen with more resources, specifically twice as much RAM. However, the AMD device is a consumer device with less cores but each higher speed. That might matter to some of these tests because of the single core processes.

I ran the same test suites with some little changes. I won’t go through all the graphs, because there are pretty similiar results. But where there is something interesting I’ll mention that.

10K prefixes

route reception time

Route Reception has a greater difference between both FRRs and BIRD/RustyBGP. Maybe it’s that 3950 is a consumer device with higher speed cores?

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 10 10000 3 2 0 2 13.89 36 0.014 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (6c29dbcbd504). 10 10000 0 3 0 3 12.8 42 0.089 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (c03326d5cd06). 10 10000 1 3 0 3 13.88 38 0.098 2021-08-03 48 184.65GB rustybgp rustybgp 10 10000 4 3 0 3 17.22 310 0.037 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 10 10000 0 2 0 2 11.79 107 0.191 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 30 10000 4 3 0 3 29.86 100 0.154 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (51083cfe7d92). 30 10000 0 3 0 3 24.98 87 0.293 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (12a856b29b4a). 30 10000 1 3 0 3 26.16 97 0.274 2021-08-03 48 184.65GB rustybgp rustybgp 30 10000 5 4 0 4 31.78 433 0.129 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 30 10000 0 12 0 12 33.61 105 1.355 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 50 10000 4 8 0 8 48.91 100 0.216 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (6586287cc347). 50 10000 1 4 0 4 40.02 102 0.574 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (9363f3ceee54). 50 10000 1 4 0 4 39.58 96 0.53 2021-08-03 48 184.65GB rustybgp rustybgp 50 10000 4 5 0 5 46.52 488 0.333 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 50 10000 0 37 0 37 71.4 104 3.611 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 100 10000 3 30 0 30 109.99 100 0.539 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (195e24df8349). 100 10000 1 5 0 5 78.91 102 1.243 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (9aef3b64fbb9). 100 10000 1 9 0 9 83.74 102 1.159 2021-08-03 48 184.65GB rustybgp rustybgp 100 10000 4 22 0 22 93.28 645 1.266 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 100 10000 0 197 0 197 260.57 103 13.93 2021-08-03 48 184.65GB

Many (many) neighbors, 10 prefixes

I didn’t find any interesting differences here.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 250 10 4 1 0 1 43.75 1 0.011 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (9fa3b6648b40). 250 10 1 2 0 2 41.6 2 0.03 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (8b0e48e5b635). 250 10 1 2 0 2 41.75 5 0.184 2021-08-03 48 184.65GB rustybgp rustybgp 250 10 4 1 0 1 43.34 1 0.024 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 250 10 0 1 0 1 38.93 2 0.117 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 500 10 4 1 0 1 80.5 3 0.019 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (e27e7aa7e4b8). 500 10 1 2 0 2 79.12 4 0.051 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (02113aa72b06). 500 10 1 2 0 2 79.06 5 0.353 2021-08-03 48 184.65GB rustybgp rustybgp 500 10 4 1 0 1 78.79 2 0.039 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 500 10 0 1 0 1 76.21 5 0.387 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 750 10 4 1 0 1 119.31 5 0.025 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (c3eeff85707a). 750 10 1 1 0 1 116.81 8 0.071 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (554dcff645f0). 750 10 1 2 0 2 118.0 8 0.52 2021-08-03 48 184.65GB rustybgp rustybgp 750 10 7 1 0 1 118.72 3 0.052 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 750 10 0 1 0 1 114.57 9 0.827 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 1000 10 4 1 0 1 160.2 8 0.034 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (ab80fb0d3260). 1000 10 1 2 0 2 159.58 24 0.09 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (2a28e1e9fde4). 1000 10 1 2 0 2 160.37 9 0.689 2021-08-03 48 184.65GB rustybgp rustybgp 1000 10 3 1 0 1 151.55 3 0.066 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 1000 10 0 1 0 1 155.44 15 1.434 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 1250 10 4 1 0 1 202.32 11 0.04 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (03c84e9d82c5). 1250 10 1 2 0 2 203.98 12 0.11 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (d576228f82c0). 1250 10 1 2 0 2 203.42 12 0.856 2021-08-03 48 184.65GB rustybgp rustybgp 1250 10 7 1 0 1 194.22 4 0.08 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 1250 10 0 1 0 1 196.74 33 2.209 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 1500 10 4 1 0 1 246.76 14 0.048 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (c317f3fd1562). 1500 10 1 2 0 2 249.82 22 0.13 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (9cb67b730527). 1500 10 2 2 0 2 250.99 14 1.024 2021-08-03 48 184.65GB rustybgp rustybgp 1500 10 6 1 0 1 232.12 4 0.093 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 1500 10 0 2 0 2 242.93 105 3.151 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 1750 10 3 1 0 1 292.23 19 0.06 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (6e117b0dfab3). 1750 10 1 2 0 2 301.22 16 0.151 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (67fb00565b11). 1750 10 2 2 0 2 301.28 14 1.19 2021-08-03 48 184.65GB rustybgp rustybgp 1750 10 6 1 0 1 270.69 5 0.107 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 1750 10 0 2 0 2 292.51 168 4.263 2021-08-03 48 184.65GB

Many neighbors, 100 prefixes

route reception time

OpenBGPD at 750 neighbors is a lot greater route reception time than on the AMD.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 250 100 4 1 0 1 48.05 6 0.017 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (aac6c05005e7). 250 100 1 2 0 2 44.72 3 0.049 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (bafd97767753). 250 100 1 2 0 2 45.26 3 0.205 2021-08-03 48 184.65GB rustybgp rustybgp 250 100 5 1 0 1 45.64 5 0.03 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 250 100 0 1 0 1 41.95 10 0.884 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 500 100 4 1 0 1 89.49 13 0.038 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (c0bc9ab47a70). 500 100 1 3 0 3 91.91 9 0.097 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (2a1be110b83d). 500 100 1 2 0 2 92.26 5 0.392 2021-08-03 48 184.65GB rustybgp rustybgp 500 100 5 1 0 1 82.61 10 0.052 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 500 100 0 2 0 2 85.7 106 3.26 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 750 100 4 2 0 2 142.37 29 0.067 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (6bb88afd5bd1). 750 100 1 2 0 2 149.16 17 0.139 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (64114990e4ae). 750 100 1 1 0 1 148.04 9 0.588 2021-08-03 48 184.65GB rustybgp rustybgp 750 100 7 2 0 2 124.17 13 0.07 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 750 100 0 12 0 12 138.13 109 6.142 2021-08-03 48 184.65GB

Prefix iterations

Because of more memory, I tested to 500 neighbors.

route reception time

OpenBGPD is an order of magnitude worse at 500 neighbors, 1000 prefixes, then at 250.

max cpu

We see Rusytbgp jump up in CPU usage at 500 neighbors. On the AMD is never got past 100%.

max mem

OpenBGPD is using over 30GB of RAM and is slow at 500 neighbors.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 50 10 3 1 0 1 18.95 0 0.004 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (1b7bd1287074). 50 10 1 2 0 2 13.76 1 0.013 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (f23ee8ded7cd). 50 10 1 2 0 2 13.77 1 0.047 2021-08-03 48 184.65GB rustybgp rustybgp 50 10 7 1 0 1 18.96 1 0.01 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 50 10 0 1 0 1 11.54 0 0.017 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 50 100 4 1 0 1 16.12 1 0.005 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (e5757cde5cf5). 50 100 1 2 0 2 13.89 1 0.017 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (74ce4743a76a). 50 100 1 2 0 2 13.95 1 0.05 2021-08-03 48 184.65GB rustybgp rustybgp 50 100 5 1 0 1 17.04 2 0.011 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 50 100 0 1 0 1 11.8 1 0.049 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 50 1000 4 2 0 2 19.74 11 0.011 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (ee1524e5b82e). 50 1000 1 3 0 3 17.78 8 0.054 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (969567a4ed46). 50 1000 1 2 0 2 16.65 8 0.088 2021-08-03 48 184.65GB rustybgp rustybgp 50 1000 6 2 0 2 21.49 10 0.026 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 50 1000 0 2 0 2 15.47 32 0.373 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 100 10 4 1 0 1 22.4 0 0.006 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (4fe15269e3c2). 100 10 1 2 0 2 20.55 1 0.017 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (ac0e558251b6). 100 10 1 2 0 2 20.37 1 0.08 2021-08-03 48 184.65GB rustybgp rustybgp 100 10 6 1 0 1 24.75 1 0.013 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 100 10 0 1 0 1 18.31 1 0.031 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 100 100 3 1 0 1 22.19 2 0.007 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (6145e734701d). 100 100 1 2 0 2 21.33 1 0.024 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (4cae93bd405c). 100 100 1 2 0 2 21.26 4 0.088 2021-08-03 48 184.65GB rustybgp rustybgp 100 100 5 1 0 1 24.13 3 0.016 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 100 100 0 1 0 1 18.98 3 0.158 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 100 1000 3 2 0 2 30.45 24 0.047 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (8dd5bfdc0070). 100 1000 1 2 0 2 28.17 21 0.101 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (de7122c38a5f). 100 1000 1 2 0 2 28.68 4 0.165 2021-08-03 48 184.65GB rustybgp rustybgp 100 1000 7 2 0 2 32.02 35 0.05 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 100 1000 0 2 0 2 25.87 108 1.205 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 250 10 3 1 0 1 42.49 1 0.01 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (6edac209a780). 250 10 1 2 0 2 41.79 2 0.031 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (7b36871c45fd). 250 10 1 2 0 2 41.77 7 0.182 2021-08-03 48 184.65GB rustybgp rustybgp 250 10 6 1 0 1 45.63 1 0.023 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 250 10 0 1 0 1 39.03 2 0.118 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 250 100 3 1 0 1 45.62 5 0.017 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (19e61a045c85). 250 100 1 2 0 2 44.63 3 0.052 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (f420d5f3148e). 250 100 1 2 0 2 45.45 3 0.208 2021-08-03 48 184.65GB rustybgp rustybgp 250 100 4 1 0 1 44.65 5 0.03 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 250 100 0 1 0 1 42.17 11 0.882 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 250 1000 4 2 0 2 90.23 100 0.271 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (0a8e2847dfb3). 250 1000 1 2 0 2 85.26 7 0.266 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (6997fde34233). 250 1000 1 2 0 2 84.16 13 0.404 2021-08-03 48 184.65GB rustybgp rustybgp 250 1000 5 2 0 2 59.78 130 0.098 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 250 1000 0 77 0 77 130.97 104 8.322 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 500 10 4 1 0 1 81.1 3 0.019 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (feaf3f0aa01c). 500 10 1 2 0 2 78.94 4 0.051 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (db742eea9ece). 500 10 1 2 0 2 79.04 5 0.353 2021-08-03 48 184.65GB rustybgp rustybgp 500 10 5 1 0 1 80.24 2 0.038 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 500 10 0 1 0 1 76.11 5 0.387 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 500 100 4 1 0 1 89.43 13 0.036 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (f46f0020af8b). 500 100 1 1 0 1 91.63 6 0.085 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (2cde9edc1b70). 500 100 1 2 0 2 92.13 10 0.397 2021-08-03 48 184.65GB rustybgp rustybgp 500 100 7 1 0 1 84.86 9 0.052 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 500 100 0 2 0 2 85.36 107 3.212 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 500 1000 4 4 0 4 268.44 100 0.206 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (d920efd504bb). 500 1000 1 3 0 3 259.93 17 0.597 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (679983b9da23). 500 1000 1 3 0 3 258.02 105 0.898 2021-08-03 48 184.65GB rustybgp rustybgp 500 1000 6 9 0 9 118.66 472 0.951 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 500 1000 0 516 0 516 619.03 104 33.718 2021-08-03 48 184.65GB

1M routes.

max cpu

RustyBGP uses twice as much CPU as the AMD, but is still slower than all the others.

results table

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 1 1000000 4 83 76 7 140.62 37 0.099 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (f08fdc332b25). 1 1000000 0 85 76 9 136.48 103 0.733 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (5effcaf57435). 1 1000000 1 85 76 9 137.54 98 0.746 2021-08-03 48 184.65GB rustybgp rustybgp 1 1000000 7 96 76 20 155.45 887 0.323 2021-08-03 48 184.65GB openbgp openbgp OpenBGPD 7.1 1 1000000 0 84 77 7 135.26 119 0.615 2021-08-03 48 184.65GB bird -s bird v2.0.8-59-gf761be6b 5 1000000 3 119 81 38 370.24 100 1.293 -s 2021-08-03 48 184.65GB frr frr FRRouting 7.5.1_git (7c2318f544f4). 5 1000000 0 122 81 41 374.46 106 3.773 2021-08-03 48 184.65GB frr 8 frr_c FRRouting 8.0-bgperf (486402e07539). 5 1000000 0 130 81 49 375.28 102 3.714 2021-08-04 48 184.65GB rustybgp rustybgp 5 1000000 5 185 81 104 437.22 2918 1.304 2021-08-04 48 184.65GB openbgp openbgp OpenBGPD 7.1 5 1000000 0 140 81 59 389.42 155 6.527 2021-08-04 48 184.65GB

Results from EC2 t3

I wanted to try out what would happen on a machine with more limited resources. As with the above, these are the same suite of tests, with some little limitations because of less memory. The biggest issue is that because the target stack and the tester, and the monitor, are all on the same hardware they fight for resources, especially in the many neighbors test. I’m still trying to understand the impact of bgperf on the results.

10K prefixes

max cpu

It’s interesting that RustyBGP uses less CPU, because there is less, but it’s not much slower than on the other machines. What is it doing with those other CPU resources when it has them?

Many (many) neighbors, 10 prefixes

Can only test many less parameters because of memory.

max cpu

While not really different, it is interesting to zoom in on just 250 and 500 neighbors.

max mem

Again, not much different, but zooming in shows the difference in memory between FRRouing 8/OpenBGPD vs the others.

Many neighbors, 100 prefixes

Nothing interestingly different here.

Prefix iterations

Nothing interestingly different here.

1M routes.

route reception time

While the others are about the same, RustyBGP doubles it’s time here.

max cpu

Just a lot less CPU resources for RustyBGP to use.

More extreme tests

After doing those suite of tests across all three different hardware, I realized that in some cases it’s still telling us more about how much resources the test suite uses than the limits of these stacks. These no longer test OpenBGPD (or GoBGP) because it is so much less performant than the other stacks. I can’t use my own AMD machine because these tests run out of memory, so this is all EC2 hardware.

10 Prefixes, Many Many Neighbors

route reception time

Ooop, right away, something interesting. above 3000 neighbors BIRD gets sad/mad. We seem to have found a boundary in BIRD where it gets much worse

max cpu

max mem

100 Prefixes, Many Neighbors

In the above tests, there was a test for 100 Prefixes up to 750 neighbors. Let’s go bigger and see what we see.

route reception time

Above 1000 neighbors BIRD gets sad/mad. In the above tests we did over 1000 neighbors with BIRD, but with only 10 prefixes.

max cpu

max mem

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 500 100 3 1 0 1 86.09 12 0.042 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (3f48ff72e985). 500 100 1 2 0 2 86.62 9 0.093 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (9f7e89faa23b). 500 100 1 2 0 2 86.62 5 0.402 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 500 100 4 1 0 1 84.71 14 0.083 2021-08-06 96 373.71GB bird -s bird v2.0.8-59-gf761be6b 750 100 3 2 0 2 132.26 32 0.076 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (3a605a30d502). 750 100 1 2 0 2 132.56 13 0.133 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (7d71ee1eae78). 750 100 1 2 0 2 132.72 9 0.594 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 750 100 3 1 0 1 122.23 27 0.113 2021-08-06 96 373.71GB bird -s bird v2.0.8-59-gf761be6b 1000 100 4 23 0 23 203.0 102 0.066 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (e6ecdb58fce7). 1000 100 1 2 0 2 183.73 13 0.166 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (2d3a2461279c). 1000 100 1 2 0 2 182.45 15 0.791 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 1000 100 5 2 0 2 166.61 27 0.148 2021-08-06 96 373.71GB bird -s bird v2.0.8-59-gf761be6b 1250 100 3 106 0 106 333.29 102 0.08 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (8530711cc1eb). 1250 100 1 2 0 2 238.56 30 0.22 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (d80d45396d14). 1250 100 1 2 0 2 239.83 19 0.981 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 1250 100 6 2 0 2 208.36 35 0.177 2021-08-06 96 373.71GB bird -s bird v2.0.8-59-gf761be6b 1500 100 4 265 0 265 544.04 102 0.12 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (3486fff94217). 1500 100 1 2 0 2 299.12 27 0.258 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (35d8bdf2376a). 1500 100 2 2 0 2 300.5 25 1.168 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 1500 100 3 2 0 2 246.67 48 0.206 2021-08-06 96 373.71GB

1000 Prefixes, Many Neighbors

route reception time

Once again, BIRD is mad. RustyBGP also is > an order of magnitude slower than FRRouting.

max cpu

RustyBGP is using lots of CPU here. It looks like FRRouting doesn’t get to 100% CPU until there are 750 neighbors here.

max mem

Interestingly, BIRD uses the least amount of memory. RustyBGP uses a lot of memory for RustyBGP. It is usually the lowest or near the lowest memory users in these tests, but not here.

name target version peers prefixes per peer neighbor (s) elapsed (s) prefix received (s) exabgp (s) total time max cpu % max mem (GB) flags date cores Mem (GB) bird -s bird v2.0.8-59-gf761be6b 500 1000 4 100 0 100 233.72 101 0.125 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (8e9dc5fee3a8). 500 1000 1 3 0 3 168.5 34 0.577 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (3877e90d9055). 500 1000 1 3 0 3 165.99 28 0.915 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 500 1000 5 19 0 19 128.23 916 1.67 2021-08-06 96 373.71GB bird -s bird v2.0.8-59-gf761be6b 750 1000 3 233 0 233 434.58 101 0.227 -s 2021-08-06 96 373.71GB frr frr FRRouting 7.5.1_git (608af43f977b). 750 1000 1 5 0 5 315.49 112 1.046 2021-08-06 96 373.71GB frr 8 frr_c FRRouting 8.0-bgperf (90af929fb66d). 750 1000 1 4 0 4 329.84 108 1.383 2021-08-06 96 373.71GB rustybgp rustybgp rustybgpd 750 1000 6 68 0 68 232.51 1042 5.338 2021-08-06 96 373.71GB

Observations

These tests use quite a bit of hardware in CPU and memory. Most of those resources are going into ExaBGP sending the prefixes rather than in the targets. In some ways this is a test of the test system. I’m still figuring out how to best test the targets without the test system getting in the way.

RustyBGP

I’ve seen twitter claims that RustyBGP is significantly faster that FRRouting, but I can’t reproduce that here. I’m sure I’m missing something. RustyBGP is still missing a lot of necessary BGP daemon features, I’m just not testing them.

BIRD with more than 1000 neighbors and more than just a handful of prefixes becomes problematic. And with 1000 prefixes, By 500 neighbors it’s performing badly again. I don’t know what it is exactly that is the bottleneck here.

Conclusion

OpenBGP struggles in places that the other stacks do not, but it’s still faster than GoBGP. For anybody running OpenBGP, are there scenarios that make it more useful than the other stacks? All other things being equal, if performance or memory use matters, it looks like OpenBGP is the loser here.

Not sure the winner, maybe FRRouting 7.5.1? Is that enough to not use FRRouting 8? I doubt it, but I’m not testing functionality, just straight up speed on these simple tests. There are some cases in which RustyBGP is faster or uses less memory.

I’m not really going to declare a winner.

Try out bgperf yourself.

Questions

There are probably patterns in here that I missed. What analysis did I miss looking through this data?

Are the scenarios that I’m using to test useful? Are there different combinations of prefixes and neighbors that I should be testing?

Does anybody else have either BGP testing tools that they can share, or other results that they can share?

followup / todo

Still more to do to be more representative of real loads and not so artificial.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK