[dpdk-dev] generic load balancing

Benson, Bryan bmbenson at amazon.com
Thu Dec 5 08:44:29 CET 2013


Prashant,
I assume your use case is not of one IP/UDP/TCP - or if it is, you are dealing with a single tuple that is not evenly distributed.

You have a few options with the NIC that I can think of.

1) Use a single core to RX each port's frames and use your own software solution to RR to worker rings.  There is an example of this in the Load Balancer sample application.

2) If your packets/frames have an evenly distributed field in the first 64 bytes of the frame, you can use the 2 byte match feature of flow director to send to different queues (with multiple match signatures).  This will give even distribution, but not round robin behavior.

3) Modify the RSS redirection table for the NIC in the order you desire.  I am unsure how often this can happen, or if there are performance issues with reprogramming it.  Definitely would need some experimentation.

What is it you are trying to achieve with Round Robin?  A distribution of packets to multiple cores for processing, or something else?

Without knowing the use case, my main suggestion is to use the LB sample application - that way you can distribute in any way you please.

Thanks,
Bryan Benson


-------- Original message --------
From: Prashant Upadhyaya
Date:12/04/2013 9:30 PM (GMT-08:00)
To: Stephen Hemminger
Cc: dev at dpdk.org
Subject: Re: [dpdk-dev] generic load balancing

Hi Stepher,

The awfulness depends upon the 'usecase'
I have eg. a usecase where I want this roundrobin behaviour.

I just want the NIC to give me a facility to use this.

Regards
-Prashant


-----Original Message-----
From: Stephen Hemminger [mailto:stephen at networkplumber.org]
Sent: Thursday, December 05, 2013 10:25 AM
To: Prashant Upadhyaya
Cc: François-Frédéric Ozog; Michael Quicquaro; dev at dpdk.org
Subject: Re: [dpdk-dev] generic load balancing

Round robin would actually be awful for any protocol because it would cause out of order packets.
That is why flow based algorithms like flow director and RSS work much better.

On Wed, Dec 4, 2013 at 8:31 PM, Prashant Upadhyaya <prashant.upadhyaya at aricent.com> wrote:
> Hi,
>
> It's a real pity that Intel 82599 NIC (and possibly others) don't have a simple round robin scheduling of packets on the configured queues.
>
> I have requested Intel earlier, and using this forum requesting again -- please please put this facility in the NIC that if I drop N queues there and configure  the NIC for some round robin scheduling on queues, then NIC should simply put the received packets one by one on queue 1, then on queue2,....,then on queueN, and then back on queue 1.
> The above is very useful in lot of load balancing cases.
>
> Regards
> -Prashant
>
>
> -----Original Message-----
> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of François-Frédéric
> Ozog
> Sent: Thursday, December 05, 2013 2:35 AM
> To: 'Michael Quicquaro'
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] generic load balancing
>
> Hi,
>
> As far as I can tell, this is really hardware dependent. Some hash functions allow uplink and downlink packets of the same "session" to go to the same queue (I know Chelsio can do this).
>
> For the Intel card, you may find what you want in:
> http://www.intel.com/content/www/us/en/ethernet-controllers/82599-10-g
> be-con
> troller-datasheet.html
>
> Other cards require NDA or other agreements to get details of RSS.
>
> If you have a performance problem, may I suggest you use kernel 3.10 then monitor system activity with "perf" command. For instance you can start with "perf top -a" this will give you nice information. Then your creativity will do the rest ;-) You may be surprised what comes on the top hot points...
> (the most unexpected hot function I found here was Linux syscall
> gettimeofday!!!)
>
> François-Frédéric
>
>> -----Message d'origine-----
>> De : dev [mailto:dev-bounces at dpdk.org] De la part de Michael
>> Quicquaro Envoyé : mercredi 4 décembre 2013 18:53 À : dev at dpdk.org Objet :
>> [dpdk-dev] generic load balancing
>>
>> Hi all,
>> I am writing a dpdk application that will receive packets from one
>> interface and process them.  It does not forward packets in the
> traditional
>> sense.  However, I do need to process them at full line rate and
>> therefore need more than one core.  The packets can be somewhat
>> generic in nature
> and
>> can be nearly identical (especially at the beginning of the packet).
>> I've used the rxonly function of testpmd as a model.
>>
>> I've run into problems in processing a full line rate of data since
>> the nature of the data causes all the data to be presented to only one core.
> I
>> get a large percentage of dropped packets (shows up as Rx-Errors in
>> "port
>> stats") because of this.  I've tried modifying the data so that
>> packets have different UDP ports and that seems to work when I use
>> --rss-udp
>>
>> My questions are:
>> 1) Is there a way to configure RSS so that it alternates packets to
>> all configured cores regardless of the packet data?
>>
>> 2)  Where is the best place to learn more about RSS and how to
>> configure it? I have not found much in the DPDK documentation.
>>
>> Thanks for the help,
>> - Mike
>
>
>
>
>
> ======================================================================
> ========= Please refer to
> http://www.aricent.com/legal/email_disclaimer.html
> for important disclosures regarding this electronic communication.
> ======================================================================
> =========




===============================================================================
Please refer to http://www.aricent.com/legal/email_disclaimer.html
for important disclosures regarding this electronic communication.
===============================================================================


More information about the dev mailing list