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
