Freebsd IP Forwarding performance (question, and some info) [7-stable, current, em, smp]

Andre Oppermann andre at freebsd.org
Mon Jul 7 11:13:22 UTC 2008


Robert Watson wrote:
> 
> On Mon, 7 Jul 2008, Andre Oppermann wrote:
> 
>> Distributing the interrupts and taskqueues among the available CPUs 
>> gives concurrent forwarding with bi- or multi-directional traffic. All 
>> incoming traffic from any particular interface is still serialized 
>> though.
> 
> ... although not on multiple input queue-enabled hardware and drivers.  
> While I've really only focused on local traffic performance with my 
> 10gbps Chelsio setup, it should be possible to do packet forwarding from 
> multiple input queues using that hardware and driver today.
> 
> I'll update the netisr2 patches, which allow work to be pushed to 
> multiple CPUs from a single input queue.  However, these necessarily 
> take a cache miss or two on packet header data in order to break out the 
> packets from the input queue into flows that can be processed 
> independently without ordering constraints, so if those cache misses on 
> header data are a big part of the performance of a configuration, load 
> balancing in this manner may not help. What would be neat is if the 
> cards without multiple input queues could still tag receive descriptors 
> with a flow identifier generated from the IP/TCP/etc layers that could 
> be used for work placement.

The cache miss is really the elephant in the room.  If the network card
supports multiple RX rings with separate interrupts and a stable hash
based (that includes IP+Port src+dst) distribution they can be bound to
different CPUs.  It is very important to maintain the packet order for
flows that go through the router.  Otherwise TCP and VoIP will suffer.

-- 
Andre


More information about the freebsd-net mailing list