On Thu, 17 Apr 2008, Alexander Sack wrote:

Gotcha, this is really good to know. FreeBSD is a new OS for me to work on but I'm learning so much everyday! I believe Solaris uses ithreads natively and I do know there are some drivers that forcefully create kernel threads to handle interrupts as way to scale (I have no idea the ramification of this on FreeBSD or if the overhead of creating a new kthread outweighs the benefits).

This is also true on FreeBSD -- on the whole, drivers up to 1gbps create one ithread per device (typically interface), but our 10gbps drivers [increasingly] instantiate multiple ithreads and direct traffic to multiple CPUs using different MSIX interrupts. So for 1gbps forwarding or bridging with if_em, we'll run the code in two ithreads. We direct dispatch our network stack by default in 7.x, meaning that we run everything up to local socket delivery in the ithread. If you're doing multi-interface forwarding, you might experiment with setting net.isr.direct=0 (via sysctl) to see how that affects performance -- this pushes network layer (and higher) processing to a separate netisr thread.

Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to