[dpdk-dev] [PATCH v2 2/3] test/distributor: replace sync builtins with atomic builtins
Phil Yang (Arm Technology China)
Phil.Yang at arm.com
Tue Apr 2 05:43:14 CEST 2019
> -----Original Message-----
> From: Honnappa Nagarahalli <Honnappa.Nagarahalli at arm.com>
> Sent: Tuesday, April 2, 2019 12:24 AM
> To: Phil Yang (Arm Technology China) <Phil.Yang at arm.com>; dev at dpdk.org;
> thomas at monjalon.net
> Cc: david.hunt at intel.com; reshma.pattan at intel.com; Gavin Hu (Arm
> Technology China) <Gavin.Hu at arm.com>; Phil Yang (Arm Technology China)
> <Phil.Yang at arm.com>; nd <nd at arm.com>; Honnappa Nagarahalli
> <Honnappa.Nagarahalli at arm.com>; nd <nd at arm.com>
> Subject: RE: [PATCH v2 2/3] test/distributor: replace sync builtins with atomic
> builtins
>
> >
> > diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c
> > index 98919ec..ddab08d 100644
> > --- a/app/test/test_distributor.c
> > +++ b/app/test/test_distributor.c
> > @@ -62,9 +62,14 @@ handle_work(void *arg)
> > struct worker_params *wp = arg;
> > struct rte_distributor *db = wp->dist;
> > unsigned int count = 0, num = 0;
> > - unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
> > int i;
> >
> > +#ifdef RTE_USE_C11_MEM_MODEL
> > + unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> > +__ATOMIC_RELAXED); #else
> > + unsigned int id = __sync_fetch_and_add(&worker_idx, 1); #endif
> > +
> I suggest we remove the conditional compilation and just keep the
> __atomic_xxx calls as this is test code. More over the distributor library does
> not have a C11 version of the library (assuming that using __atomic_xxx does
> not impact performance on other platforms negatively). This applies to other
> instances in this patch.
Hi Honnappa,
Thanks for your comments.
Agree. I don't think __atomic_xxx will cause performance degradation on other platforms. Remove the conditional compilation will make the code more clear.
Thanks,
Phil Yang
>
> > for (i = 0; i < 8; i++)
> > buf[i] = NULL;
> > num = rte_distributor_get_pkt(db, id, buf, buf, num); @@ -270,7
> > +275,12 @@ handle_work_with_free_mbufs(void *arg)
> > unsigned int count = 0;
> > unsigned int i;
> > unsigned int num = 0;
> > +
> > +#ifdef RTE_USE_C11_MEM_MODEL
> > + unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> > +__ATOMIC_RELAXED); #else
> > unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
> > +#endif
> >
> > for (i = 0; i < 8; i++)
> > buf[i] = NULL;
> > @@ -343,7 +353,13 @@ handle_work_for_shutdown_test(void *arg)
> > unsigned int total = 0;
> > unsigned int i;
> > unsigned int returned = 0;
> > +
> > +#ifdef RTE_USE_C11_MEM_MODEL
> > + const unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> > + __ATOMIC_RELAXED);
> > +#else
> > const unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
> > +#endif
> >
> > num = rte_distributor_get_pkt(d, id, buf, buf, num);
> >
> > diff --git a/app/test/test_distributor_perf.c
> > b/app/test/test_distributor_perf.c
> > index edf1998..9367460 100644
> > --- a/app/test/test_distributor_perf.c
> > +++ b/app/test/test_distributor_perf.c
> > @@ -111,9 +111,14 @@ handle_work(void *arg)
> > unsigned int count = 0;
> > unsigned int num = 0;
> > int i;
> > - unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
> > struct rte_mbuf *buf[8] __rte_cache_aligned;
> >
> > +#ifdef RTE_USE_C11_MEM_MODEL
> > + unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> > +__ATOMIC_RELAXED); #else
> > + unsigned int id = __sync_fetch_and_add(&worker_idx, 1); #endif
> > +
> > for (i = 0; i < 8; i++)
> > buf[i] = NULL;
> >
> > --
> > 2.7.4
More information about the dev
mailing list