Problems with netgraph
Bruce M. Simpson
bms at incunabulum.net
Thu May 8 02:52:17 UTC 2008
Oleksandr Samoylyk wrote:
>>
>> looks like UDP in PPP in GRE
>
> I think so. Should we hope for some progress in this direction in future?
Probably not, unless someone is willing to come up to the table and
commit to writing and maintaining a Netgraph node to demux GRE, although
this is only shuffling the fanout elsewhere.
If MPD is relying on raw sockets to demultiplex GRE, then this is what
it's up against in terms of performance -- repeated acquisitions of the
INP sleep lock, and context switches when the socket buffer low water
mark is passed. It might have improved slightly in HEAD since the move
to rwlocks.
Like udp_input(), rip_input() suffers from the fact that the stack has
to deal with delivering datagrams to potentially more than one socket,
and there is no intermediate data structure to handle the fan-out -- it
walks the entire inp list every time. If you look at the comments in
udp_input() it's pretty clear this is a historical weakness in the BSD
implementation.
Windows, by the way, forces socket clients to explicitly request
reception of broadcast datagrams as of Windows Server 2003, and
multicasts are strictly delivered to group members only, which
eliminates that problematic loop -- you can always maintain a tree of
receivers that way.
I'm happy to review patches if someone else commits to fixing it.
cheers
BMS
More information about the freebsd-net
mailing list