From b9886abd868f42694408a8279b5081d3bb4bb23c Mon Sep 17 00:00:00 2001 From: Mukund Sivaraman Date: Wed, 9 May 2018 11:45:12 +0530 Subject: [PATCH 1/3] Reduce number of buckets in tracklines debuglink table With 1044 res contexts, each with 65536 debuglink structs of 16 bytes each, the debuglink table itself was consuming 1GB+ of memory. --- lib/isc/mem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/isc/mem.c b/lib/isc/mem.c index 21b7a0f07a..a5f88c5c8f 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -50,7 +50,7 @@ LIBISC_EXTERNAL_DATA unsigned int isc_mem_defaultflags = ISC_MEMFLAG_DEFAULT; #define ALIGNMENT_SIZE 8U /*%< must be a power of 2 */ #define NUM_BASIC_BLOCKS 64 /*%< must be > 1 */ #define TABLE_INCREMENT 1024 -#define DEBUG_TABLE_COUNT 65536 +#define DEBUG_TABLE_COUNT 512U /* * Types. From 3adcc033f6d36957e4f67a94465aa551e07bda2c Mon Sep 17 00:00:00 2001 From: Mukund Sivaraman Date: Wed, 9 May 2018 11:51:22 +0530 Subject: [PATCH 2/3] Don't keep around debuglist structs when done --- lib/isc/mem.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/lib/isc/mem.c b/lib/isc/mem.c index a5f88c5c8f..ff541d5416 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -395,17 +395,6 @@ add_trace_entry(isc__mem_t *mctx, const void *ptr, size_t size FLARG) { hash = isc_hash_function(&ptr, sizeof(ptr), ISC_TRUE, NULL); idx = hash % DEBUG_TABLE_COUNT; - dl = ISC_LIST_TAIL(mctx->debuglist[idx]); - if (ISC_LIKELY(dl != NULL && dl->ptr == NULL)) { - ISC_LIST_UNLINK(mctx->debuglist[idx], dl, link); - dl->ptr = ptr; - dl->size = size; - dl->file = file; - dl->line = line; - ISC_LIST_PREPEND(mctx->debuglist[idx], dl, link); - return; - } - dl = malloc(sizeof(debuglink_t)); INSIST(dl != NULL); mctx->malloced += sizeof(debuglink_t); @@ -444,14 +433,11 @@ delete_trace_entry(isc__mem_t *mctx, const void *ptr, size_t size, idx = hash % DEBUG_TABLE_COUNT; dl = ISC_LIST_HEAD(mctx->debuglist[idx]); - while (ISC_LIKELY(dl != NULL && dl->ptr != NULL)) { + while (ISC_LIKELY(dl != NULL)) { if (ISC_UNLIKELY(dl->ptr == ptr)) { ISC_LIST_UNLINK(mctx->debuglist[idx], dl, link); - dl->ptr = NULL; - dl->size = 0; - dl->file = NULL; - dl->line = 0; - ISC_LIST_APPEND(mctx->debuglist[idx], dl, link); + mctx->malloced -= sizeof(*dl); + free(dl); return; } dl = ISC_LIST_NEXT(dl, link); From 30e58374a3ca004b4b55b8fa74de475f0aae17d0 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 10 May 2018 12:23:55 +1000 Subject: [PATCH 3/3] add CHANGES note --- CHANGES | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES b/CHANGES index bc907992a2..4075e9b28a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +4943. [bug] Change 4687 consumed too much memory when running + system tests with --with-tuning=large. Reduced the + hash table size to 512 entries for 'named -m record' + restoring the previous memory footprint. [GL #248] + 4942. [cleanup] Consolidate multiple instances of splitting of batchline in dig into a single function. [GL #196]