[dpdk-dev] [PATCH v4 0/4] fix race condition in enqueue/dequeue because of cpu reorder
Jia He
hejianet at gmail.com
Wed Nov 8 10:54:37 CET 2017
We watched a rte panic of mbuf_autotest in our qualcomm arm64 server due
to a possible race condition.
To fix this race, there are 2 options as suggested by Jerin:
1. use rte_smp_rmb
2. use load_acquire/store_release(refer to [2]).
CONFIG_RTE_RING_USE_C11_MEM_MODEL is provided, and by default it is "y"
only on arm64 so far.
The reason why providing 2 options is due to the performance benchmark
difference in different arm machines.
Already fuctionally tested on the machines as follows:
- on X86
- on arm64 with CONFIG_RTE_RING_USE_C11_MEM_MODEL=y
- on arm64 with CONFIG_RTE_RING_USE_C11_MEM_MODEL=n
---
Changelog:
V4: split into small patches
V3: arch specific implementation for enqueue/dequeue barrier
V2: let users choose whether using load_acquire/store_release
V1: rte_smp_rmb() between 2 loads
Jia He (4):
eal/arm64: remove the braces {} for dmb() and dsb()
ring: guarantee load/load order in enqueue and dequeue
ring: introduce new header file to include common functions
ring: introduce new header file to support C11 memory model
config/common_armv8a_linuxapp | 2 +
.../common/include/arch/arm/rte_atomic_64.h | 4 +-
lib/librte_eventdev/rte_event_ring.h | 6 +-
lib/librte_ring/Makefile | 4 +-
lib/librte_ring/rte_ring.h | 161 ++---------------
lib/librte_ring/rte_ring_c11_mem.h | 185 ++++++++++++++++++++
lib/librte_ring/rte_ring_generic.h | 194 +++++++++++++++++++++
7 files changed, 404 insertions(+), 152 deletions(-)
create mode 100644 lib/librte_ring/rte_ring_c11_mem.h
create mode 100644 lib/librte_ring/rte_ring_generic.h
--
2.7.4
More information about the dev
mailing list