From: Burakov, Anatoly Date: Wed, 16 Apr 2014 11:11:12 +0000 (+0000) Subject: mem: take reserved hugepages into account X-Git-Tag: spdx-start~10853 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=0c3977dd156bbc22e2b64aa7f92de643d33e993a;p=dpdk.git mem: take reserved hugepages into account 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". Signed-off-by: Anatoly Burakov Acked-by: Thomas Monjalon --- diff --git a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c index ef4cd1d51a..4ffeda5988 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; }