>From: Gleb Smirnoff <[EMAIL PROTECTED]>

>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
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to