[dpdk-dev] [PATCH] mbuf: fix atomic refcnt update synchronization
Linzhe Lee
slayercat.subscription at gmail.com
Fri Sep 2 18:31:50 CEST 2016
Thanks for reply, Stephen.
I'm in x86-64, my cpu is `Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz`.
When allocation mbuf in program1, and transfer it to program2 for free
via ring, the program1 might meet assert in allocate mbuf sometimes.
(`RTE_ASSERT(rte_mbuf_refcnt_read(m) == 0);`)
but when I using gdb to check it, the refcnt field of mbuf is already
zero. so I believe the problem came from the cache line problem or
incorrect optimization.
When apply this patch, the problem seems solved. I'm submitting it for
your comments.
2016-09-03 0:12 GMT+08:00 Stephen Hemminger <stephen at networkplumber.org>:
> On Fri, 2 Sep 2016 13:25:06 +0800
> lilinzhe <slayercat.subscription at gmail.com> wrote:
>
>> From: 李林哲 <lilinzhe at ijinshan.com>
>>
>> chagne atomic ref update to always call atomic_add
>>
>> when mbuf is allocated by cpu1 and freed by cpu2. cpu1 cache may not be updated by such a set operation.
>> causes refcnt reads incorrect values.
>
> What architecture are you dealing with? On X86 memory is cache coherent.
>
> Doing atomic operation all the time on each mbuf free would significantly
> slow down performance.
>
More information about the dev
mailing list