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 016A9903 for ; Mon, 9 Feb 2015 13:45:47 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP; 09 Feb 2015 04:45:46 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.09,543,1418112000"; d="scan'208";a="675088485" Received: from pgsmsx102.gar.corp.intel.com ([10.221.44.80]) by fmsmga002.fm.intel.com with ESMTP; 09 Feb 2015 04:45:43 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by PGSMSX102.gar.corp.intel.com (10.221.44.80) with Microsoft SMTP Server (TLS) id 14.3.195.1; Mon, 9 Feb 2015 20:45:43 +0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.62]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.192]) with mapi id 14.03.0195.001; Mon, 9 Feb 2015 20:45:43 +0800 From: "Liang, Cunming" To: Olivier MATZ , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v4 05/17] eal: new TLS definition and API declaration Thread-Index: AQHQPoxkgmtTQs0uZE+mdAtUqfOWdJzmsHSAgAGa2DA= Date: Mon, 9 Feb 2015 12:45:42 +0000 Message-ID: References: <1422491072-5114-1-git-send-email-cunming.liang@intel.com> <1422842559-13617-1-git-send-email-cunming.liang@intel.com> <1422842559-13617-6-git-send-email-cunming.liang@intel.com> <54D7C045.4070701@6wind.com> In-Reply-To: <54D7C045.4070701@6wind.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4 05/17] eal: new TLS definition and API declaration 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: Mon, 09 Feb 2015 12:45:48 -0000 > -----Original Message----- > From: Olivier MATZ [mailto:olivier.matz@6wind.com] > Sent: Monday, February 09, 2015 4:00 AM > To: Liang, Cunming; dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v4 05/17] eal: new TLS definition and API > declaration >=20 > Hi, >=20 > On 02/02/2015 03:02 AM, Cunming Liang wrote: > > 1. add two TLS *_socket_id* and *_cpuset* > > 2. add two external API rte_thread_set/get_affinity > > 3. add one internal API eal_thread_dump_affinity >=20 > To me, it's a bit strage to add an API withtout the associated code. > Maybe you have a good reason to do that, but I think in this case it > should be explained in the commit log. [LCM] Accept. >=20 > > > > Signed-off-by: Cunming Liang > > --- > > lib/librte_eal/bsdapp/eal/eal_thread.c | 2 ++ > > lib/librte_eal/common/eal_thread.h | 14 ++++++++++++++ > > lib/librte_eal/common/include/rte_lcore.h | 29 > +++++++++++++++++++++++++++-- > > lib/librte_eal/linuxapp/eal/eal_thread.c | 2 ++ > > 4 files changed, 45 insertions(+), 2 deletions(-) > > > > diff --git a/lib/librte_eal/bsdapp/eal/eal_thread.c > b/lib/librte_eal/bsdapp/eal/eal_thread.c > > index ab05368..10220c7 100644 > > --- a/lib/librte_eal/bsdapp/eal/eal_thread.c > > +++ b/lib/librte_eal/bsdapp/eal/eal_thread.c > > @@ -56,6 +56,8 @@ > > #include "eal_thread.h" > > > > RTE_DEFINE_PER_LCORE(unsigned, _lcore_id); > > +RTE_DEFINE_PER_LCORE(unsigned, _socket_id); > > +RTE_DEFINE_PER_LCORE(rte_cpuset_t, _cpuset); > > > > /* > > * Send a message to a slave lcore identified by slave_id to call a > > diff --git a/lib/librte_eal/common/eal_thread.h > b/lib/librte_eal/common/eal_thread.h > > index a25ee86..28edf51 100644 > > --- a/lib/librte_eal/common/eal_thread.h > > +++ b/lib/librte_eal/common/eal_thread.h > > @@ -102,4 +102,18 @@ eal_cpuset_socket_id(rte_cpuset_t *cpusetp) > > return socket_id; > > } > > > > +/** > > + * Dump the current pthread cpuset. > > + * This function is private to EAL. > > + * > > + * @param str > > + * The string buffer the cpuset will dump to. > > + * @param size > > + * The string buffer size. > > + */ > > +#define CPU_STR_LEN 256 > > +void > > +eal_thread_dump_affinity(char str[], unsigned size); >=20 > Although it's equivalent for function arguments, I think "char *str" is > usually preferred over "char str[]". See for instance in snprintf() or > fgets(). [LCM] Accept. >=20 > What is the purpose of CPU_STR_LEN? [LCM] For default quick reference for str[] definition used in dump_affinit= y() >=20 > What occurs if the size of the dump is greater than the size of the > given buffer? Is the string truncated? Is there a \0 at the end? [LCM] Yes, always have a '\0' in the end. > This should be described in the API comments. [LCM] Accept. > Maybe adding a return > value could help the user to determine if the string was truncated. [LCM] Good idea, so the user can continue to print '...' for the truncated = part. >=20 > > + > > + > > #endif /* EAL_THREAD_H */ > > diff --git a/lib/librte_eal/common/include/rte_lcore.h > b/lib/librte_eal/common/include/rte_lcore.h > > index 4c7d6bb..facdbdc 100644 > > --- a/lib/librte_eal/common/include/rte_lcore.h > > +++ b/lib/librte_eal/common/include/rte_lcore.h > > @@ -43,6 +43,7 @@ > > #include > > #include > > #include > > +#include > > > > #ifdef __cplusplus > > extern "C" { > > @@ -80,7 +81,9 @@ struct lcore_config { > > */ > > extern struct lcore_config lcore_config[RTE_MAX_LCORE]; > > > > -RTE_DECLARE_PER_LCORE(unsigned, _lcore_id); /**< Per core "core id". *= / > > +RTE_DECLARE_PER_LCORE(unsigned, _lcore_id); /**< Per thread "lcore id= ". > */ > > +RTE_DECLARE_PER_LCORE(unsigned, _socket_id); /**< Per thread "socket i= d". > */ > > +RTE_DECLARE_PER_LCORE(rte_cpuset_t, _cpuset); /**< Per thread "cpuset"= . > */ > > > > /** > > * Return the ID of the execution unit we are running on. > > @@ -146,7 +149,7 @@ rte_lcore_index(int lcore_id) > > static inline unsigned > > rte_socket_id(void) > > { > > - return lcore_config[rte_lcore_id()].socket_id; > > + return RTE_PER_LCORE(_socket_id); > > } >=20 > I don't see where the _socket_id variable is assigned. I think there > is probably an issue with the splitting of the patches. [LCM] The value initializes as SOCKET_ID_ANY when RTE_DEFINE_PER_LCORE(). And updated in eal_thread_set_affinity() for EAL thread and rte_thread_set_= affinity() for non-EAL thread. >=20 > Regards, > Olivier