diff --git a/include/villas/cfg.h b/include/villas/cfg.h index d8b940ad4..05df454aa 100644 --- a/include/villas/cfg.h +++ b/include/villas/cfg.h @@ -22,6 +22,7 @@ struct cfg { int priority; /**< Process priority (lower is better) */ int affinity; /**< Process affinity of the server and all created threads */ + int hugepages; /**< Number of hugepages to reserve. */ double stats; /**< Interval for path statistics. Set to 0 to disable them. */ struct list nodes; diff --git a/include/villas/memory.h b/include/villas/memory.h index a13e1c477..0715df4a6 100644 --- a/include/villas/memory.h +++ b/include/villas/memory.h @@ -42,7 +42,7 @@ struct memzone { }; /** Initilialize memory subsystem */ -int memory_init(); +int memory_init(int hugepages); /** Allocate \p len bytes memory of type \p m. * diff --git a/lib/memory.c b/lib/memory.c index be2e90c30..ead4f6265 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -16,17 +16,18 @@ #include "log.h" #include "memory.h" +#include "utils.h" -int memory_init() +int memory_init(int hugepages) { #ifdef __linux__ info("Initialize memory sub-system"); int nr = kernel_get_nr_hugepages(); - if (nr < DEFAULT_NR_HUGEPAGES) { INDENT - kernel_set_nr_hugepages(DEFAULT_NR_HUGEPAGES); - debug(LOG_MEM | 2, "Reserve %d hugepages (was %d)", DEFAULT_NR_HUGEPAGES, nr); + if (nr < hugepages) { INDENT + kernel_set_nr_hugepages(hugepages); + debug(LOG_MEM | 2, "Reserved %d hugepages (was %d)", hugepages, nr); } #endif return 0; diff --git a/src/fpga.c b/src/fpga.c index 50a7b19ba..9218f6c25 100644 --- a/src/fpga.c +++ b/src/fpga.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -70,7 +71,7 @@ int main(int argc, char *argv[]) rt_init(cfg.priority, cfg.affinity); info("Initialize memory system"); - memory_init(); + memory_init(cfg.hugepages); /* Initialize VILLASfpga card */ ret = fpga_init(argc, argv, config_root_setting(&cfg.cfg)); diff --git a/src/hook.c b/src/hook.c index e941ab613..dfb7decdc 100644 --- a/src/hook.c +++ b/src/hook.c @@ -99,7 +99,7 @@ int main(int argc, char *argv[]) rt_init(-1, 50); info("Initialize memory system"); - memory_init(); + memory_init(DEFAULT_NR_HUGEPAGES); ret = pool_init(&pool, 10 * cnt, SAMPLE_LEN(DEFAULT_VALUES), &memtype_hugepage); if (ret) diff --git a/src/pipe.c b/src/pipe.c index e08734c96..090859fda 100644 --- a/src/pipe.c +++ b/src/pipe.c @@ -205,7 +205,7 @@ int main(int argc, char *argv[]) signals_init(quit); cfg_parse(&cfg, argv[1]); rt_init(cfg.priority, cfg.affinity); - memory_init(); + memory_init(cfg.hugepages); /* Initialize node */ node = list_lookup(&cfg.nodes, argv[2]); diff --git a/src/test.c b/src/test.c index 30c3a9f97..ea5220451 100644 --- a/src/test.c +++ b/src/test.c @@ -72,7 +72,7 @@ int main(int argc, char *argv[]) cfg_parse(&cfg, argv[1]); signals_init(quit); rt_init(cfg.priority, cfg.affinity); - memory_init(); + memory_init(cfg.hugepages); node = list_lookup(&cfg.nodes, argv[3]); if (!node) diff --git a/tests/main.c b/tests/main.c index fd5039240..42cfe9f82 100644 --- a/tests/main.c +++ b/tests/main.c @@ -17,7 +17,7 @@ int main(int argc, char *argv[]) { struct log log; log_init(&log, V, LOG_ALL); - memory_init(); + memory_init(DEFAULT_NR_HUGEPAGES); int result = 0; if (criterion_handle_args(argc, argv, true))