[dpdk-dev] [PATCH v5 18/19] ring: add sched_yield to avoid spin forever

Olivier MATZ olivier.matz at 6wind.com
Thu Feb 12 12:16:08 CET 2015


Hi,

On 02/12/2015 09:16 AM, Cunming Liang wrote:
> Add a sched_yield() syscall if the thread spins for too long, waiting other thread to finish its operations on the ring.
> That gives pre-empted thread a chance to proceed and finish with ring enqnue/dequeue operation.
> The purpose is to reduce contention on the ring. By ring_perf_test, it doesn't shows additional perf penalty.
>
> Signed-off-by: Cunming Liang <cunming.liang at intel.com>
> ---
>   v5 changes:
>     add RTE_RING_PAUSE_REP to config file
>
>   v4 changes:
>     update and add more comments on sched_yield()
>
>   v3 changes:
>     new patch adding sched_yield() in rte_ring to avoid long spin
>
>   config/common_bsdapp       |  1 +
>   config/common_linuxapp     |  1 +
>   lib/librte_ring/rte_ring.h | 31 +++++++++++++++++++++++++++----
>   3 files changed, 29 insertions(+), 4 deletions(-)
>
> diff --git a/config/common_bsdapp b/config/common_bsdapp
> index 57bacb8..52c5143 100644
> --- a/config/common_bsdapp
> +++ b/config/common_bsdapp
> @@ -234,6 +234,7 @@ CONFIG_RTE_PMD_PACKET_PREFETCH=y
>   CONFIG_RTE_LIBRTE_RING=y
>   CONFIG_RTE_LIBRTE_RING_DEBUG=n
>   CONFIG_RTE_RING_SPLIT_PROD_CONS=n
> +CONFIG_RTE_RING_PAUSE_REP=n

Maybe it's better to use CONFIG_RTE_RING_PAUSE_REP=0 instead?
If I understand well, it has to be set to an integer value to
enable it, am I correct?

Thanks,
Olivier



More information about the dev mailing list