[dpdk-dev] [PATCH v2] ring: check for zero objects mc dequeue / mp enqueue
Olivier Matz
olivier.matz at 6wind.com
Fri Mar 25 12:15:23 CET 2016
Hi Lazaros,
On 03/17/2016 04:49 PM, Lazaros Koromilas wrote:
> Issuing a zero objects dequeue with a single consumer has no effect.
> Doing so with multiple consumers, can get more than one thread to succeed
> the compare-and-set operation and observe starvation or even deadlock in
> the while loop that checks for preceding dequeues. The problematic piece
> of code when n = 0:
>
> cons_next = cons_head + n;
> success = rte_atomic32_cmpset(&r->cons.head, cons_head, cons_next);
>
> The same is possible on the enqueue path.
Just a question about this patch (that has been applied). Thomas
retitled the commit from your log message:
ring: fix deadlock in zero object multi enqueue or dequeue
http://dpdk.org/browse/dpdk/commit/?id=d0979646166e
I think this patch does not fix a deadlock, or did I miss something?
As explained in the following links, the ring may not perform well
if several threads running on the same cpu use it:
http://dpdk.org/ml/archives/dev/2013-November/000714.html
http://www.dpdk.org/ml/archives/dev/2014-January/001070.html
http://www.dpdk.org/ml/archives/dev/2014-January/001162.html
http://dpdk.org/ml/archives/dev/2015-July/020659.html
A deadlock could occur if the threads running on the same core
have different priority.
Regards,
Olivier
More information about the dev
mailing list