mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
The BIRD project aims to develop a fully functional dynamic IP routing daemon.
https://bird.network.cz
973aa37e1e
When BIRD has no free memory mapped, it allocates several pages in advance just to be sure that there is some memory available if needed. This hysteresis tactics works quite well to reduce memory ping-ping with kernel. Yet it had a subtle bug: this pre-allocation didn't take a memory coldlist into account, therefore requesting new pages from kernel even in cases when there were other pages available. This led to slow memory bloating. To demonstrate this behavior fast enough to be seen well, you may: * temporarily set the values in sysdep/unix/alloc.c as follows to exacerbate the issue: #define KEEP_PAGES_MAIN_MAX 4096 #define KEEP_PAGES_MAIN_MIN 1000 #define CLEANUP_PAGES_BULK 4096 * create a config file with several millions of static routes * periodically disable all static protocols and then reload config * log memory consumption This should give you a steady growth rate of about 16kB per cycle. If you don't set the values this high, the issue happens much more slowly, yet after 14 days of running, you are going to see an OOM kill. After this fix, pre-allocation uses the memory coldlist to get some hot pages and the same test as described here gets you a perfectly stable constant memory consumption (after some initial wobbling). Thanks to NIX-CZ for reporting and helping to investigate this issue. Thanks to Santiago for finding the cause in the code. |
||
---|---|---|
client | ||
conf | ||
distro | ||
doc | ||
filter | ||
lib | ||
misc | ||
nest | ||
proto | ||
sysdep | ||
test | ||
tools | ||
.dir-locals.el | ||
.gitignore | ||
.gitlab-ci.yml | ||
aclocal.m4 | ||
bird-gdb.py | ||
bird.conf | ||
configure.ac | ||
INSTALL | ||
Makefile.in | ||
NEWS | ||
README |
BIRD Internet Routing Daemon Home page http://bird.network.cz/ Mailing list bird-users@network.cz (c) 1998--2008 Martin Mares <mj@ucw.cz> (c) 1998--2000 Pavel Machek <pavel@ucw.cz> (c) 1998--2008 Ondrej Filip <feela@network.cz> (c) 2009--2019 CZ.NIC z.s.p.o. ================================================================================ The BIRD project aims to develop a dynamic IP routing daemon with full support of all modern routing protocols, easy to use configuration interface and powerful route filtering language, primarily targeted on (but not limited to) Linux and other UNIX-like systems and distributed under the GNU General Public License. What do we support ================== o Both IPv4 and IPv6 o Multiple routing tables o Border Gateway Protocol (BGPv4) o Routing Information Protocol (RIPv2, RIPng) o Open Shortest Path First protocol (OSPFv2, OSPFv3) o Babel Routing Protocol (Babel) o Bidirectional Forwarding Detection (BFD) o IPv6 router advertisements o Static routes o Inter-table protocol o Command-line interface allowing on-line control and inspection of status of the daemon o Soft reconfiguration, no need to use complex online commands to change the configuration, just edit the configuration file and notify BIRD to re-read it and it will smoothly switch itself to the new configuration, not disturbing routing protocols unless they are affected by the configuration changes o Powerful language for route filtering, see doc/bird.conf.example o Linux, FreeBSD, NetBSD and OpenBSD ports How to install BIRD =================== o From standard distribution package of your OS (recommended) o From official binary packages for Debian and Red Hat Linux ftp://bird.network.cz/pub/bird/debian/ ftp://bird.network.cz/pub/bird/redhat/ o From source code of the latest stable release version ftp://bird.network.cz/pub/bird/ o From current development code in Git repository https://gitlab.labs.nic.cz/labs/bird/ See the file INSTALL for information about installation from source code. Documentation ============= Online documentation is available at http://bird.network.cz/?get_doc or as HTML files in the doc directory, you can install it by `make install-docs' and rebuild it by `make docs', but you'll need SGMLtools and LaTeX to be installed on your machine. You can also download a neatly formatted PDF version as a separate archive (bird-doc-*.tar.gz) from ftp://bird.network.cz/pub/bird/ User support ============ If you want to help us debugging, enhancing and porting BIRD or just lurk around to see what's going to develop, feel free to subscribe to the BIRD users mailing list bird-users@network.cz, just send `subscribe' to bird-request@network.cz. Bug reports, suggestions, feature requests and code are welcome! We don't use gitlab issues for reporting, sorry. Subscribe: http://bird.network.cz/mailman/listinfo/bird-users/ Archive: http://bird.network.cz/pipermail/bird-users/ Licence ======= This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA History ======= BIRD development started as a student project at the Faculty of Math and Physics, Charles University, Prague, Czech Republic under supervision of RNDr. Libor Forst <forst@cuni.cz>. BIRD has been developed and supported by CZ.NIC z.s.p.o. http://www.nic.cz/ since 2009. Good Luck and enjoy the BIRD :) The BIRD Team