How do I balance bandwidth over several virtual NICs?

Jim Thompson jim at netgate.com
Mon Sep 22 22:41:51 UTC 2014


> 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



> * configure up say, 4 or 8 rings in /boot/loader.conf:
> 
> hw.ix.num_queues=8
> (I think it's hw.ix, it used to be hw.ixgbe..)
> 
> * then, when you use netmap on ixgbe, you just bind to each TX and RX
> ring with a separate process or thread. That thread will get packets
> in both directions for a given flow.
> 
>> If we assume that someone in the future write and submit the above into the
>> ixgbe driver, could I be so bold as to ask you for a
>> commandline/configuration example (a brief guide) of how one would setup
>> netmap and how to configure it to use the RX-queues?
> 
> I don't know of any examples of using netmap in this way from the
> command line. I've normally written C code (And when I do, i start
> with the bridge example in src/tools/tools/netmap/bridge.c) .
> 
>> That way I can start playing around with netmap and learning it while I wait
>> for the ixgbe driver to be updated... I've got two professional programmer
>> colleagues who've dealt extensively with e.g. the libnids and pfring source
>> code, so if I get a grasp of how to setup netmap, and I find it interesting,
>> it is likely that they can dive into and fix the ixgbe driver and improve it
>> as per above. So please, can you help me with a "netmap guide"?
>> 
>> When I try to find documentation or examples of how to setup netmap I find
>> none. Not even the netmap-enabled pcaplib contain any information as how to
>> use it. I'm no programmer, so showing me different C structs for delivering
>> data is of no use. :-/
> 
> You mean:
> 
> https://code.google.com/p/netmap-libpcap/
> 
> ?
> 
> I've not used it before, sorry :(
> 
> 
> 
> -a
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"



More information about the freebsd-net mailing list