From: Anatoly Burakov <anatoly.burakov@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v3] eal: add function to return number of detected sockets
Date: Mon, 5 Feb 2018 16:37:58 +0000 [thread overview]
Message-ID: <750e30c6dcc7a22a87df9c56fb824042b1db984f.1517848624.git.anatoly.burakov@intel.com> (raw)
In-Reply-To: <cover.1517848624.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:
v3:
- Added ABI backwards compatibility
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 | 25 +++++++++++++++++++++
lib/librte_eal/common/include/rte_lcore.h | 8 +++++++
lib/librte_eal/linuxapp/eal/eal.c | 27 +++++++++++++++++++++-
lib/librte_eal/rte_eal_version.map | 9 +++++++-
5 files changed, 92 insertions(+), 14 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c
index 7724fa4..827ddeb 100644
--- a/lib/librte_eal/common/eal_common_lcore.c
+++ b/lib/librte_eal/common/eal_common_lcore.c
@@ -28,6 +28,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
@@ -39,6 +40,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) {
@@ -54,18 +68,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,
@@ -79,5 +82,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 08c6637..bbf54e2 100644
--- a/lib/librte_eal/common/include/rte_eal.h
+++ b/lib/librte_eal/common/include/rte_eal.h
@@ -57,6 +57,29 @@ 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. */
+
+ /** Primary or secondary configuration */
+ enum rte_proc_type_t process_type;
+
+ /** PA or VA mapping mode */
+ enum rte_iova_mode iova_mode;
+
+ /**
+ * Pointer to memory configuration, which may be shared across multiple
+ * DPDK instances
+ */
+ struct rte_mem_config *mem_config;
+} __attribute__((__packed__));
+
+/**
+ * The global RTE configuration structure - 18.02 ABI version.
+ */
+struct rte_config_v1802 {
+ uint32_t master_lcore; /**< Id of the master lcore */
+ uint32_t lcore_count; /**< Number of available logical cores. */
uint32_t service_lcore_count;/**< Number of available service cores. */
enum rte_lcore_role_t lcore_role[RTE_MAX_LCORE]; /**< State of cores. */
@@ -80,6 +103,8 @@ struct rte_config {
* A pointer to the global configuration structure.
*/
struct rte_config *rte_eal_get_configuration(void);
+struct rte_config_v1802 *rte_eal_get_configuration_v1802(void);
+struct rte_config *rte_eal_get_configuration_v1805(void);
/**
* Get a lcore's role.
diff --git a/lib/librte_eal/common/include/rte_lcore.h b/lib/librte_eal/common/include/rte_lcore.h
index d84bcff..ddf4c64 100644
--- a/lib/librte_eal/common/include/rte_lcore.h
+++ b/lib/librte_eal/common/include/rte_lcore.h
@@ -120,6 +120,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/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 451fdaf..757f404 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -67,6 +67,9 @@ static rte_usage_hook_t rte_application_usage_hook = NULL;
/* early configuration structure, when memory config is not mmapped */
static struct rte_mem_config early_mem_config;
+/* compatibility structure to return to old ABI calls */
+static struct rte_config_v1802 v1802_config;
+
/* define fd variable here, because file needs to be kept open for the
* duration of the program, as we hold a write lock on it in the primary proc */
static int mem_cfg_fd = -1;
@@ -103,11 +106,33 @@ rte_eal_mbuf_default_mempool_ops(void)
}
/* Return a pointer to the configuration structure */
+struct rte_config_v1802 *
+rte_eal_get_configuration_v1802(void)
+{
+ /* copy everything to old config so that it's up to date */
+ v1802_config.iova_mode = rte_config.iova_mode;
+ v1802_config.lcore_count = rte_config.lcore_count;
+ memcpy(v1802_config.lcore_role, rte_config.lcore_role,
+ sizeof(rte_config.lcore_role));
+ v1802_config.master_lcore = rte_config.master_lcore;
+ v1802_config.mem_config = rte_config.mem_config;
+ v1802_config.process_type = rte_config.process_type;
+ v1802_config.service_lcore_count = rte_config.service_lcore_count;
+
+ return &v1802_config;
+}
+VERSION_SYMBOL(rte_eal_get_configuration, _v1802, 18.02);
+
+/* Return a pointer to the configuration structure */
struct rte_config *
-rte_eal_get_configuration(void)
+rte_eal_get_configuration_v1805(void)
{
return &rte_config;
}
+VERSION_SYMBOL(rte_eal_get_configuration, _v1805, 18.05);
+BIND_DEFAULT_SYMBOL(rte_eal_get_configuration, _v1805, 18.05);
+MAP_STATIC_SYMBOL(struct rte_config *rte_eal_get_configuration(void),
+ rte_eal_get_configuration_v1805);
enum rte_iova_mode
rte_eal_iova_mode(void)
diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map
index 4146907..fc83e74 100644
--- a/lib/librte_eal/rte_eal_version.map
+++ b/lib/librte_eal/rte_eal_version.map
@@ -211,6 +211,13 @@ DPDK_18.02 {
} DPDK_17.11;
+DPDK_18.05 {
+ global:
+
+ rte_num_sockets;
+
+} DPDK_18.02;
+
EXPERIMENTAL {
global:
@@ -255,4 +262,4 @@ EXPERIMENTAL {
rte_service_set_stats_enable;
rte_service_start_with_defaults;
-} DPDK_18.02;
+} DPDK_18.05;
--
2.7.4
next prev parent reply other threads:[~2018-02-05 16:38 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 ` [dpdk-dev] [PATCH v2] " Anatoly Burakov
2018-01-11 22:20 ` 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 ` Anatoly Burakov [this message]
2018-02-05 17:39 ` [dpdk-dev] [PATCH v3] eal: add function to return number of detected sockets 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=750e30c6dcc7a22a87df9c56fb824042b1db984f.1517848624.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).