From: Anatoly Burakov <anatoly.burakov@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2] eal: add function to return number of detected sockets
Date: Fri, 22 Dec 2017 12:41:01 +0000 [thread overview]
Message-ID: <3cf7f9aa904a5ba53ba63d7c32539e8b78638939.1513946317.git.anatoly.burakov@intel.com> (raw)
In-Reply-To: <3f9df1ca17e97b2df560d5af5fa31a778af3263f.1513942728.git.anatoly.burakov@intel.com>
During lcore scan, find maximum socket ID and store it.
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
Notes:
v2:
- checkpatch changes
- check socket before deciding if the core is not to be used
lib/librte_eal/common/eal_common_lcore.c | 37 +++++++++++++++++++++----------
lib/librte_eal/common/include/rte_eal.h | 1 +
lib/librte_eal/common/include/rte_lcore.h | 8 +++++++
lib/librte_eal/rte_eal_version.map | 6 +++++
4 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c
index 0db1555..c9729a0 100644
--- a/lib/librte_eal/common/eal_common_lcore.c
+++ b/lib/librte_eal/common/eal_common_lcore.c
@@ -57,6 +57,7 @@ rte_eal_cpu_init(void)
struct rte_config *config = rte_eal_get_configuration();
unsigned lcore_id;
unsigned count = 0;
+ unsigned int socket_id, max_socket_id = 0;
/*
* Parse the maximum set of logical cores, detect the subset of running
@@ -68,6 +69,19 @@ rte_eal_cpu_init(void)
/* init cpuset for per lcore config */
CPU_ZERO(&lcore_config[lcore_id].cpuset);
+ /* find socket first */
+ socket_id = eal_cpu_socket_id(lcore_id);
+ if (socket_id >= RTE_MAX_NUMA_NODES) {
+#ifdef RTE_EAL_ALLOW_INV_SOCKET_ID
+ socket_id = 0;
+#else
+ RTE_LOG(ERR, EAL, "Socket ID (%u) is greater than RTE_MAX_NUMA_NODES (%d)\n",
+ socket_id, RTE_MAX_NUMA_NODES);
+ return -1;
+#endif
+ }
+ max_socket_id = RTE_MAX(max_socket_id, socket_id);
+
/* in 1:1 mapping, record related cpu detected state */
lcore_config[lcore_id].detected = eal_cpu_detected(lcore_id);
if (lcore_config[lcore_id].detected == 0) {
@@ -83,18 +97,7 @@ rte_eal_cpu_init(void)
config->lcore_role[lcore_id] = ROLE_RTE;
lcore_config[lcore_id].core_role = ROLE_RTE;
lcore_config[lcore_id].core_id = eal_cpu_core_id(lcore_id);
- lcore_config[lcore_id].socket_id = eal_cpu_socket_id(lcore_id);
- if (lcore_config[lcore_id].socket_id >= RTE_MAX_NUMA_NODES) {
-#ifdef RTE_EAL_ALLOW_INV_SOCKET_ID
- lcore_config[lcore_id].socket_id = 0;
-#else
- RTE_LOG(ERR, EAL, "Socket ID (%u) is greater than "
- "RTE_MAX_NUMA_NODES (%d)\n",
- lcore_config[lcore_id].socket_id,
- RTE_MAX_NUMA_NODES);
- return -1;
-#endif
- }
+ lcore_config[lcore_id].socket_id = socket_id;
RTE_LOG(DEBUG, EAL, "Detected lcore %u as "
"core %u on socket %u\n",
lcore_id, lcore_config[lcore_id].core_id,
@@ -108,5 +111,15 @@ rte_eal_cpu_init(void)
RTE_MAX_LCORE);
RTE_LOG(INFO, EAL, "Detected %u lcore(s)\n", config->lcore_count);
+ config->numa_node_count = max_socket_id + 1;
+ RTE_LOG(INFO, EAL, "Detected %u NUMA nodes\n", config->numa_node_count);
+
return 0;
}
+
+unsigned int
+rte_num_sockets(void)
+{
+ const struct rte_config *config = rte_eal_get_configuration();
+ return config->numa_node_count;
+}
diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h
index 8e4e71c..5b12914 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -83,6 +83,7 @@ enum rte_proc_type_t {
struct rte_config {
uint32_t master_lcore; /**< Id of the master lcore */
uint32_t lcore_count; /**< Number of available logical cores. */
+ uint32_t numa_node_count; /**< Number of detected NUMA nodes. */
uint32_t service_lcore_count;/**< Number of available service cores. */
enum rte_lcore_role_t lcore_role[RTE_MAX_LCORE]; /**< State of cores. */
diff --git a/lib/librte_eal/common/include/rte_lcore.h b/lib/librte_eal/common/include/rte_lcore.h
index c89e6ba..7c72c9e 100644
--- a/lib/librte_eal/common/include/rte_lcore.h
+++ b/lib/librte_eal/common/include/rte_lcore.h
@@ -148,6 +148,14 @@ rte_lcore_index(int lcore_id)
unsigned rte_socket_id(void);
/**
+ * Return number of physical sockets on the system.
+ * @return
+ * the number of physical sockets as recognized by EAL
+ *
+ */
+unsigned int rte_num_sockets(void);
+
+/**
* Get the ID of the physical socket of the specified lcore
*
* @param lcore_id
diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map
index f4f46c1..e086c6e 100644
--- a/lib/librte_eal/rte_eal_version.map
+++ b/lib/librte_eal/rte_eal_version.map
@@ -200,6 +200,12 @@ DPDK_17.11 {
} DPDK_17.08;
+DPDK_18.02 {
+ global:
+
+ rte_num_sockets;
+} DPDK_17.11;
+
EXPERIMENTAL {
global:
--
2.7.4
next prev parent reply other threads:[~2017-12-22 12:41 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-22 11:58 [dpdk-dev] [PATCH] " Anatoly Burakov
2017-12-22 12:41 ` Anatoly Burakov [this message]
2018-01-11 22:20 ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2018-01-12 11:44 ` Burakov, Anatoly
2018-01-12 11:50 ` Thomas Monjalon
2018-01-16 11:56 ` Burakov, Anatoly
2018-01-16 12:20 ` Thomas Monjalon
2018-01-16 15:05 ` Burakov, Anatoly
2018-01-16 17:34 ` Thomas Monjalon
2018-01-16 17:38 ` Burakov, Anatoly
2018-01-16 18:26 ` Thomas Monjalon
2018-01-16 17:53 ` [dpdk-dev] [PATCH] doc: add ABI change notice for numa_node_count in eal Anatoly Burakov
2018-01-23 10:39 ` Mcnamara, John
2018-02-07 10:10 ` Jerin Jacob
2018-02-09 14:42 ` Bruce Richardson
2018-02-14 0:04 ` Thomas Monjalon
2018-02-14 14:25 ` Thomas Monjalon
2018-02-12 16:00 ` Jonas Pfefferle
[not found] ` <cover.1517848624.git.anatoly.burakov@intel.com>
2018-02-05 16:37 ` [dpdk-dev] [PATCH v3] eal: add function to return number of detected sockets Anatoly Burakov
2018-02-05 17:39 ` Burakov, Anatoly
2018-02-05 22:45 ` Thomas Monjalon
2018-02-06 9:28 ` Burakov, Anatoly
2018-02-06 9:47 ` Thomas Monjalon
2018-02-07 9:58 ` [dpdk-dev] [PATCH 18.05 v4] Add " Anatoly Burakov
2018-02-07 9:58 ` [dpdk-dev] [PATCH 18.05 v4] eal: add " Anatoly Burakov
2018-03-08 12:12 ` Bruce Richardson
2018-03-08 14:38 ` Burakov, Anatoly
2018-03-09 16:32 ` Bruce Richardson
2018-03-20 22:43 ` Thomas Monjalon
2018-03-21 4:59 ` gowrishankar muthukrishnan
2018-03-21 10:24 ` Burakov, Anatoly
2018-03-22 5:16 ` gowrishankar muthukrishnan
2018-03-22 9:04 ` Burakov, Anatoly
2018-03-22 10:58 ` [dpdk-dev] [PATCH v5] eal: provide API for querying valid socket id's Anatoly Burakov
2018-03-22 11:45 ` Burakov, Anatoly
2018-03-22 12:36 ` [dpdk-dev] [PATCH v6] " Anatoly Burakov
2018-03-22 17:07 ` gowrishankar muthukrishnan
2018-03-27 16:24 ` Thomas Monjalon
2018-03-31 13:35 ` Burakov, Anatoly
2018-04-02 15:27 ` Thomas Monjalon
2018-03-31 17:08 ` [dpdk-dev] [PATCH v7] " Anatoly Burakov
2018-04-04 22:31 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3cf7f9aa904a5ba53ba63d7c32539e8b78638939.1513946317.git.anatoly.burakov@intel.com \
--to=anatoly.burakov@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).