[dpdk-dev] [PATCH 2/3] ring: guarantee load ordering of cons/prod when doing enqueue/dequeue
Jerin Jacob
jerin.jacob at caviumnetworks.com
Wed Nov 8 08:27:32 CET 2017
-----Original Message-----
> Date: Wed, 8 Nov 2017 06:17:11 +0000
> From: Jia He <hejianet at gmail.com>
> To: jerin.jacob at caviumnetworks.com, dev at dpdk.org, olivier.matz at 6wind.com
> Cc: konstantin.ananyev at intel.com, bruce.richardson at intel.com,
> jianbo.liu at arm.com, hemant.agrawal at nxp.com, Jia He <hejianet at gmail.com>,
> jie2.liu at hxt-semitech.com, bing.zhao at hxt-semitech.com,
> jia.he at hxt-semitech.com
> Subject: [PATCH 2/3] ring: guarantee load ordering of cons/prod when doing
> enqueue/dequeue
> X-Mailer: git-send-email 2.7.4
>
It is the V3 patch and subject line does not reflect that.
If you send a new version of a patch or series, you must use
--in-reply-to with message id of previous version.
> We watched a rte panic of mbuf_autotest in our qualcomm arm64 server.
> As for the possible race condition, please refer to [1].
Instead of the indirection of [1], add the technical details here to
make git comment useful.
>
> Furthermore, 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.
>
> The reason why providing 2 options is due to the performance benchmark
> difference in different arm machines, please refer to [3].
>
> 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
>
> We haven't tested the ppc64 case. If anyone verifies it, he can add
> CONFIG_RTE_RING_USE_C11_MEM_MODEL=y to ppc64 config files.
The testing part can be moved under "---". ie in the comment section
below.
>
> [1] http://dpdk.org/ml/archives/dev/2017-October/078366.html
> [2] https://github.com/freebsd/freebsd/blob/master/sys/sys/buf_ring.h#L170
> [3] http://dpdk.org/ml/archives/dev/2017-October/080861.html
>
Please split this patches into three:
- Your original fix
- Introduce rte_ring_generic.h and move the common function to that file
- Introduce CONFIG_RTE_RING_USE_C11_MEM_MODEL and move C11 memory
implementation to lib/librte_ring/rte_ring_c11_mem.h
> ---
> +#ifndef _RTE_RING_C11_MEM_H_
> +#define _RTE_RING_C11_MEM_H_
> +
> +#define UNUSED_PARAMETER(x) ((void)(x))
> +static __rte_always_inline void
> +update_tail(struct rte_ring_headtail *ht, uint32_t old_val, uint32_t new_val,
> + uint32_t single, uint32_t enqueue)
> +{
> + UNUSED_PARAMETER(enqueue);
s/UNUSED_PARAMETER/RTE_SET_USED
More information about the dev
mailing list