[dpdk-dev] lib/librte_ether: change socket_id passed to rte_memzone_reserve

Message ID 1421140920-9964-1-git-send-email-cian.ferriter@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Cian Ferriter Jan. 13, 2015, 9:22 a.m. UTC
  Change the socket id that is passed to rte_memzone_reserve from
the socket id of current logical core to the socket id of the
master_lcore.
---
 lib/librte_ether/rte_ethdev.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
 mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c
  

Comments

Stephen Hemminger Jan. 13, 2015, 11:24 p.m. UTC | #1
On Tue, 13 Jan 2015 09:22:00 +0000
Cian Ferriter <cian.ferriter@intel.com> wrote:

> Change the socket id that is passed to rte_memzone_reserve from
> the socket id of current logical core to the socket id of the
> master_lcore.
> ---
>  lib/librte_ether/rte_ethdev.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>  mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c
> 
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> old mode 100644
> new mode 100755
> index 95f2ceb..835540d
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -184,7 +184,7 @@ rte_eth_dev_data_alloc(void)
>  	if (rte_eal_process_type() == RTE_PROC_PRIMARY){
>  		mz = rte_memzone_reserve(MZ_RTE_ETH_DEV_DATA,
>  				RTE_MAX_ETHPORTS * sizeof(*rte_eth_dev_data),
> -				rte_socket_id(), flags);
> +				rte_lcore_to_socket_id(rte_get_master_lcore()), flags);
>  	} else
>  		mz = rte_memzone_lookup(MZ_RTE_ETH_DEV_DATA);
>  	if (mz == NULL)


Why is this a memzone at all?
Seems like it should be allocated on a per-device basis on the same NUMA node
of the device. Probably with rte_malloc_socket().
  
Bruce Richardson Jan. 14, 2015, 10:13 a.m. UTC | #2
On Tue, Jan 13, 2015 at 03:24:15PM -0800, Stephen Hemminger wrote:
> On Tue, 13 Jan 2015 09:22:00 +0000
> Cian Ferriter <cian.ferriter@intel.com> wrote:
> 
> > Change the socket id that is passed to rte_memzone_reserve from
> > the socket id of current logical core to the socket id of the
> > master_lcore.
> > ---
> >  lib/librte_ether/rte_ethdev.c |    2 +-
> >  1 files changed, 1 insertions(+), 1 deletions(-)
> >  mode change 100644 => 100755 lib/librte_ether/rte_ethdev.c
> > 
> > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> > old mode 100644
> > new mode 100755
> > index 95f2ceb..835540d
> > --- a/lib/librte_ether/rte_ethdev.c
> > +++ b/lib/librte_ether/rte_ethdev.c
> > @@ -184,7 +184,7 @@ rte_eth_dev_data_alloc(void)
> >  	if (rte_eal_process_type() == RTE_PROC_PRIMARY){
> >  		mz = rte_memzone_reserve(MZ_RTE_ETH_DEV_DATA,
> >  				RTE_MAX_ETHPORTS * sizeof(*rte_eth_dev_data),
> > -				rte_socket_id(), flags);
> > +				rte_lcore_to_socket_id(rte_get_master_lcore()), flags);
> >  	} else
> >  		mz = rte_memzone_lookup(MZ_RTE_ETH_DEV_DATA);
> >  	if (mz == NULL)
> 
> 
> Why is this a memzone at all?
> Seems like it should be allocated on a per-device basis on the same NUMA node
> of the device. Probably with rte_malloc_socket().
> 
You can't look up a malloced area of memory in a secondary process, since it
doesn't have a name.
Question is: for normal apps, does the eth_dev_data ever drop out of cache? If
not, the numa node used for memory doesn't matter.

/Bruce
  

Patch

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
old mode 100644
new mode 100755
index 95f2ceb..835540d
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -184,7 +184,7 @@  rte_eth_dev_data_alloc(void)
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY){
 		mz = rte_memzone_reserve(MZ_RTE_ETH_DEV_DATA,
 				RTE_MAX_ETHPORTS * sizeof(*rte_eth_dev_data),
-				rte_socket_id(), flags);
+				rte_lcore_to_socket_id(rte_get_master_lcore()), flags);
 	} else
 		mz = rte_memzone_lookup(MZ_RTE_ETH_DEV_DATA);
 	if (mz == NULL)