From mboxrd@z Thu Jan 1 00:00:00 1970 From: gowrishankar muthukrishnan Subject: Re: [PATCH v4 3/6] ip_pipeline: fix lcore mapping for varying SMT threads as in ppc64 Date: Tue, 9 Aug 2016 16:43:38 +0530 Message-ID: <02d3d480-85cf-619f-eb92-630adb5881c3@linux.vnet.ibm.com> References: <1470486765-2672-1-git-send-email-gowrishankar.m@linux.vnet.ibm.com> <1470486765-2672-4-git-send-email-gowrishankar.m@linux.vnet.ibm.com> <000101d1f21d$82985610$87c90230$@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Cc: "'Bruce Richardson'" , "'Konstantin Ananyev'" , "'Thomas Monjalon'" , "'Cristian Dumitrescu'" , "'Pradeep'" To: Chao Zhu , dev@dpdk.org Return-path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by dpdk.org (Postfix) with ESMTP id 7AF344A63 for ; Tue, 9 Aug 2016 13:13:48 +0200 (CEST) Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.11/8.16.0.11) with SMTP id u79B9CoQ039996 for ; Tue, 9 Aug 2016 07:13:48 -0400 Received: from e23smtp08.au.ibm.com (e23smtp08.au.ibm.com [202.81.31.141]) by mx0a-001b2d01.pphosted.com with ESMTP id 24qct8m9gb-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 09 Aug 2016 07:13:46 -0400 Received: from localhost by e23smtp08.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 9 Aug 2016 21:13:43 +1000 Received: from d23relay10.au.ibm.com (d23relay10.au.ibm.com [9.190.26.77]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id C82332CE802D for ; Tue, 9 Aug 2016 21:13:41 +1000 (EST) Received: from d23av06.au.ibm.com (d23av06.au.ibm.com [9.190.235.151]) by d23relay10.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u79BDf1B34209992 for ; Tue, 9 Aug 2016 21:13:41 +1000 Received: from d23av06.au.ibm.com (localhost [127.0.0.1]) by d23av06.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u79BDfdg018016 for ; Tue, 9 Aug 2016 21:13:41 +1000 In-Reply-To: <000101d1f21d$82985610$87c90230$@linux.vnet.ibm.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Chao, Sure. Please find below one. This patch fixes ip_pipeline panic in app_init_core_map while preparing cpu core map in powerpc with SMT off. cpu_core_map_compute_linux currently prepares core mapping based on file existence in sysfs ie. /sys/devices/system/cpu/cpu/topology/physical_package_id /sys/devices/system/cpu/cpu/topology/core_id These files do not exist for lcores which are offline for any reason (as in powerpc, while SMT is off). In this situation, this function should further continue preparing map for other online lcores instead of returning with -1 for a first unavailable lcore. Also, in SMT=off scenario for powerpc, lcore ids can not be always indexed from 0 upto 'number of cores present' (/sys/devices/system/cpu/present). For eg, for an online lcore 32, core_id returned in sysfs is 112 where online lcores are 10 (as in one configuration), hence sysfs lcore id can not be checked with indexing lcore number before positioning lcore map array. Thanks, Gowrishankar On Tuesday 09 August 2016 02:37 PM, Chao Zhu wrote: > Gowrishankar, > > Can you give more description about this patch? > Thank you! > > -----Original Message----- > From: Gowrishankar Muthukrishnan [mailto:gowrishankar.m@linux.vnet.ibm.com] > Sent: 2016年8月6日 20:33 > To: dev@dpdk.org > Cc: Chao Zhu ; Bruce Richardson > ; Konstantin Ananyev > ; Thomas Monjalon ; > Cristian Dumitrescu ; Pradeep > ; gowrishankar > Subject: [PATCH v4 3/6] ip_pipeline: fix lcore mapping for varying SMT > threads as in ppc64 > > From: gowrishankar > > offline lcore would still refer to original core id and this has to be > considered while creating cpu core mask. > > Signed-off-by: Gowrishankar > --- > config/defconfig_ppc_64-power8-linuxapp-gcc | 3 --- > examples/ip_pipeline/cpu_core_map.c | 12 +----------- > examples/ip_pipeline/init.c | 4 ++++ > 3 files changed, 5 insertions(+), 14 deletions(-) > > diff --git a/config/defconfig_ppc_64-power8-linuxapp-gcc > b/config/defconfig_ppc_64-power8-linuxapp-gcc > index dede34f..a084672 100644 > --- a/config/defconfig_ppc_64-power8-linuxapp-gcc > +++ b/config/defconfig_ppc_64-power8-linuxapp-gcc > @@ -58,6 +58,3 @@ CONFIG_RTE_LIBRTE_FM10K_PMD=n > > # This following libraries are not available on Power. So they're turned > off. > CONFIG_RTE_LIBRTE_SCHED=n > -CONFIG_RTE_LIBRTE_PORT=n > -CONFIG_RTE_LIBRTE_TABLE=n > -CONFIG_RTE_LIBRTE_PIPELINE=n > diff --git a/examples/ip_pipeline/cpu_core_map.c > b/examples/ip_pipeline/cpu_core_map.c > index cb088b1..482e68e 100644 > --- a/examples/ip_pipeline/cpu_core_map.c > +++ b/examples/ip_pipeline/cpu_core_map.c > @@ -351,9 +351,6 @@ cpu_core_map_compute_linux(struct cpu_core_map *map) > int lcore_socket_id = > cpu_core_map_get_socket_id_linux(lcore_id); > > - if (lcore_socket_id < 0) > - return -1; > - > if (((uint32_t) lcore_socket_id) == socket_id) > n_detected++; > } > @@ -368,18 +365,11 @@ cpu_core_map_compute_linux(struct cpu_core_map *map) > cpu_core_map_get_socket_id_linux( > lcore_id); > > - if (lcore_socket_id < 0) > - return -1; > - > Why to remove the lcore_socket_id check? > > int lcore_core_id = > cpu_core_map_get_core_id_linux( > lcore_id); > > - if (lcore_core_id < 0) > - return -1; > - > - if (((uint32_t) lcore_socket_id == > socket_id) && > - ((uint32_t) lcore_core_id == > core_id)) { > + if ((uint32_t) lcore_socket_id == socket_id) > { > uint32_t pos = cpu_core_map_pos(map, > socket_id, > core_id_contig, > diff --git a/examples/ip_pipeline/init.c b/examples/ip_pipeline/init.c index > cd167f6..60c931f 100644 > --- a/examples/ip_pipeline/init.c > +++ b/examples/ip_pipeline/init.c > @@ -61,7 +61,11 @@ static void > app_init_core_map(struct app_params *app) { > APP_LOG(app, HIGH, "Initializing CPU core map ..."); > +#if defined(RTE_ARCH_PPC_64) > + app->core_map = cpu_core_map_init(2, 5, 1, 0); #else > > This value seems quite strange. Can you give more detail? > > app->core_map = cpu_core_map_init(4, 32, 4, 0); > +#endif > > if (app->core_map == NULL) > rte_panic("Cannot create CPU core map\n"); > -- > 1.9.1 > > >