Re: Bird 1.5 and 1.6 memory leak

2018-04-18 Thread Willy Goiffon

Le 2018-04-17 14:27, Alexander Demenshin a écrit :

On 2018-04-17 13:31, wi...@mailoo.org wrote:

As I said, the mem leak does not apppear in the `birdc show memory` 
command.

It is shown at the OS level, and is shown via the `free` command.


What do you mean by "OS level"? Which exactly level? What is the actual 
process

size as reported by ps ("ps axuw|grep bird")?


By "OS Level" I mean the memory used as reported by the kernel from 
/proc/meminfo.

The process size is rather standard:

bird 1737 0.0 0.0 15540 2216 ? Ss Apr17 0:01 /usr/sbin/bird -f -u 
bird -g bird


If I sum up the size of all processes, I don't even reach 1Gib. But the 
memory used

reported by the kernel increases gradually until it reaches OOM.

If ps shows size similar to what you see in birdc "show mem", then the 
leak

is definitely not in bird (though it may be related) - it is in kernel
or some other process.


It might not be in bird, but it is definitely triggered by it.

Thanks
--
Willy


Re: Bird 1.5 and 1.6 memory leak

2018-04-18 Thread Willy Goiffon

if it occurs also on 1.6.4, could you please add also "birdcl show
route count" output and some logs with debug all switched on?


I had to reinstall version 1.5.0, to remain in the ubuntu default PPA.
The route count is ridiculously low though:

$ birdc show route count
BIRD 1.5.0 ready.
11 of 11 routes for 11 networks


How does it get leaked, do you reconfigure many times? Does the memory
consumption increase gradually or by larger amounts?


It seems to leak at the kernel level, as the process memory doesn't 
increase.

I'm not doing any reconfiguration. It increases gradually and is closely
tied to the traffic crossing the router.
If I stop any traffic from passing (eg, using iptables), the memleak 
stops.


As I said, I also don't have this leak if I leave bird down and 
configure

the routes statically.


Bird 1.5 and 1.6 memory leak

2018-04-13 Thread Willy Goiffon

Hello,

I installed different version of bird on Ubuntu 16.04 (namely, 1.5.0, 
1.6.3, 1.6.4).

After leaving the daemon running for ~1 hour, the memory used by the
host is over 8Gib. However, when running `birdc show memory`, I get
the following:

BIRD memory usage
Routing tables: 21 kB
Route attributes:   11 kB
ROA tables:192  B
Protocols:  22 kB
Total: 102 kB

My config is pretty basic (edited, see attached) as we have 2 BGP
protocols using 2 ASN (one public, one private), each exporting the
routes learnt from the other.

The leak seems to be related to the traffic going through the server,
as the memory of the host remains still when there is no traffic
going on. It is triggered by bird though, because I don't have the
leak when the routes are configured statically and bird is shut down.

The weird thing about this is that the memory is not used by the bird
process itself. It's shown as used memory by the host, but no process
is actually using this memory.
I know that it's leaking because of bird though because it's the only
process installed and running on this host.

Has anyone ever encountered such a behavior, or can see an issue in
my configuration?

Thanks in advance for your help
--
Willyrouter id 1.2.3.4

define ASPUB = 12345;
define ASPRV = 42;

filter private_in
prefix set private_networks;
{
private_networks = [ 1.1.1.0/24+, 2.2.2.0/24+ ];

if (net ~ private_networks) then accept;
reject;
}

filter public_in
prefix set public_networks;
{
public_networks = [ 3.3.0.0/16+, 0.0.0.0/0 ];

if (net ~ public_networks) then accept;
reject;
}

filter private_out
prefix set private_networks;
{
private_networks = [ 0.0.0.0/0 ];

if (source = RTS_BGP && net ~ private_networks) then accept;
reject;
}

filter public_out
prefix set public_networks;
{
public_networks = [ 1.1.1.0/24+, 2.2.2.0/24+ ];

bgp_path.empty;
bgp_path.prepend(ASPUB);
if (source = RTS_BGP && net ~ public_networks) then accept;
reject;
}

protocol kernel {
scan time 5;
import none;
export all;
}

protocol device {
scan time 10;
}

protocol bgp public {
local as ASPUB;
neighbor 1.2.3.5 as 54321;
next hop self;

export filter public_out;
import filter public_in;
};

protocol bgp private {
local as ASPRV;
neighbor 10.11.12.13 as 420001;
next hop self;

export filter private_out;
import filter private_in;
};