Hi,

Can somebody shed some light on how crossbow hashes outgoing
packets to different transmit rings (not ring groups)?

My 10GbE driver has multiple rings (and a single group).  Each
transmit ring shares an interrupt with a corresponding receive
ring.  We call a set of 1 TX ring, 1 RX ring, and interrupt handler
state a "slice".  Transmit completions are handled from the interrupt
handler.   On OSes which support multiple transmit routes,
we've found that ensuring that a particular connection is always
hashed to the same slice by the host and the NIC helps quite a bit
with performance (improves CPU locality, reduces cache misses, decreases
power consumption).

Some OSes (like FreeBSD) allow a driver to assist in tagging a
connection so as to ensure that it is easy to hash
traffic for the same connection into the same slice in the host
and the NIC.  Others (Linux, S10) allow the driver to hash the
outgoing packets to provide this locality.

So.. Where is the transmit hashing done in crossbow?  Is it tunable?
Is there a hook where I can do provide a hash routine (like Linux)?
Can I tag packets (like FreeBSD)?  Is it at least something standard
like Toeplitz?

Drew

Reply via email to