From 6cd37713781a3092f8166b2178fae35cbfec1e28 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Wed, 8 Sep 2021 11:29:49 +0200 Subject: Multipage allocation We can also quite simply allocate bigger blocks. Anyway, we need these blocks to be aligned to their size which needs one mmap() two times bigger and then two munmap()s returning the unaligned parts. The user can specify -B on startup when is the exponent of 2, setting the block size to 2^N. On most systems, N is 12, anyway if you know that your configuration is going to eat gigabytes of RAM, you are almost forced to raise your block size as you may easily get into memory fragmentation issues or you have to raise your maximum mapping count, e.g. "sysctl vm.max_map_count=(number)". --- lib/resource.c | 2 -- lib/slab.c | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/resource.c b/lib/resource.c index 0ad886d9..e80b315b 100644 --- a/lib/resource.c +++ b/lib/resource.c @@ -61,7 +61,6 @@ pool root_pool; void *alloc_sys_page(void); void free_sys_page(void *); -void resource_sys_init(void); static int indent; @@ -283,7 +282,6 @@ rlookup(unsigned long a) void resource_init(void) { - resource_sys_init(); root_pool.r.class = &pool_class; root_pool.name = "Root"; init_list(&root_pool.inside); diff --git a/lib/slab.c b/lib/slab.c index 2fc88ee0..6348e29b 100644 --- a/lib/slab.c +++ b/lib/slab.c @@ -178,7 +178,7 @@ struct sl_alignment { /* Magic structure for testing of alignment */ int x[0]; }; -#define SL_GET_HEAD(x) ((struct sl_head *) (((uintptr_t) (x)) & ~(page_size-1))) +#define SL_GET_HEAD(x) ((struct sl_head *) PAGE_HEAD(x)) /** * sl_new - create a new Slab -- cgit v1.2.3