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:
parent
1b987ad95c
commit
298d1162e6
5 changed files with 62 additions and 11 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
31
lib/memory.c
31
lib/memory.c
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue