From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id EEC7D5A7F for ; Tue, 13 Jan 2015 19:08:11 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP; 13 Jan 2015 10:05:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.97,862,1389772800"; d="scan'208";a="440069869" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by FMSMGA003.fm.intel.com with ESMTP; 13 Jan 2015 09:52:36 -0800 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.71]) by IRSMSX106.ger.corp.intel.com ([169.254.8.222]) with mapi id 14.03.0195.001; Tue, 13 Jan 2015 18:05:25 +0000 From: "Ferriter, Cian" To: "Richardson, Bruce" Thread-Topic: [dpdk-dev] [PATCH] lib/librte_ether: change socket_id passed to rte_memzone_reserve Thread-Index: AQHQLxJxCtZNxstVx0ajqB3SBqs+d5y9xuPQgABMPYCAADmXQA== Date: Tue, 13 Jan 2015 18:05:25 +0000 Message-ID: References: <1421140920-9964-1-git-send-email-cian.ferriter@intel.com> <20150113135549.GA3460@bricha3-MOBL3> In-Reply-To: <20150113135549.GA3460@bricha3-MOBL3> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH] lib/librte_ether: change socket_id passed to rte_memzone_reserve X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Jan 2015 18:08:12 -0000 Comments on alternative solutions: 1) how would this solution work when there is no NIC present, and "rte_eth_= from_rings" is called? Here, could you have an else where the socket id of = the master core is passed to the "memzone_reserve"? 2) how would you advise making this change? I have looked at where "rte_eth= _dev_allocate" is being called and in all but one case, there is a "numa_id= " that could be passed in. This isn't the case for " rte_eth_dev_init" howe= ver, is there an easy solution for this? Would there now need to be an "rte= _eth_dev_data" struct for each socket that there is a NIC attached to, rese= rving memory from that socket? Cian -----Original Message----- From: Richardson, Bruce=20 Sent: Tuesday, January 13, 2015 1:56 PM To: Ferriter, Cian Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH] lib/librte_ether: change socket_id passed t= o rte_memzone_reserve On Tue, Jan 13, 2015 at 09:23:16AM +0000, Ferriter, Cian wrote: > Passing a socket id of "rte_socket_id()" can cause problems in non DPDK a= pplications as there is a dependency on the current logical core we are run= ning on. > Passing " rte_lcore_to_socket_id(rte_get_master_lcore())" as the socket i= d to rte_memzone_reserve resolves these issues as the master lcore doesn't = change. >=20 The only trouble is that when affinitizing the memory for the NICs to the s= ocket of the master lcore, it gives us no way to correctly configure an app= to use NICs connected to two different sockets on the one system. All memo= ry for all NICs will end up on the same socket. Two possible alternative so= lutions: 1) affinitize memory to the socket the NIC is connected to 2) add a socket parameter to the API calls to allow the user complete contr= ol over their memory allocations Obviously the second one breaks backward compatibility (assume we modify ex= isting API call), but is more powerful. Thoughts? /Bruce > -----Original Message----- > From: Ferriter, Cian > Sent: Tuesday, January 13, 2015 9:22 AM > To: dev@dpdk.org > Cc: Ferriter, Cian > Subject: [PATCH] lib/librte_ether: change socket_id passed to=20 > rte_memzone_reserve >=20 > Change the socket id that is passed to rte_memzone_reserve from the socke= t 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=20 > =3D> 100755 lib/librte_ether/rte_ethdev.c >=20 > diff --git a/lib/librte_ether/rte_ethdev.c=20 > b/lib/librte_ether/rte_ethdev.c old mode 100644 new mode 100755 index=20 > 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() =3D=3D RTE_PROC_PRIMARY){ > mz =3D 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 =3D rte_memzone_lookup(MZ_RTE_ETH_DEV_DATA); > if (mz =3D=3D NULL) > -- > 1.7.4.1 >=20