From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 170451B127 for ; Thu, 28 Mar 2019 14:58:16 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Mar 2019 06:58:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,280,1549958400"; d="scan'208";a="159229983" Received: from aburakov-mobl1.ger.corp.intel.com (HELO [10.237.220.103]) ([10.237.220.103]) by fmsmga001.fm.intel.com with ESMTP; 28 Mar 2019 06:58:15 -0700 To: David Hunt , dev@dpdk.org Cc: liang.j.ma@intel.com References: <20190222114551.30692-1-david.hunt@intel.com> <20190328131354.25222-1-david.hunt@intel.com> From: "Burakov, Anatoly" Message-ID: <6d478ef6-cc2a-71c0-d7b0-de86c04eb41c@intel.com> Date: Thu, 28 Mar 2019 13:58:14 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.0 MIME-Version: 1.0 In-Reply-To: <20190328131354.25222-1-david.hunt@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v2] examples/distributor: detect high frequency cores X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Mar 2019 13:58:17 -0000 On 28-Mar-19 1:13 PM, David Hunt wrote: > The distributor application is bottlenecked by the distributor core, > so if we can give more frequency to this core, then the overall > performance of the application may increase. > > This patch uses the rte_power_get_capabilities() API to query the > cores provided in the core mask, and if any high frequency cores are > found (e.g. Turbo Boost is enabled), we will pin the distributor > workload to that core. > > Signed-off-by: Liang Ma > Signed-off-by: David Hunt > --- <...> > + if (power_lib_initialised) > + rte_power_exit(rte_lcore_id()); > printf("\nCore %u exiting tx task.\n", rte_lcore_id()); > return 0; > } > @@ -575,9 +582,35 @@ lcore_worker(struct lcore_params *p) > if (num > 0) > app_stats.worker_bursts[p->worker_id][num-1]++; > } > + if (power_lib_initialised) > + rte_power_exit(rte_lcore_id()); > + rte_free(p); > return 0; > } > > +static int > +init_power_library(void) > +{ > + int ret = 0, lcore_id; > + RTE_LCORE_FOREACH_SLAVE(lcore_id) { > + if (rte_lcore_is_enabled(lcore_id)) { Please correct me if i'm wrong, but RTE_LCORE_FOREACH_SLAVE already checks if the lcore is enabled. <...> > > + if (power_lib_initialised) { > + /* > + * Here we'll pre-assign lcore ids to the rx, tx and > + * distributor workloads if there's higher frequency > + * on those cores e.g. if Turbo Boost is enabled. > + * It's also worth mentioning that it will assign cores in a > + * specific order, so that if there's less than three > + * available, the higher frequency cores will go to the > + * distributor first, then rx, then tx. > + */ > + RTE_LCORE_FOREACH_SLAVE(lcore_id) { > + > + rte_power_get_capabilities(lcore_id, &lcore_cap); > + > + if (lcore_cap.turbo == 1) { > + priority_num++; > + switch (priority_num) { > + case 1: > + distr_core_id = lcore_id; > + printf("Distributor on priority core %d\n", > + lcore_id); > + break; > + case 2: > + rx_core_id = lcore_id; > + printf("Rx on priority core %d\n", > + lcore_id); > + break; > + case 3: > + tx_core_id = lcore_id; > + printf("Tx on priority core %d\n", > + lcore_id); > + break; > + default: > + break; > + } This seems to be doing the same thing as right below (assigning lcore id's in order), yet in one case you use a switch, and in the other you use a simple loop. I don't see priority_num used anywhere else, so you might as well simplify this loop to be similar to what you have below, with "skip-if-not-turbo, if not assigned, assign-and-continue" type flow. Once that is fixed, Reviewed-by: Anatoly Burakov -- Thanks, Anatoly From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 722A0A0679 for ; Thu, 28 Mar 2019 14:58:18 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 487E61B20C; Thu, 28 Mar 2019 14:58:18 +0100 (CET) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 170451B127 for ; Thu, 28 Mar 2019 14:58:16 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Mar 2019 06:58:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,280,1549958400"; d="scan'208";a="159229983" Received: from aburakov-mobl1.ger.corp.intel.com (HELO [10.237.220.103]) ([10.237.220.103]) by fmsmga001.fm.intel.com with ESMTP; 28 Mar 2019 06:58:15 -0700 To: David Hunt , dev@dpdk.org Cc: liang.j.ma@intel.com References: <20190222114551.30692-1-david.hunt@intel.com> <20190328131354.25222-1-david.hunt@intel.com> From: "Burakov, Anatoly" Message-ID: <6d478ef6-cc2a-71c0-d7b0-de86c04eb41c@intel.com> Date: Thu, 28 Mar 2019 13:58:14 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.0 MIME-Version: 1.0 In-Reply-To: <20190328131354.25222-1-david.hunt@intel.com> Content-Type: text/plain; charset="UTF-8"; format="flowed" Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v2] examples/distributor: detect high frequency cores X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Message-ID: <20190328135814.v5Neea9XG6s2yQAylOD3x53OaiTNroNG1p7LVy6Eq8A@z> On 28-Mar-19 1:13 PM, David Hunt wrote: > The distributor application is bottlenecked by the distributor core, > so if we can give more frequency to this core, then the overall > performance of the application may increase. > > This patch uses the rte_power_get_capabilities() API to query the > cores provided in the core mask, and if any high frequency cores are > found (e.g. Turbo Boost is enabled), we will pin the distributor > workload to that core. > > Signed-off-by: Liang Ma > Signed-off-by: David Hunt > --- <...> > + if (power_lib_initialised) > + rte_power_exit(rte_lcore_id()); > printf("\nCore %u exiting tx task.\n", rte_lcore_id()); > return 0; > } > @@ -575,9 +582,35 @@ lcore_worker(struct lcore_params *p) > if (num > 0) > app_stats.worker_bursts[p->worker_id][num-1]++; > } > + if (power_lib_initialised) > + rte_power_exit(rte_lcore_id()); > + rte_free(p); > return 0; > } > > +static int > +init_power_library(void) > +{ > + int ret = 0, lcore_id; > + RTE_LCORE_FOREACH_SLAVE(lcore_id) { > + if (rte_lcore_is_enabled(lcore_id)) { Please correct me if i'm wrong, but RTE_LCORE_FOREACH_SLAVE already checks if the lcore is enabled. <...> > > + if (power_lib_initialised) { > + /* > + * Here we'll pre-assign lcore ids to the rx, tx and > + * distributor workloads if there's higher frequency > + * on those cores e.g. if Turbo Boost is enabled. > + * It's also worth mentioning that it will assign cores in a > + * specific order, so that if there's less than three > + * available, the higher frequency cores will go to the > + * distributor first, then rx, then tx. > + */ > + RTE_LCORE_FOREACH_SLAVE(lcore_id) { > + > + rte_power_get_capabilities(lcore_id, &lcore_cap); > + > + if (lcore_cap.turbo == 1) { > + priority_num++; > + switch (priority_num) { > + case 1: > + distr_core_id = lcore_id; > + printf("Distributor on priority core %d\n", > + lcore_id); > + break; > + case 2: > + rx_core_id = lcore_id; > + printf("Rx on priority core %d\n", > + lcore_id); > + break; > + case 3: > + tx_core_id = lcore_id; > + printf("Tx on priority core %d\n", > + lcore_id); > + break; > + default: > + break; > + } This seems to be doing the same thing as right below (assigning lcore id's in order), yet in one case you use a switch, and in the other you use a simple loop. I don't see priority_num used anywhere else, so you might as well simplify this loop to be similar to what you have below, with "skip-if-not-turbo, if not assigned, assign-and-continue" type flow. Once that is fixed, Reviewed-by: Anatoly Burakov -- Thanks, Anatoly