Regards,
Bala

On 4 January 2018 at 21:52, Oriol Arcas <or...@starflownetworks.com> wrote:

> Hi Bala,
>
> I didn't find any hashing parameter in the CoS API, is it implemented or a
> suggestion?
>

It has been added as part of TigerMoth. Pls check the following parameters
in CoS.

typedef struct odp_cls_cos_param {


        /** Number of queues to be linked to this CoS.


         * If the number is greater than 1 then hashing is enabled.


         * If number is equal to 1 then hashing is disabled.


         * When hashing is enabled the queues are created by the
implementation

         * and application need not configure any queue to the class of
service.

         * When hashing is disabled application has to configure the queue
to

         * the class of service.


         * Depening on the implementation this number might be rounded-off
to

         * nearest supported value (e.g power of 2)


         */


        uint32_t num_queue;





        /** Variant mapping for queue hash configurataion */


        union {


                /** Mapping used when num_queue = 1, hashing is disabled in


                 * this case and application has to configure this queue
and

                 * packets are delivered to this queue */


                odp_queue_t queue;





                /** Mapping used when num_queue > 1, hashing is enabled in


                 * this case and queues are created by the implementation
*/

                struct {


                        /** Queue parameters */


                        odp_queue_param_t queue_param;





                        /** Protocol header fields which are included in


                         * packet input hash calculation */


                        odp_pktin_hash_proto_t hash_proto;


                };


        };

>
> --
> Oriol Arcas
> Software Engineer
> Starflow Networks
>
> On Thu, Jan 4, 2018 at 5:11 PM, Bala Manoharan <bala.manoha...@linaro.org>
> wrote:
>
>> Hi,
>>
>> In addition configuring the hashing on the pktio interface as Petri
>> suggested, you can also configure hashing on CoS.
>> By configuring hashing on CoS, you can effectively configure hashing for
>> a particular flow.
>>
>> Regards,
>> Bala
>>
>> On 4 January 2018 at 20:51, Oriol Arcas <or...@starflownetworks.com>
>> wrote:
>>
>>> Bill, Petri, Bogdan,
>>>
>>> Thank you for your fast feedback. It's been incredibly instructive. We
>>> were
>>> looking for something like the input hash that Petri points out, even at
>>> the price of not having classification (which we could implement
>>> manually).
>>>
>>> I'll dive into the details of queue scheduling and sticking to a CPU.
>>>
>>> Thank you all.
>>>
>>> --
>>> Oriol Arcas
>>> Software Engineer
>>> Starflow Networks
>>>
>>> On Thu, Jan 4, 2018 at 11:01 AM, Bogdan Pricope <
>>> bogdan.pric...@linaro.org>
>>> wrote:
>>>
>>> > I guess, the issue is not how to hash traffic in different scheduled
>>> > queues but how to lock a scheduled queue to a single thread (core):
>>> > sched.sync guarantees that at one moment one queue is scheduled to a
>>> > single thread but not on the same thread all the times - this may be
>>> > enough for some implementations (to avoid some locks) but not enough
>>> > for others.
>>> >
>>> > One problem is that all pktio sched queues are assigned to a single
>>> > sched group that is assigned to a single group of threads/cores. If I
>>> > understand correctly, Bill suggests classification + sched queues,
>>> > where each queue is assigned to a different sched group that is
>>> > assigned to a single thread/core.
>>> >
>>> > Other idea is to use direct mode (+ RSS), where each worker is polling
>>> > from the its own pktin all the time (odp_pktin_recv()).
>>> >
>>> > On 4 January 2018 at 10:24, Savolainen, Petri (Nokia - FI/Espoo)
>>> > <petri.savolai...@nokia.com> wrote:
>>> > >
>>> > >
>>> > >> -----Original Message-----
>>> > >> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf
>>> Of
>>> > Oriol
>>> > >> Arcas
>>> > >> Sent: Wednesday, January 03, 2018 7:12 PM
>>> > >> To: LNG ODP Mailman List <lng-odp@lists.linaro.org>
>>> > >> Subject: [lng-odp] RSS in ODP
>>> > >>
>>> > >> Hello and happy new year,
>>> > >>
>>> > >> In our company we are looking into scaling the odp_schedule() calls.
>>> > >> Currently we are manually doing Receive Side Scaling, which
>>> requires one
>>> > >> CPU to receive all the packets and pass them to other worker CPU in
>>> a
>>> > >> flow-deterministic way (i.e., not spreading the packets from a TCP
>>> flow
>>> > to
>>> > >> different CPUs). Obviously this is a bottleneck.
>>> > >>
>>> > >> It would be great if ODP had optional RSS policies, which ultimately
>>> > would
>>> > >> assign packets from the same flow to a single thread in the schedule
>>> > group
>>> > >> (usually hashing the address tuple). Would this probably mean having
>>> > >> dedicated queues?
>>> > >>
>>> > >> I don't know if there is something similar in ODP already which I
>>> have
>>> > >> missed. I'll thank any feedback!
>>> > >>
>>> > >> Best regards,
>>> > >>
>>> > >> --
>>> > >> Oriol Arcas
>>> > >> Software Engineer
>>> > >> Starflow Networks
>>> > >
>>> > >
>>> > > Our l2fwd test application (odp_l2fwd.c) configures packet input
>>> > hashing, which is in practice RSS, but could be also some other
>>> > implementation defined packet input hash function. You can take a look
>>> from
>>> > there. The same hash configuration is possible for both direct pktin
>>> queues
>>> > and scheduled event queues. For scheduled queues you would enable it
>>> > something like this:
>>> > >
>>> > > /* Normal interface open and config steps */
>>> > > pktio = odp_pktio_open(dev, pool, &pktio_param);
>>> > > odp_pktio_config(pktio, &config);
>>> > >
>>> > > /*
>>> > >  * Setup packet input hashing into scheduled event queues
>>> > >  */
>>> > > if (num_rx_queues > capa.max_input_queues)
>>> > >         num_rx_queues = capa.max_input_queues;
>>> > >
>>> > > odp_pktin_queue_param_init(&pktin_param);
>>> > >
>>> > > pktin_param.queue_param.sched.prio  = ODP_SCHED_PRIO_DEFAULT;
>>> > > pktin_param.queue_param.sched.sync  = ODP_SCHED_SYNC_ATOMIC;
>>> > > pktin_param.queue_param.sched.group = ODP_SCHED_GROUP_ALL;
>>> > > pktin_param.hash_enable = 1;
>>> > > pktin_param.hash_proto.proto.ipv4_udp = 1;
>>> > > pktin_param.num_queues  = num_rx_queues;
>>> > >
>>> > > if (odp_pktin_queue_config(pktio, &pktin_param))
>>> > >         return -1;
>>> > >
>>> > > /* Optionally, see which event queues has been created by the
>>> previous
>>> > call.
>>> > >  * May e.g. want to set queue contexts here.
>>> > >  */
>>> > > if (odp_pktin_event_queue(pktio, rx_queues, num_rx_queues) !=
>>> > num_rx_queues)
>>> > >         return -1;
>>> > >
>>> > > /* Starts packet input */
>>> > > odp_pktio_start(pktio);
>>> > >
>>> > > /* Use scheduler to receive packets ...*/
>>> > >
>>> > >
>>> >
>>>
>>
>>
>

Reply via email to