@cryptotaxi247 / netdata-1 / commits / e7d7b4eca

Add an option to use malloc for page cache instead of mmap (#13142)

Add an option to switch to using malloc for page cache instead of mmap

Stelios Fragkakis committed Jun 15, 2022 at 19:41 UTC e7d7b4ecae6f2c06a7940c00a5a9701c25b33be3
4 files changed +14 -3
daemon/main.c
+1
@@ -584,6 +584,7 @@ static void get_netdata_configured_variables() {
584 // ------------------------------------------------------------------------
585 // get default Database Engine page cache size in MiB
586
587 + db_engine_use_malloc = config_get_boolean(CONFIG_SECTION_GLOBAL, "page cache uses malloc", CONFIG_BOOLEAN_NO);
588 default_rrdeng_page_cache_mb = (int) config_get_number(CONFIG_SECTION_GLOBAL, "page cache size", default_rrdeng_page_cache_mb);
589 if(default_rrdeng_page_cache_mb < RRDENG_MIN_PAGE_CACHE_SIZE_MB) {
590 error("Invalid page cache size %d given. Defaulting to %d.", default_rrdeng_page_cache_mb, RRDENG_MIN_PAGE_CACHE_SIZE_MB);
database/engine/rrdengine.c
+11 -3
@@ -16,13 +16,21 @@ static unsigned pages_per_extent = MAX_PAGES_PER_EXTENT;
16 #endif
17
18 void *dbengine_page_alloc() {
19 - void *page = netdata_mmap(NULL, RRDENG_BLOCK_SIZE, MAP_PRIVATE, enable_ksm);
20 - if(!page) fatal("Cannot allocate dbengine page cache page, with mmap()");
19 + void *page = NULL;
20 + if (unlikely(db_engine_use_malloc))
21 + page = mallocz(RRDENG_BLOCK_SIZE);
22 + else {
23 + page = netdata_mmap(NULL, RRDENG_BLOCK_SIZE, MAP_PRIVATE, enable_ksm);
24 + if(!page) fatal("Cannot allocate dbengine page cache page, with mmap()");
25 + }
26 return page;
27 }
28
29 void dbengine_page_free(void *page) {
25 - munmap(page, RRDENG_BLOCK_SIZE);
30 + if (unlikely(db_engine_use_malloc))
31 + freez(page);
32 + else
33 + munmap(page, RRDENG_BLOCK_SIZE);
34 }
35
36 static void sanity_check(void)
database/engine/rrdengineapi.c
+1
@@ -4,6 +4,7 @@
4 /* Default global database instance */
5 struct rrdengine_instance multidb_ctx;
6
7 +int db_engine_use_malloc = 0;
8 int default_rrdeng_page_cache_mb = 32;
9 int default_rrdeng_disk_quota_mb = 256;
10 int default_multidb_disk_quota_mb = 256;
database/engine/rrdengineapi.h
+1
@@ -12,6 +12,7 @@
12
13 #define RRDENG_FD_BUDGET_PER_INSTANCE (50)
14
15 +extern int db_engine_use_malloc;
16 extern int default_rrdeng_page_cache_mb;
17 extern int default_rrdeng_disk_quota_mb;
18 extern int default_multidb_disk_quota_mb;