Hi, there is definitly a memory leak in Bird - After starting it uses approx 500K - After a couple of days we are running at ~30MB :) mgr1:~# ps auxw | grep bird root 1961 0.0 22.3 29556 28416 ? S Jun15 2:26 /usr/sbin/bird mgr1:~# date Sun Jun 18 18:03:49 UTC 2000 This is only Rip, Direct, Kernel, Device Flo -- Florian Lohoff flo@rfc822.org +49-waiting-4-telekom "If you're not having fun right now, you're wasting your time."
Hello!
there is definitly a memory leak in Bird - After starting it uses approx 500K - After a couple of days we are running at ~30MB :)
mgr1:~# ps auxw | grep bird root 1961 0.0 22.3 29556 28416 ? S Jun15 2:26 /usr/sbin/bird mgr1:~# date Sun Jun 18 18:03:49 UTC 2000
This is only Rip, Direct, Kernel, Device
Are you compiling BIRD with any debugging switches? If you do, it probably gets linked with either libefence or libdmalloc which really doesn't free memory. If you don't, can you try running bird with `-D somefile' and sending a `dump res' command to it soon after start and after a hour or so of work? Have a nice fortnight -- Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/ Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth "return(ECRAY); /* Program exited before being run */"
Date: Sun, 18 Jun 2000 11:55:54 -0700 From: Florian Lohoff <flo@rfc822.org> Content-Type: text/plain; charset=us-ascii User-Agent: Mutt/1.0.1i Organization: rfc822 - pure communication Sender: owner-bird-users@atrey.karlin.mff.cuni.cz List-Help: <mailto:majordomo@atrey.karlin.mff.cuni.cz?body=help> List-Owner: <mailto:owner-bird-users@atrey.karlin.mff.cuni.cz> List-Post: <mailto:bird-users@atrey.karlin.mff.cuni.cz> List-Unsubscribe: <mailto:bird-users-request@atrey.karlin.mff.cuni.cz?body=unsubscribe> Hi, there is definitly a memory leak in Bird - After starting it uses approx 500K - After a couple of days we are running at ~30MB :) mgr1:~# ps auxw | grep bird root 1961 0.0 22.3 29556 28416 ? S Jun15 2:26 /usr/sbin/bird mgr1:~# date Sun Jun 18 18:03:49 UTC 2000 This is only Rip, Direct, Kernel, Device With the following config, bird has been running for 4 days, without memory growth. Linux kernel 2.2.14, Slackware 7. # This pseudo-protocol performs synchronization between BIRD's routing # tables and the kernel. If your kernel supports multiple routing tables # (as Linux 2.2.x does), you can run multiple instances of the kernel # protocol and synchronize different kernel tables with different BIRD tables. protocol kernel { persist; # Don't remove routes on bird shutdown scan time 60; # Scan kernel routing table every N seconds export all; # Default is export none } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 60; # Scan interfaces every N seconds } # RIP aka Rest In Pieces... Ignorance of most stub routers. protocol rip { interface "*" { mode broadcast; }; import filter { print "importing"; accept; }; export filter { print "exporting"; accept; }; } Alas, it's also totally dead, as Ethereal shows a total absence of routing packets. Perhaps those broadcast addresses do need to be explictly set....
On Mon, Jun 19, 2000 at 08:31:03AM -0700, Network Administration wrote:
With the following config, bird has been running for 4 days, without memory growth. Linux kernel 2.2.14, Slackware 7.
This is mainly my config except that i have a "direct" protocol enabled as i have a couple of devices which are buggy concerning split-horizon wich means that bird deletes the ethernet route which then lets it go mad ... Flo -- Florian Lohoff flo@rfc822.org +49-waiting-4-telekom "If you're not having fun right now, you're wasting your time."
Hello!
Alas, it's also totally dead, as Ethereal shows a total absence of routing packets. Perhaps those broadcast addresses do need to be explictly set....
Yes, they probably should -- do you configure your interfaces using ifconfig or using "ip link set" plus "ip addr add" ? Have a nice fortnight -- Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/ Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth "bug, n: A son of a glitch."
Date: Tue, 20 Jun 2000 02:04:41 +0200 From: Martin Mares <mj@ucw.cz>
Alas, it's also totally dead, as Ethereal shows a total absence of routing packets. Perhaps those broadcast addresses do need to be explictly set....
Yes, they probably should -- do you configure your interfaces using ifconfig or using "ip link set" plus "ip addr add" ? Actually, Ethereal would show anything sent out the interface, even broadcast to the wrong address. As I suspected, no change when the broadcast addresses are corrected. A 2.2.14 kernel, setup with ifconfig, routed works fine (but version 1), and gated RIP broadcasts seen (except by my stub router) prior to trying BIRD. BIRD still DOA. bird> do Shutdown requested Connection closed by server. moat:/etc }bird moat:/etc }birdc BIRD 1.0.0 ready. bird> sh route bird> qu etc }cat bird.conf # This pseudo-protocol performs synchronization between BIRD's routing # tables and the kernel. If your kernel supports multiple routing tables # (as Linux 2.2.x does), you can run multiple instances of the kernel # protocol and synchronize different kernel tables with different BIRD tables. protocol kernel { persist; # Don't remove routes on bird shutdown scan time 60; # Scan kernel routing table every N seconds export all; # Default is export none } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 60; # Scan interfaces every N seconds } # RIP aka Rest In Pieces... Ignorance of most stub routers. protocol rip { interface "*" { mode broadcast; }; import filter { print "importing"; accept; }; export filter { print "exporting"; accept; }; }
Hello!
Actually, Ethereal would show anything sent out the interface, even broadcast to the wrong address.
It probably wouldn't since packets with such a wrong address would never reach the interface.
As I suspected, no change when the broadcast addresses are corrected. A 2.2.14 kernel, setup with ifconfig, routed works fine (but version 1), and gated RIP broadcasts seen (except by my stub router) prior to trying BIRD. BIRD still DOA.
The most probable cause is that it has no routes to export -- can you try adding a Direct protocol to get at least the device routes? Have a nice fortnight -- Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/ Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth "return(EIEIO); /* Here-a-bug, There-a-bug... */"
Date: Wed, 21 Jun 2000 23:54:42 +0200 From: Martin Mares <mj@ucw.cz>
Actually, Ethereal would show anything sent out the interface, even broadcast to the wrong address.
It probably wouldn't since packets with such a wrong address would never reach the interface. depends on default route setup.
As I suspected, no change when the broadcast addresses are corrected. A 2.2.14 kernel, setup with ifconfig, routed works fine (but version 1), and gated RIP broadcasts seen (except by my stub router) prior to trying BIRD. BIRD still DOA.
The most probable cause is that it has no routes to export -- can you try adding a Direct protocol to get at least the device routes? Ah, kernel routes are insufficient? /etc }cat bird.conf # This pseudo-protocol performs synchronization between BIRD's routing # tables and the kernel. If your kernel supports multiple routing tables # (as Linux 2.2.x does), you can run multiple instances of the kernel # protocol and synchronize different kernel tables with different BIRD tables. protocol kernel { persist; # Don't remove routes on bird shutdown scan time 61; # Scan kernel routing table every N seconds import all; export all; # Default is export none } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 62; # Scan interfaces every N seconds } # RIP aka Rest In Pieces... Ignorance of most stub routers. protocol rip { interface "*" { mode broadcast; }; import filter { print "importing"; accept; }; export filter { print "exporting"; accept; }; } /etc }route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 208.135.194.20 0.0.0.0 255.255.255.252 U 0 0 0 eth1 208.135.194.16 0.0.0.0 255.255.255.252 U 0 0 0 eth0 208.135.194.24 0.0.0.0 255.255.255.248 U 0 0 0 eth2 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 208.135.194.25 0.0.0.0 UG 1 0 0 eth2 /etc }birdc BIRD 1.0.0 ready. bird> sh route bird> adding: protocol direct { interface "eth*", "*"; } /etc }birdc BIRD 1.0.0 ready. bird> conf Reading configuration from /usr/local/etc/bird.conf Reconfigured. bird> sh rout 208.135.194.16/30 dev eth0 [direct1 20:38] (240) 208.135.194.20/30 dev eth1 [direct1 20:38] (240) 208.135.194.24/29 dev eth2 [direct1 20:38] (240) 127.0.0.0/8 dev lo [direct1 20:38] (240) and RIP shows up in Ethereal.
Hello!
Ah, kernel routes are insufficient?
Yes. Unless you specify the "learn" switch in configuration of the Kernel protocol, BIRD never imports any routes from the kernel tables.
adding:
protocol direct { interface "eth*", "*"; }
BTW, `interface "*"' is the default. Have a nice fortnight -- Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/ Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth "And God said: E = 1/2mv^2 - Ze^2/r ...and there *WAS* light!"
Date: Thu, 22 Jun 2000 10:55:06 +0200 From: Martin Mares <mj@ucw.cz>
Ah, kernel routes are insufficient?
Yes. Unless you specify the "learn" switch in configuration of the Kernel protocol, BIRD never imports any routes from the kernel tables. You should probably change the sample config of the documentation, section "6.4 Kernel" to include "learn". A simple configuration can look this way: protocol kernel { learn; import all; export all; } Or otherwise note that 'device' routes should be included.
Hello!
You should probably change the sample config of the documentation, section "6.4 Kernel" to include "learn".
No -- except for unusual situations, "learn" is probably not what you expect. Also, it works only on some OS's since on most of them it's impossible to determine which routes are installed by BIRD and which ones by the user.
Or otherwise note that 'device' routes should be included.
The documentation explicitly says: | <sect>Direct | | <p>The Direct protocol is a simple generator of device routes for all the | directly connected networks according to the list of interfaces provided | by the kernel via the Device protocol. | | <p>It's highly recommended to include this protocol in your configuration | unless you want to use BIRD as a route server or a route reflector, that is | on a machine which doesn't forward packets itself and only participates in | distribution of routing information. Also, both Device and Direct are shown in the example configuration. Have a nice fortnight -- Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/ Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth "This message transmited on 100% recycled electrons."
Or otherwise note that 'device' routes should be included.
The documentation explicitly says: Very few people completely read all sections of the documentation prior to trying out software. Most busy people scan docs, make guesses and modify config files. The more places you put in hints, the easier the software is to bring up, and the further it spreads.
participants (3)
-
Florian Lohoff -
Martin Mares -
Network Administration