Can you pl. share some (if possible) minimal sample app hitting race
condition. That will be helpful.

Thanks.

On 22 August 2014 17:19, Prashant Upadhyaya
<[email protected]> wrote:
> Hi Maxim,
>
> I don't pass any flags at the moment i.e. flags=0 at the time of 
> odp_ring_create.
>
> I did check the include/helper/odp_ring.h and it mentions --
> *   An OR of the following:
>  *    - RING_F_SP_ENQ: If this flag is set, the default behavior when
>  *      using ``odp_ring_enqueue()`` or ``odp_ring_enqueue_bulk()``
>  *      is "single-producer". Otherwise, it is "multi-producers".
>  *    - RING_F_SC_DEQ: If this flag is set, the default behavior when
>  *      using ``odp_ring_dequeue()`` or ``odp_ring_dequeue_bulk()``
>  *      is "single-consumer". Otherwise, it is "multi-consumers".
>
> So I suppose I am using multi-producers and multi-consumers, isn't it.
> At any rate, I am using the functions explicitly which are internally called 
> by the normal enq/deq functions
> odp_ring_mp_enqueue_bulk [I am indeed a multi producer]
> odp_ring_sc_dequeue_bulk  [I am indeed a single consumer]
>
> Regards
> -Prashant
>
>
>
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Maxim Uvarov
> Sent: Friday, August 22, 2014 2:38 PM
> To: [email protected]
> Subject: Re: [lng-odp] Regarding ODP rings in linux-generic
>
> Hi Prashant,
>
> do you pass flags to odp_ring_create that it's multi consumer, multi producer?
>
> Maxim.
>
> On 08/22/2014 12:12 PM, Prashant Upadhyaya wrote:
>>
>> Hi,
>>
>> I have a usecase where each core has a ring associated with it.
>>
>> Every core dequeues from its own ring - thus each core's ring above is
>> representing the single consumer mode.
>>
>> Every core can enqueue to every other core's ring - thus each core's
>> ring above is representing the multi-producer mode.
>>
>> To enqueue, I use odp_ring_mp_enqueue_bulk
>>
>> To dequeue, I use odp_ring_sc_dequeue_bulk
>>
>> I try to enqueue in a loop till the enqueue succeeds, the idea being
>> that the other cores will dequeue eventually to create space on the
>> ring. I use fixed size rings.
>>
>> Now when I run my usecase, which has a lot of pipelining between
>> cores, I see that sometimes the code, which is enqueueing on a ring,
>> blocks in the loop i.e. its enqueue never succeeds.
>>
>> If I use my own locks to protect the enqueue and dequeue on a given
>> core's ring, then my usecase works fine.
>>
>> Now then, I have not yet been able to get to the bottom of this and
>> can't exactly put a finger on where the bug lies in the ring
>> framework, but the fact that my own external locking vanishes the
>> problem, I am inclined to believe that there seems to be some race
>> condition in rings implementation when there are multi producers and a
>> single consumer.
>>
>> I am not getting enough time to run some standalone stress tests to
>> reproduce the above issue in a controlled environment for further
>> debugging.
>>
>> If anybody on the list volunteers to test the above or has encountered
>> a similar problem, we probably have a chance to debug and fix this issue.
>>
>> Regards
>>
>> -Prashant
>>
>>
>>
>> "DISCLAIMER: This message is proprietary to Aricent and is intended
>> solely for the use of the individual to whom it is addressed. It may
>> contain privileged or confidential information and should not be
>> circulated or used for any purpose other than for what it is intended.
>> If you have received this message in error, please notify the
>> originator immediately. If you are not the intended recipient, you are
>> notified that you are strictly prohibited from using, copying,
>> altering, or disclosing the contents of this message. Aricent accepts
>> no responsibility for loss or damage arising from the use of the
>> information transmitted by this email including damage from virus."
>>
>>
>> _______________________________________________
>> lng-odp mailing list
>> [email protected]
>> http://lists.linaro.org/mailman/listinfo/lng-odp
>
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp
>
>
> "DISCLAIMER: This message is proprietary to Aricent and is intended solely 
> for the use of the individual to whom it is addressed. It may contain 
> privileged or confidential information and should not be circulated or used 
> for any purpose other than for what it is intended. If you have received this 
> message in error, please notify the originator immediately. If you are not 
> the intended recipient, you are notified that you are strictly prohibited 
> from using, copying, altering, or disclosing the contents of this message. 
> Aricent accepts no responsibility for loss or damage arising from the use of 
> the information transmitted by this email including damage from virus."
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp

_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to