Ryan post on new polling modification remembered me to post a quick note about 
polling with multiqueue support i've done some month ago.

The code is more intrusive and add a new handler for the queue. 
The handling of the network is nearly the same as deferred taskqueue in the 
drivers.
There is now two pass one for the receive and one for transmit (to flush 
pending transmit when all receive pass done).

The main gain is for packet forwarding with more than one interface.
The CPU can be easily reserved for application by binding a specific number of 
core to the network.
Performance is on par with interrupt on 10Gb or 1Gb interface and latency can 
be reduced by using higher HZ.
Most of the time using less core achieve higher global efficiency of the system 
by freeing CPU cycle and reducing contention.

Ex setup:

6 cores CPU, 2 ixgbe with 3 queue, 4 igb with 3 queue

with 3 cores for polling:
CPU0 will handle ixgbe0 queue 0, ixgbe1 queue 0, igb0 queue0, ...
CPU1 will handle ixgbe0 queue 1, ...
...

For those interested a test branch can be found here based on 8.x with ixgbe / 
igb and em modification:
http://www.gitorious.org/~fabient/freebsd/fabient-sandbox/commits/work/pollng_mq_stable_8
Extracted patchset here:
http://people.freebsd.org/~fabient/patch-poll_mq-20110202-stable_8
http://people.freebsd.org/~fabient/kern_poll.c-20110202 -> put to 
kern/kern_poll.c

--
Fabien Thomas




_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to