mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
memory: move initialization of hugepages to hugepage.c
This commit is contained in:
parent
9d6c7ecefa
commit
772003983d
4 changed files with 38 additions and 28 deletions
|
@ -71,6 +71,8 @@ struct memory_allocation {
|
|||
/** Initilialize memory subsystem */
|
||||
int memory_init(int hugepages);
|
||||
|
||||
int memory_lock(size_t lock);
|
||||
|
||||
/** Allocate \p len bytes memory of type \p m.
|
||||
*
|
||||
* @retval NULL If allocation failed.
|
||||
|
|
|
@ -62,7 +62,7 @@ extern struct memory_type memory_hugepage;
|
|||
struct memory_type * memory_ib(struct node *n, struct memory_type *parent);
|
||||
struct memory_type * memory_managed(void *ptr, size_t len);
|
||||
|
||||
int memory_hugepage_init();
|
||||
int memory_hugepage_init(int hugepages);
|
||||
|
||||
struct memory_type * memory_type_lookup(enum memory_type_flags flags);
|
||||
|
||||
|
|
42
lib/memory.c
42
lib/memory.c
|
@ -55,36 +55,25 @@ int memory_init(int hugepages)
|
|||
|
||||
info("Initialize memory sub-system: #hugepages=%d", hugepages);
|
||||
|
||||
/* Initialize hugepage allocator */
|
||||
ret = memory_hugepage_init();
|
||||
ret = memory_hugepage_init(hugepages);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
size_t lock = kernel_get_hugepage_size() * hugepages;
|
||||
|
||||
ret = memory_lock(lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int memory_lock(size_t lock)
|
||||
{
|
||||
#if defined(__linux__) && defined(__x86_64__)
|
||||
int pagecnt, pagesz;
|
||||
int ret;
|
||||
struct rlimit l;
|
||||
|
||||
pagecnt = kernel_get_nr_hugepages();
|
||||
if (pagecnt < hugepages) {
|
||||
if (getuid() == 0) {
|
||||
kernel_set_nr_hugepages(hugepages);
|
||||
debug(LOG_MEM | 2, "Increased number of reserved hugepages from %d to %d", pagecnt, hugepages);
|
||||
}
|
||||
else {
|
||||
warning("Failed to reserved hugepages. Please re-run as super-user or reserve manually via:");
|
||||
warning(" $ echo %d > /proc/sys/vm/nr_hugepages", hugepages);
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
pagesz = kernel_get_hugepage_size();
|
||||
if (pagesz < 0)
|
||||
return -1;
|
||||
|
||||
/* Amount of memory which should be lockable */
|
||||
size_t lock = pagesz * hugepages;
|
||||
|
||||
ret = getrlimit(RLIMIT_MEMLOCK, &l);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -111,6 +100,7 @@ int memory_init(int hugepages)
|
|||
debug(LOG_MEM | 2, "Increased ressource limit of locked memory to %zd bytes", lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -125,13 +115,13 @@ void * memory_alloc_aligned(struct memory_type *m, size_t len, size_t alignment)
|
|||
|
||||
struct memory_allocation *ma = m->alloc(m, len, alignment);
|
||||
if (ma == NULL) {
|
||||
warning("memory_alloc_aligned: allocating memory for memory_allocation failed for memory type %s. Reason: %s", m->name, strerror(errno) );
|
||||
warning("Memory allocation of type %s failed. reason=%s", m->name, strerror(errno) );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = hash_table_insert(&allocations, ma->address, ma);
|
||||
if (ret) {
|
||||
warning("memory_alloc_aligned: Inserting into hash table failed!");
|
||||
warning("Inserting into hash table failed!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
static size_t pgsz = -1;
|
||||
static size_t hugepgsz = -1;
|
||||
|
||||
int memory_hugepage_init()
|
||||
int memory_hugepage_init(int hugepages)
|
||||
{
|
||||
pgsz = kernel_get_page_size();
|
||||
if (pgsz < 0)
|
||||
|
@ -55,6 +55,24 @@ int memory_hugepage_init()
|
|||
if (hugepgsz < 0)
|
||||
return -1;
|
||||
|
||||
#if defined(__linux__) && defined(__x86_64__)
|
||||
int pagecnt;
|
||||
|
||||
pagecnt = kernel_get_nr_hugepages();
|
||||
if (pagecnt < hugepages) {
|
||||
if (getuid() == 0) {
|
||||
kernel_set_nr_hugepages(hugepages);
|
||||
debug(LOG_MEM | 2, "Increased number of reserved hugepages from %d to %d", pagecnt, hugepages);
|
||||
}
|
||||
else {
|
||||
warning("Failed to reserved hugepages. Please re-run as super-user or reserve manually via:");
|
||||
warning(" $ echo %d > /proc/sys/vm/nr_hugepages", hugepages);
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue