1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

increase limit of locked memory automatically during initlialization

This commit is contained in:
Steffen Vogel 2017-04-02 00:14:17 +02:00
parent 1b987ad95c
commit 298d1162e6
5 changed files with 62 additions and 11 deletions

View file

@ -78,8 +78,6 @@ packages:
coverage:
stage: test
before_script:
- ulimit -l 1073741824
script:
- make coverage COVERAGE=1
artifacts:
@ -96,8 +94,6 @@ unit:
stage: test
dependencies:
- build
before_script:
- ulimit -l 1073741824
script:
- make run-unit-tests
image: $DOCKER_REGISTRY/villas-dev
@ -108,8 +104,6 @@ integration:
stage: test
dependencies:
- build
before_script:
- ulimit -l 1073741824
- make install
script:
- make run-integration-tests

View file

@ -62,6 +62,12 @@ int kernel_module_set_param(const char *module, const char *param, const char *v
/** Get cacheline size in bytes */
int kernel_get_cacheline_size();
/** Get the size of a standard page in bytes. */
int kernel_get_page_size();
/** Get the size of a huge page in bytes. */
int kernel_get_hugepage_size();
/** Set SMP affinity of IRQ */
int kernel_irq_setaffinity(unsigned irq, uintmax_t new, uintmax_t *old);

View file

@ -145,6 +145,34 @@ int kernel_get_cacheline_size()
return sysconf(_SC_LEVEL1_ICACHE_LINESIZE);
}
int kernel_get_page_size()
{
return sysconf(_SC_PAGESIZE);
}
/* There is no sysconf interface to get the hugepage size */
int kernel_get_hugepage_size()
{
char *key, *value, *unit, *line = NULL;
size_t len = 0;
FILE *f;
f = fopen(PROCFS_PATH "/meminfo", "r");
if (!f)
return -1;
while (getline(&line, &len, f) != -1) {
key = strtok(line, ": ");
value = strtok(NULL, " ");
unit = strtok(NULL, "\n");
if (!strcmp(key, "Hugepagesize") && !strcmp(unit, "kB"))
return strtoul(value, NULL, 10) * 1024;
}
return -1;
}
int kernel_get_nr_hugepages()
{
FILE *f;

View file

@ -6,6 +6,8 @@
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <sys/resource.h>
/* Required to allocate hugepages on Apple OS X */
#ifdef __MACH__
@ -21,13 +23,34 @@
int memory_init(int hugepages)
{
#ifdef __linux__
int ret, pagecnt, pagesz;
struct rlimit l;
info("Initialize memory sub-system");
int nr = kernel_get_nr_hugepages();
if (nr < hugepages) { INDENT
pagecnt = kernel_get_nr_hugepages();
if (pagecnt < hugepages) { INDENT
kernel_set_nr_hugepages(hugepages);
debug(LOG_MEM | 2, "Reserved %d hugepages (was %d)", hugepages, nr);
debug(LOG_MEM | 2, "Reserved %d hugepages (was %d)", hugepages, pagecnt);
}
pagesz = kernel_get_hugepage_size();
if (pagesz < 0)
return -1;
ret = getrlimit(RLIMIT_MEMLOCK, &l);
if (ret)
return ret;
if (l.rlim_cur < pagesz * pagecnt) {
l.rlim_cur = pagesz * pagecnt;
l.rlim_max = l.rlim_cur;
ret = setrlimit(RLIMIT_MEMLOCK, &l);
if (ret)
return ret;
debug(LOG_MEM | 2, "Increased ressource limit of locked memory to %d bytes", pagesz * pagecnt);
}
#endif
return 0;

View file

@ -24,7 +24,7 @@ deploy-rpm:
# Docker targets
run-docker-dev:
docker run -it -p 80:80 -p 443:443 -p 1234:1234 --privileged --cap-add sys_nic --ulimit memlock=1073741824 --security-opt seccomp:unconfined -v $(PWD):/villas villas-dev
docker run -it -p 80:80 -p 443:443 -p 1234:1234 --privileged --cap-add sys_nic --security-opt seccomp:unconfined -v $(PWD):/villas villas-dev
docker-dev:
docker build -f Dockerfile.dev -t villas-dev $(SRCDIR)