[dpdk-dev] [PATCH] EAL: Take reserved hugepages into account

Burakov, Anatoly anatoly.burakov at intel.com
Wed Apr 16 13:11:12 CEST 2014


Some applications reserve hugepages for later use, but DPDK doesn't take reserved pages into account when calculating number of available number of hugepages. This patch adds reading from "resv_hugepages" file in addition to "free_hugepages".
---
 lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
index ef4cd1d..4ffeda5 100644
--- a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
+++ b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
@@ -66,8 +66,16 @@ static int32_t
 get_num_hugepages(const char *subdir)
 {
 	char path[PATH_MAX];
-	long unsigned num_pages = 0;
+	long unsigned resv_pages, num_pages = 0;
 	const char *nr_hp_file;
+	const char *nr_rsvd_file = "resv_hugepages";
+
+	/* first, check how many reserved pages kernel reports */
+	rte_snprintf(path, sizeof(path), "%s/%s/%s",
+			sys_dir_path, subdir, nr_rsvd_file);
+
+	if (eal_parse_sysfs_value(path, &resv_pages) < 0)
+		return 0;
 
 	/* if secondary process, just look at the number of hugepages,
 	 * otherwise look at number of free hugepages */
@@ -76,6 +84,8 @@ get_num_hugepages(const char *subdir)
 	else
 		nr_hp_file = "free_hugepages";
 
+	memset(path, 0, sizeof(path));
+
 	rte_snprintf(path, sizeof(path), "%s/%s/%s",
 			sys_dir_path, subdir, nr_hp_file);
 
@@ -86,6 +96,10 @@ get_num_hugepages(const char *subdir)
 		RTE_LOG(WARNING, EAL, "No free hugepages reported in %s\n",
 				subdir);
 
+	/* adjust num_pages in case of primary process */
+	if (num_pages > 0 && internal_config.process_type == RTE_PROC_PRIMARY)
+		num_pages -= resv_pages;
+
 	return (int32_t)num_pages;
 }
 
-- 
1.8.1.4



More information about the dev mailing list