Hey Kevin, Thanks for the testing,~!
On Thu, Feb 5, 2015 at 10:29 AM, Traynor, Kevin <kevin.tray...@intel.com> wrote: > Hi, > > I've done some quick testing on this patch for different values of > NON_PMD_CORE_ID and it looks to be working fine. > > The only issue I've seen is that I'm isolcpus for all cores except core 0, > so when I change the NON_PMD_CORE_ID to non-zero, the pmd is being > scheduled on core 0 also and throughput suffers depending on system load. > > I'd suggest adding a comment beside the #define to warn that this value > affects where the pmd is scheduled, and it may be on a non-isolated core. > I'll do that, > Thanks, > Kevin. > > > -----Original Message----- > > From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Daniele Di > Proietto > > Sent: Thursday, February 5, 2015 12:58 AM > > To: Alex Wang > > Cc: dev@openvswitch.org > > Subject: Re: [ovs-dev] [PATCH] netdev-dpdk: Allow changing > NON_PMD_CORE_ID for testing purpose. > > > > Hey Alex, > > > > I remember that calling certain DPDK functions (that we use to > > initialize devices) with '_lcore_id !=0' resulted in an error. If this > > is not the case anymore with DPDK 1.7.1 (i.e. if you tested this patch > > with NON_PMD_CORE_ID!=0 and it worked), then I have no objection. > > > > I would test this myself, but I don't have access to a DPDK capable > > system right now. If you want to be more sure about this you can build > > DPDK with CONFIG_RTE_LIBRTE_MBUF_DEBUG=y and watch for failed > > assertions. > > > > Last thing: we could also avoid using the _lcore_id to set the > > affinity of a thread (e.g. a thread with '_lcore_id == 1' doesn't > > necessarily need to be pinned to cpu 1). This would be another way to > > achieve the same goal, but I prefer your approach, because it is more > > consistent with DPDK internals. > > > > Hope this helps. Let me know if there's anything else about this > > > > Thanks, > > > > Daniele > > > > 2015-02-05 0:14 GMT+01:00 Alex Wang <al...@nicira.com>: > > > Hey Daniele, > > > > > > Do you still remember why you mentioned: > > > > > > "/* We have to use 0 to allow non pmd threads to perform certain DPDK > > > * operations, like rte_eth_dev_configure(). */ > > > " > > > in your commit: db73f716 (netdev-dpdk: Fix race condition with DPDK > > > mempools in non pmd threads) > > > > > > This posted commit works during my manual test. And the > > > rte_eth_dev_configure() in dpdk-1.7.1 does not require the caller > lcore id > > > to > > > be 0. > > > > > > But Pravin mentioned that you may know more about why use 0 for non-pmd > > > threads (to prevent crash?). > > > > > > Could you share some thoughts? > > > > > > Thanks, > > > Alex Wang, > > > > > > On Wed, Feb 4, 2015 at 2:14 PM, Pravin Shelar <pshe...@nicira.com> > wrote: > > >> > > >> On Tue, Feb 3, 2015 at 5:54 PM, Alex Wang <al...@nicira.com> wrote: > > >> > For testing purpose, developers may want to change the > NON_PMD_CORE_ID > > >> > and use a different core for non-pmd threads. Since the netdev-dpdk > > >> > module is hard-coded to assert the non-pmd threads using core 0, > such > > >> > change will cause abortion of OVS. > > >> > > > >> > This commit fixes the assertion and allows changing NON_PMD_CORE_ID. > > >> > > > >> > Signed-off-by: Alex Wang <al...@nicira.com> > > >> > --- > > >> > lib/dpctl.c | 2 +- > > >> > lib/dpif-netdev.h | 1 - > > >> > lib/netdev-dpdk.c | 12 ++++++------ > > >> > lib/netdev-dpdk.h | 2 ++ > > >> > 4 files changed, 9 insertions(+), 8 deletions(-) > > >> > > > >> > diff --git a/lib/dpctl.c b/lib/dpctl.c > > >> > index 4c2614b..125023c 100644 > > >> > --- a/lib/dpctl.c > > >> > +++ b/lib/dpctl.c > > >> > @@ -31,11 +31,11 @@ > > >> > #include "dirs.h" > > >> > #include "dpctl.h" > > >> > #include "dpif.h" > > >> > -#include "dpif-netdev.h" > > >> > #include "dynamic-string.h" > > >> > #include "flow.h" > > >> > #include "match.h" > > >> > #include "netdev.h" > > >> > +#include "netdev-dpdk.h" > > >> > #include "netlink.h" > > >> > #include "odp-util.h" > > >> > #include "ofp-parse.h" > > >> > diff --git a/lib/dpif-netdev.h b/lib/dpif-netdev.h > > >> > index d811507..410fcfa 100644 > > >> > --- a/lib/dpif-netdev.h > > >> > +++ b/lib/dpif-netdev.h > > >> > @@ -42,7 +42,6 @@ static inline void dp_packet_pad(struct ofpbuf *b) > > >> > > > >> > #define NR_QUEUE 1 > > >> > #define NR_PMD_THREADS 1 > > >> > -#define NON_PMD_CORE_ID 0 > > >> > > > >> > #ifdef __cplusplus > > >> > } > > >> > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > > >> > index 0ede200..391695f 100644 > > >> > --- a/lib/netdev-dpdk.c > > >> > +++ b/lib/netdev-dpdk.c > > >> > @@ -1553,8 +1553,8 @@ pmd_thread_setaffinity_cpu(int cpu) > > >> > VLOG_ERR("Thread affinity error %d",err); > > >> > return err; > > >> > } > > >> > - /* lcore_id 0 is reseved for use by non pmd threads. */ > > >> > - ovs_assert(cpu); > > >> > + /* NON_PMD_CORE_ID is reserved for use by non pmd threads. */ > > >> > + ovs_assert(cpu != NON_PMD_CORE_ID); > > >> > > >> > RTE_PER_LCORE(_lcore_id) = cpu; > > >> > > > >> > return 0; > > >> > @@ -1563,13 +1563,13 @@ pmd_thread_setaffinity_cpu(int cpu) > > >> > void > > >> > thread_set_nonpmd(void) > > >> > { > > >> > - /* We have to use 0 to allow non pmd threads to perform certain > > >> > DPDK > > >> > - * operations, like rte_eth_dev_configure(). */ > > >> > - RTE_PER_LCORE(_lcore_id) = 0; > > >> > + /* We have to use NON_PMD_CORE_ID to allow non-pmd threads to > > >> > perform > > >> > + * certain DPDK operations, like rte_eth_dev_configure(). */ > > >> > > >> > > >> The is not equivalent comment. have you confirmed that > > >> rte_eth_dev_configure() works on any core? > > >> > > >> > + RTE_PER_LCORE(_lcore_id) = NON_PMD_CORE_ID; > > >> > } > > >> > > > >> > static bool > > >> > thread_is_pmd(void) > > >> > { > > >> > - return rte_lcore_id() != 0; > > >> > + return rte_lcore_id() != NON_PMD_CORE_ID; > > >> > } > > >> > diff --git a/lib/netdev-dpdk.h b/lib/netdev-dpdk.h > > >> > index c24d6da..9a47165 100644 > > >> > --- a/lib/netdev-dpdk.h > > >> > +++ b/lib/netdev-dpdk.h > > >> > @@ -5,6 +5,8 @@ > > >> > > > >> > struct dpif_packet; > > >> > > > >> > +#define NON_PMD_CORE_ID 0 > > >> > + > > >> > #ifdef DPDK_NETDEV > > >> > > > >> > #include <rte_config.h> > > >> > -- > > >> > 1.7.9.5 > > >> > > > >> > _______________________________________________ > > >> > dev mailing list > > >> > dev@openvswitch.org > > >> > http://openvswitch.org/mailman/listinfo/dev > > > > > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev