Re: [dpdk-dev] release/acquire memory barriers and ring

2018-02-17 Thread Burakov, Anatoly

On 13-Feb-18 7:37 PM, Alex Kiselev wrote:

Hi.

I've been wondering should I use a release/acquire memory barrier pair
in order to be sure that the other thread will see the fully/corrected
initialized object
passed to it via a dpdk ring or ring itself is a kind of barrier?

Let's say I have a pseudo code:

Thread1:
obj = alloc();
...
obj initialization
...

??? fence(memory_order_release); ???
rte_ring_sp_enqueue(ring, obj)


Thread2:
??? fence(memory_order_acquire); ???
rte_ring_sc_dequeue(ring, obj)

Should I use fences in that code?

Thanks.

--
Alex



Rings do that automatically, no additional fences needed.

--
Thanks,
Anatoly


Re: [dpdk-dev] release/acquire memory barriers and ring

2018-02-16 Thread Stephen Hemminger
On Tue, 13 Feb 2018 22:37:37 +0300
Alex Kiselev  wrote:

> Hi.
> 
> I've been wondering should I use a release/acquire memory barrier pair
> in order to be sure that the other thread will see the fully/corrected
> initialized object
> passed to it via a dpdk ring or ring itself is a kind of barrier?
> 
> Let's say I have a pseudo code:
> 
> Thread1:
> obj = alloc();
> ...
> obj initialization
> ...
> 
> ??? fence(memory_order_release); ???
> rte_ring_sp_enqueue(ring, obj)
> 
> 
> Thread2:
> ??? fence(memory_order_acquire); ???
> rte_ring_sc_dequeue(ring, obj)
> 
> Should I use fences in that code?
> 
> Thanks.
> 
> --
> Alex

Not necessary. Enqueue/dequeue has necessary ordering; it is built
on compare-exchange which has implied barrier.


Re: [dpdk-dev] release/acquire memory barriers and ring

2018-02-13 Thread Alex Kiselev
I am sorry. I should've posted to the user list of couse.
My mistake.

2018-02-13 22:37 GMT+03:00 Alex Kiselev :
> Hi.
>
> I've been wondering should I use a release/acquire memory barrier pair
> in order to be sure that the other thread will see the fully/corrected
> initialized object
> passed to it via a dpdk ring or ring itself is a kind of barrier?
>
> Let's say I have a pseudo code:
>
> Thread1:
> obj = alloc();
> ...
> obj initialization
> ...
>
> ??? fence(memory_order_release); ???
> rte_ring_sp_enqueue(ring, obj)
>
>
> Thread2:
> ??? fence(memory_order_acquire); ???
> rte_ring_sc_dequeue(ring, obj)
>
> Should I use fences in that code?
>
> Thanks.
>
> --
> Alex


[dpdk-dev] release/acquire memory barriers and ring

2018-02-13 Thread Alex Kiselev
Hi.

I've been wondering should I use a release/acquire memory barrier pair
in order to be sure that the other thread will see the fully/corrected
initialized object
passed to it via a dpdk ring or ring itself is a kind of barrier?

Let's say I have a pseudo code:

Thread1:
obj = alloc();
...
obj initialization
...

??? fence(memory_order_release); ???
rte_ring_sp_enqueue(ring, obj)


Thread2:
??? fence(memory_order_acquire); ???
rte_ring_sc_dequeue(ring, obj)

Should I use fences in that code?

Thanks.

--
Alex