The FRRouting Protocol Suite
Find a file
Rajasekar Raja 6f132af67b lib: Fix to optimize the time taken while batching huge configs
Issue: When the incoming config has say 30K entries of a prefix-lists,
current implementation is to schedule the configs to be batched and
only after batching the entire config, the processing of the configs
take place. As part of batching this config, we perform string
concatenation to save all the configs in the buffer which over time
results in taking longer time.

Ex: Imagine each line of config is 50 chars. With a delimiter of ‘- ‘ we end
up adding 52 chars to buffer for each command i.e. 52*30000 = 156K of chars.
Strlcat is an expensive operation and every time we strlcat, we have to
traverse at end of string to append new char.
Because of this, we end up adding extra 6-8 secs for accepting the config.

Fix: The idea here is to bring back something similar to the backoff
count implemented as part of 20e9a402 (lib: introduce configuration
back-off timer for YANG-modeled commands).

Essentially we keep a cap of 5000 per batch. So once 5000k config
commands are batched, we process them, clear the buffer, set the count
to 0 and then continue processing the rest of the config.

option1 file has 30K entries of prefix-list
Without Fix:
root@mlx-3700-20:mgmt:/var/log/raja/frr# time sudo vtysh -f option1
<SNIP>..............
Waiting for children to finish applying config...
[25191|staticd] done
[25189|watchfrr] done
[25178|ospfd] done
[25190|pbrd] done
[25181|bgpd] done
[25175|zebra] done

real    0m20.123s
user    0m9.384s
sys     0m2.403s

With Fix:
root@mlx-3700-20:mgmt:/var/log/raja/frr# time sudo vtysh -f option1
<SNIP>..............
Waiting for children to finish applying config...
[19887|staticd] done
[19885|watchfrr] done
[19886|pbrd] done
[19874|ospfd] done
[19877|bgpd] done
[19871|zebra] done

real	0m12.168s
user	0m7.511s
sys	0m1.981s

Issue: 3589101

Ticket# 3589101

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
2024-12-18 11:53:06 -08:00
.github ci: do apt-get update before installing required modules 2024-06-08 17:29:19 -04:00
alpine docker: Set ABUILD_APK_INDEX_OPTS for frr build 2024-06-14 16:33:32 +03:00
babeld babeld: changes for code maintainability 2024-09-06 07:02:51 +05:30
bfdd Merge pull request #16987 from opensourcerouting/bfd-echo-sock 2024-11-26 08:51:07 -05:00
bgpd Merge pull request #17603 from opensourcerouting/fix/bgp_peer_with_peer-group 2024-12-06 08:55:56 -06:00
debian Merge pull request #17375 from opensourcerouting/fix/use_pcre2 2024-11-18 12:34:18 -05:00
doc Merge pull request #17461 from csiltala/multicast-boundary-acl 2024-12-09 10:42:04 -05:00
docker Docker: Add the ability to override FRR UID 2024-11-26 12:18:37 -05:00
eigrpd *: Modify agentx to be allowed to be called 2024-05-10 10:16:29 -04:00
fpm fpm: Allow max fpm message size to float based on ecmp 2024-10-11 09:37:37 -04:00
gdb lib: add simplified native msg support 2023-12-26 08:34:56 -05:00
grpc build: throw in a few more XREF_SETUP 2024-05-09 18:02:49 +02:00
include build: include our own copy of if.h and dependencies 2024-04-26 17:11:53 +02:00
isisd Merge pull request #17219 from zhou-run/202406201119 2024-11-26 10:10:33 -05:00
ldpd ldpd: free previous config if it wasn't applied 2024-10-16 13:30:25 +02:00
lib lib: Fix to optimize the time taken while batching huge configs 2024-12-18 11:53:06 -08:00
m4 build: add recursion limit for AX_RECURSIVE_EVAL 2024-01-27 19:01:19 +01:00
mgmtd lib: add flag to have libyang load internal ietf-yang-library module 2024-10-07 03:32:44 +00:00
mlag build: throw in a few more XREF_SETUP 2024-05-09 18:02:49 +02:00
nhrpd Merge pull request #16700 from louis-6wind/fix-nhrp-output 2024-11-28 17:16:24 +02:00
ospf6d Merge pull request #17363 from acooks-at-bda/fix-redundant-null-ptr-check-CID-1599962 2024-11-06 08:10:00 +02:00
ospfclient tools, ospfclient: add a config option to skip installing python scripts 2024-08-22 13:46:30 -05:00
ospfd ospfd: Correct invalid SR-MPLS output label 2024-11-23 19:05:25 +01:00
pathd *: Create termtable specific temp memory 2024-09-01 13:07:46 -04:00
pbrd lib: common debug status output 2024-08-27 09:53:02 -04:00
pceplib Merge pull request #15215 from donaldsharp/pceplib_fixup 2024-01-25 09:59:59 +02:00
pimd pimd: Convert boundary_oil_plist to struct prefix_list 2024-12-06 14:44:52 -06:00
pkgsrc build: homologize path handling 2024-01-27 19:02:52 +01:00
python tools: Fix syntax raw parsing for make-foobar helper 2024-11-18 11:04:27 +02:00
qpb *: add XREF_SETUP() to libraries and utilites 2024-05-02 23:03:08 +02:00
redhat packaging: Use PCRE2 for .deb/.rpm builds 2024-11-08 08:50:54 +02:00
ripd ripd: Use route_node_match instead of route_node_match_ipv4 2024-11-25 13:12:10 -05:00
ripngd ripngd: adjust header for display command 2024-07-05 09:31:39 +08:00
sharpd Merge pull request #17445 from cscarpitta/fix/sharp-use-ipv6-max-bitlen 2024-11-17 14:19:58 +02:00
snapcraft bfdd: remove control socket obsolete code 2024-07-25 10:37:11 -03:00
staticd *: Fix up improper handling of nexthops for nexthop tracking 2024-10-15 11:57:23 -04:00
tests tests: Add basic multicast boundary test 2024-12-06 14:44:52 -06:00
tools tools: fix style check babletrace file 2024-11-25 09:00:03 -08:00
vrrpd vrrpd: iterate over all ancillary messages 2024-10-07 13:05:10 -03:00
vtysh lib,vtysh: Use backoff setsockopt option for freebsd 2024-12-03 18:49:59 -05:00
watchfrr build: homologize path handling 2024-01-27 19:02:52 +01:00
yang pimd,yang: Extend multicast boundary functionality 2024-12-06 14:44:17 -06:00
zebra Merge pull request #17589 from anlancs/master_up 2024-12-07 22:35:12 +02:00
.clang-format *: Modify clang-format column limit to 100 2024-09-26 09:58:32 -04:00
.dockerignore docker: Make docker image on CentOS 7 2019-11-26 19:29:30 +00:00
.flake8 style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.git-blame-ignore-revs tools: Add black formatting commit to .git-blame-ignore-revs 2024-04-28 12:50:51 +03:00
.gitignore python: add tool to expand typesafe definitions 2024-04-29 17:37:49 +02:00
.isort.cfg style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.pylintrc style: add format checker config that matches FRR style standards 2023-04-18 05:18:26 -04:00
.travis.yml lib: libyang2 add missed conversion 2021-05-17 22:13:59 -04:00
bootstrap.sh build: turn on automake warnings (& symlinks) 2021-04-21 15:42:37 +02:00
buildtest.sh build: update packaging & docs for dir changes 2024-01-27 19:01:19 +01:00
config.version.in build: carry --with-pkg-extra-version into tarballs 2018-10-24 15:11:50 +02:00
configure.ac build: FRR 10.3 development version 2024-10-08 13:06:40 -05:00
COPYING *: sort out & explain licenses used in FRR 2023-02-09 12:46:13 +01:00
Makefile.am build: homologize path handling 2024-01-27 19:02:52 +01:00
README.md doc: Fix the link that points to Slack invitation in README 2022-03-24 13:13:37 +02:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
version.h build: make builddir include path consistent 2021-04-21 15:42:33 +02:00

Icon

FRRouting

FRR is free software that implements and manages various IPv4 and IPv6 routing protocols. It runs on nearly all distributions of Linux and BSD and supports all modern CPU architectures.

FRR currently supports the following protocols:

  • BGP
  • OSPFv2
  • OSPFv3
  • RIPv1
  • RIPv2
  • RIPng
  • IS-IS
  • PIM-SM/MSDP
  • LDP
  • BFD
  • Babel
  • PBR
  • OpenFabric
  • VRRP
  • EIGRP (alpha)
  • NHRP (alpha)

Installation & Use

For source tarballs, see the releases page.

For Debian and its derivatives, use the APT repository at https://deb.frrouting.org/.

Instructions on building and installing from source for supported platforms may be found in the developer docs.

Once installed, please refer to the user guide for instructions on use.

Community

The FRRouting email list server is located here and offers the following public lists:

Topic List
Development dev@lists.frrouting.org
Users & Operators frog@lists.frrouting.org
Announcements announce@lists.frrouting.org

For chat, we currently use Slack. You can join by clicking the "Slack" link under the Participate section of our website.

Contributing

FRR maintains developer's documentation which contains the project workflow and expectations for contributors. Some technical documentation on project internals is also available.

We welcome and appreciate all contributions, no matter how small!

Security

To report security issues, please use our security mailing list:

security [at] lists.frrouting.org