Thread (16 messages) 16 messages, 2 authors, 2016-08-12

Re: [PATCH v4 3/6] ip_pipeline: fix lcore mapping for varying SMT threads as in ppc64

flat view

From: gowrishankar muthukrishnan <hidden>
Date: 2016-08-09 11:13:48

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<LCORE_NUM>/topology/physical_package_id
  /sys/devices/system/cpu/cpu<LCORE_NUM>/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:
quoted hunk ↗ jump to hunk
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 <redacted>; Bruce Richardson
[off-list ref]; Konstantin Ananyev
[off-list ref]; Thomas Monjalon [off-list ref];
Cristian Dumitrescu [off-list ref]; Pradeep
[off-list ref]; gowrishankar [off-list ref]
Subject: [PATCH v4 3/6] ip_pipeline: fix lcore mapping for varying SMT
threads as in ppc64

From: gowrishankar <redacted>

offline lcore would still refer to original core id and this has to be
considered while creating cpu core mask.

Signed-off-by: Gowrishankar <redacted>
---
  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

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help