From 3743329a7e75227b610fe211957be0d5bfadf325 Mon Sep 17 00:00:00 2001 From: Intel Date: Mon, 3 Jun 2013 00:00:00 +0000 Subject: [PATCH] mem: remove RLIMIT_NOFILE update Memory init won't try to increase its RLIMIT_NOFILE limit, this must be done prior to starting it. Signed-off-by: Intel --- lib/librte_eal/linuxapp/eal/eal_memory.c | 75 +++---------------- .../linuxapp/eal/include/eal_hugepages.h | 1 - 2 files changed, 10 insertions(+), 66 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c index e68a3f8958..f04436cf4e 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memory.c +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c @@ -80,7 +80,6 @@ #include #include #include -#include #include #include @@ -144,44 +143,6 @@ aslr_enabled(void) } } -/* - * Increase limit for open files for current process - */ -static int -increase_open_file_limit(void) -{ - struct rlimit limit; - - /* read current limits */ - if (getrlimit(RLIMIT_NOFILE, &limit) != 0) { - RTE_LOG(ERR, EAL, "Error reading resource limit: %s\n", - strerror(errno)); - return -1; - } - - /* check if current soft limit matches the hard limit */ - if (limit.rlim_cur < limit.rlim_max) { - /* set soft limit to match hard limit */ - limit.rlim_cur = limit.rlim_max; - } - else { - /* we can't increase the soft limit so now we try to increase - * soft and hard limit. this might fail when run as non-root. - */ - limit.rlim_cur *= 2; - limit.rlim_max *= 2; - } - - /* set current resource limit */ - if (setrlimit(RLIMIT_NOFILE, &limit) != 0) { - RTE_LOG(ERR, EAL, "Error increasing open files limit: %s\n", - strerror(errno)); - return -1; - } - - return 0; -} - /* * Try to mmap *size bytes in /dev/zero. If it is succesful, return the * pointer to the mmap'd area and keep *size unmodified. Else, retry @@ -315,7 +276,14 @@ map_all_hugepages(struct hugepage *hugepg_tbl, hugepg_tbl[i].final_va = virtaddr; } - /* close the file descriptor, files will be locked later */ + /* set shared flock on the file. */ + if (flock(fd, LOCK_SH | LOCK_NB) == -1) { + RTE_LOG(ERR, EAL, "%s(): Locking file failed:%s \n", + __func__, strerror(errno)); + close(fd); + return -1; + } + close(fd); vma_addr = (char *)vma_addr + hugepage_sz; @@ -569,7 +537,6 @@ unmap_unneeded_hugepages(struct hugepage *hugepg_tbl, { unsigned socket, size; int page, nrpages = 0; - int fd; /* get total number of hugepages */ for (size = 0; size < num_hp_info; size++) @@ -593,31 +560,9 @@ unmap_unneeded_hugepages(struct hugepage *hugepg_tbl, hp->final_va = NULL; } /* lock the page and skip */ - else { - /* try and open the hugepage file */ - while ((fd = open(hp->filepath, O_CREAT | O_RDWR, 0755)) < 0) { - /* if we can't open due to resource limits */ - if (errno == EMFILE) { - RTE_LOG(INFO, EAL, "Increasing open file limit\n"); - - /* if we manage to increase resource limit, try again */ - if (increase_open_file_limit() == 0) - continue; - } - else - RTE_LOG(ERR, EAL, "%s(): open failed: %s\n", __func__, - strerror(errno)); - return -1; - } - /* try and lock the hugepage */ - if (flock(fd, LOCK_SH | LOCK_NB) == -1) { - RTE_LOG(ERR, EAL, "Locking hugepage file failed!\n"); - close(fd); - return -1; - } - hp->page_lock = fd; + else pages_found++; - } + } /* match page */ } /* foreach page */ } /* foreach socket */ diff --git a/lib/librte_eal/linuxapp/eal/include/eal_hugepages.h b/lib/librte_eal/linuxapp/eal/include/eal_hugepages.h index 0a0ca159a1..a9e9eee6d3 100644 --- a/lib/librte_eal/linuxapp/eal/include/eal_hugepages.h +++ b/lib/librte_eal/linuxapp/eal/include/eal_hugepages.h @@ -52,7 +52,6 @@ struct hugepage { int file_id; /**< the '%d' in HUGEFILE_FMT */ int memseg_id; /**< the memory segment to which page belongs */ char filepath[MAX_HUGEPAGE_PATH]; /**< path to backing file on filesystem */ - int page_lock; /**< descriptor for hugepage file */ }; /** -- 2.20.1