Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Aug 2006 08:44:23 -0500 (CDT)
From:      Sergey Babkin <babkin@verizon.net>
To:        Gleb Smirnoff <glebius@FreeBSD.org>, Martin Eugen <martin.eugen@gmail.com>
Cc:        freebsd-hackers@FreeBSD.org
Subject:   Re: Re: SOCK_DGRAM optimization needed...
Message-ID:  <18678818.48281156945464270.JavaMail.root@vms074.mailsrvcs.net>

next in thread | raw e-mail | index | archive | help
>From: Gleb Smirnoff <glebius@FreeBSD.org>

>On Fri, Aug 18, 2006 at 10:41:36AM +0300, Martin Eugen wrote:
>M> I have a simple application, that deals with lots of dgram sockets (UDP).
>M> Thousands of them. Basically, its purpose is to
>M> maintain pairs of sockets and when data is received on one of the sockets it
>M> peeks through it (doing some simple
>M> statistic calculations) and then forwards it to the other socket.
>M> Because of the hudge number of reads and writes (probably about a 10 packets
>M> per second per socket pair) it generates a significant load
>M> on the system, that I would like to minimize. I'm currently evaluating if it
>M> would be possible to add simple 'routing' functionality in the socket layer
>M> in the kernel, because frankly I'm not able to think of anything else.
>
>As Robert said you can try to put this into kernel. That is, you can
>write down a netgraph node, that does the routing. Then connect thousands
>of ng_ksocket(4) to it.
>
>If netgraph(4) survives such a big graph (I hope so), you will get quite
>fast forwarding. You should also implement a fast ng_findhook method

I think it doesn't have to be a big graph. Just make your
module sit under IP and look inside all the packets coming up.
If the packet matches one it's looking for, update
the stats, change the port number and send it up
to the IP node. Otherwise just send it to the IP node.
With this approach you won't even really need the
changing of port numbers if all you do is the stats,
just make the "real" app listen on the same ports
as where the packets are sent to.

BTW, some many years ago I wrote a STREAMS generic IP traffic
accounting module that worked like this.

-SB



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?18678818.48281156945464270.JavaMail.root>