How do I balance bandwidth over several virtual NICs?

Adrian Chadd adrian at freebsd.org
Tue Sep 23 00:28:04 UTC 2014


On 22 September 2014 15:35, Jim Thompson <jim at netgate.com> wrote:
>
>> On Sep 22, 2014, at 5:15 PM, Adrian Chadd <adrian at freebsd.org> wrote:
>>
>> On 22 September 2014 13:39, Elof Ofel <elofu17 at hotmail.com> wrote:
>>> Hi Adrian!
>>>
>>> Now this sounds promising! All my sensors use the ixgbe driver.
>>> However, my skills in programming/compiling isn't vast. I know how to patch
>>> and use poudriere. That's about it.
>>>
>>> I must admit I don't really understand what you mean with "patch it to use a
>>> symmetric RSS key", but it sounds like the functionality I'm looking for is
>>> not yet there in the driver.
>>
>> A few years ago a couple of researchers figured out you could abuse
>> the toeplitz hash to do symmetric RSS hashing:
>>
>> http://www.ndsl.kaist.edu/~shinae/papers/TR-symRSS.pdf
>>
>> This means that the same RSS hash value is chosen no matter which
>> direction the traffic is going on.
>> This is what you need to ensure that the packets going both directions
>> in a connection end up in the same NIC hardware receive ring.
>>
>> So, all you have to do (!) is:
>>
>> * grab freebsd-head, because the ixgbe driver there has some recent
>> bug fixes that you need for this to completely work;
>> * look at ixgbe_initialise_rss_mapping() - that's where the RSS key,
>> mapping and RSS hash types are configured;
>> * patch it to use the example symmetric RSS key that was provided in the paper;
>
> possible that XOR-ing the values to be hashed will produce a similar result.  Of course, this is software, not hardware generation of Toeplitz.
>
>> * patch it to only hash on IPv4 / IPv6 2-tuple, that way you don't end
>> up with IPv4/IPv6 fragments in the wrong queue;
>
> I hope these two aren’t embedded in the code.  The coming Intel devices both support the symmetric RSS key and
> will correctly hash on ipv4/ipv4 4 tuple.

> See section 7.1.10.1 and 7.1.10.3 in
> http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xl710-10-40-controller-datasheet.pdf

I think it'll still do the same thing - it'll not be able to 4-tuple
IPv4 frames that are fragmented, as the non-first frame doesn't have
the TCP/UDP information.

(The support for symmetric RSS by XORing the source/destination bits
is very nice - we'll have to teach freebsd's RSS code about that at
some point.)



-a


More information about the freebsd-net mailing list