Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jan 2010 14:52:34 -0800
From:      Julian Elischer <julian@elischer.org>
To:        Luigi Rizzo <rizzo@iet.unipi.it>
Cc:        freebsd-net@freebsd.org, ??????? <ekamyshev@omsk.multinex.ru>
Subject:   Re: Netgraph performance with ng_ipfw
Message-ID:  <4B5A2C32.7050802@elischer.org>
In-Reply-To: <20100122224156.GB27338@onelab2.iet.unipi.it>
References:  <C6F35B81AA3747D1B11CAC169F2D8D84@evgen> <20100122224156.GB27338@onelab2.iet.unipi.it>

next in thread | previous in thread | raw e-mail | index | archive | help
Luigi Rizzo wrote:
> On Sat, Jan 23, 2010 at 03:32:11AM +0600, ??????? wrote:
>> Hi, 
>> I have several routers under heavy load, running FreeBSD 7.2
>> These routers use Netgraph to impelement traffic shaping and accouting
>> (using ng_car and ng_netflow nodes). 
>> Packets are passed from firewall to netgraph using the following rules
>> accounting:
>> netgraph 100 ip from any to any in
>> shaping:
>> netgraph tablearg ip from any to table(118) out
>> netgraph tablearg ip from table(118) to any in
>>
>> Table 118 contains users' ip addresses with tablearg referencing configured individual ng_car node.
>> At peak, there are 1500-2000 entries in table and configured nodes.
>> The problem is that at peak load the router loses packets. After studying the sources & doing some debugging, 
>> it became clear that packets are being droped at netgraph queue, at ng_alloc_item function:
> ...
>> When the large number of hooks is present, as in the configuration given in the beginning of this message, 
>> this would cause an obvious decrease in performance - for each packet passed from ipfw to netgraph, 
>> 1 to 1500-2000 iterations are needed to find matching hook. And again, it seem to be a trivial task to rewrite 
>> this code to find hook by hash or even by array.

Each node type has the ability to supply a "hook lookup method"

     if (node->nd_type->findhook != NULL)
                 return (*node->nd_type->findhook)(node, name);

I added this so that if a hook had thousands of hooks it could supply
a smart method to look them up in a way that is relevant to that node
type.

I have never used the netgraph ipfw node so I don't know how it works 
or if this is at all relevant.



> 
> i solved exactly this problem in my recent ipfw rewrite (in HEAD), but it
> is not terribly trivial, though, because you should consider memory
> costs (the cookie space is large) and the need to handle reconfigurations
> without blocking the forwarding for a long time.
> 
> You can use the same techniques (and possibly code) i used in ipfw,
> but i suspect it will take a good 1-2 weeks of work to have a production
> quality thing (I am not familiar with netgraph code and configuration
> tools so i may underestimate the work).
> 
> cheers
> luigi
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4B5A2C32.7050802>