Changeset: 7cd552bd86b0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7cd552bd86b0
Modified Files:
gdk/gdk_heap.c
gdk/gdk_private.h
gdk/gdk_utils.c
Branch: default
Log Message:
Added --set option gdk_mmap_minsize_temporary.
Use it to set the size where heaps in the --dbtemp farm start getting
memory mapped. Default is the value of gdk_mmap_minsize_transient.
diffs (101 lines):
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -164,7 +164,11 @@ HEAPalloc(Heap *h, size_t nitems, size_t
size_t allocated;
if (GDKinmemory(h->farmid) ||
((allocated = GDKmem_cursize()) + h->size < GDK_mem_maxsize &&
- h->size < (h->role == PERSISTENT ? GDK_mmap_minsize_persistent :
GDK_mmap_minsize_transient) &&
+ h->size < (h->role == PERSISTENT
+ ? GDK_mmap_minsize_persistent
+ : (h->role == TEMPFARM
+ ? GDK_mmap_minsize_temporary
+ : GDK_mmap_minsize_transient)) &&
h->size < ((GDK_mem_maxsize - allocated) >> 6))) {
h->storage = STORE_MEM;
size = h->size;
@@ -307,7 +311,11 @@ HEAPextend(Heap *h, size_t size)
size_t allocated;
bool must_mmap = (!GDKinmemory(h->farmid) &&
((allocated = GDKmem_cursize()) + size >=
GDK_mem_maxsize ||
- size >= (h->role == PERSISTENT ?
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient) ||
+ size >= (h->role == PERSISTENT
+ ? GDK_mmap_minsize_persistent
+ : (h->role == TEMPFARM
+ ? GDK_mmap_minsize_temporary
+ : GDK_mmap_minsize_transient))
||
size >= ((GDK_mem_maxsize - allocated) >>
6)));
h->size = size;
@@ -706,7 +714,9 @@ HEAPload(Heap *h, const char *nme, const
size_t allocated;
h->storage = h->size < (h->role == PERSISTENT
? GDK_mmap_minsize_persistent
- : GDK_mmap_minsize_transient) &&
+ : (h->role == TEMPFARM
+ ? GDK_mmap_minsize_temporary
+ : GDK_mmap_minsize_transient)) &&
(allocated = GDKmem_cursize()) < GDK_mem_maxsize &&
h->size < ((GDK_mem_maxsize - allocated) >> 6) ?
STORE_MEM : STORE_MMAP;
}
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -439,6 +439,7 @@ extern struct BBPfarm_t {
extern batlock_t GDKbatLock[BBP_BATMASK + 1] ATTR_VISIBILITY_HIDDEN;
extern size_t GDK_mmap_minsize_persistent ATTR_VISIBILITY_HIDDEN; /* size
after which we use memory mapped files for persistent heaps */
extern size_t GDK_mmap_minsize_transient ATTR_VISIBILITY_HIDDEN; /* size after
which we use memory mapped files for transient heaps */
+extern size_t GDK_mmap_minsize_temporary ATTR_VISIBILITY_HIDDEN; /* size after
which we use memory mapped files for temporary heaps */
extern size_t GDK_mmap_pagesize ATTR_VISIBILITY_HIDDEN; /* mmap granularity */
#define BATcheck(tst, err) \
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -430,6 +430,7 @@ BATSIGinit(void)
#define MMAP_PAGESIZE ((size_t) 1 << 16)
size_t GDK_mmap_minsize_persistent = MMAP_MINSIZE_PERSISTENT;
size_t GDK_mmap_minsize_transient = MMAP_MINSIZE_TRANSIENT;
+size_t GDK_mmap_minsize_temporary = MMAP_MINSIZE_TRANSIENT;
size_t GDK_mmap_pagesize = MMAP_PAGESIZE; /* mmap granularity */
size_t GDK_mem_maxsize = GDK_VM_MAXSIZE;
size_t GDK_vm_maxsize = GDK_VM_MAXSIZE;
@@ -1142,6 +1143,16 @@ GDKinit(opt *set, int setlen, bool embed
return GDK_FAIL;
}
}
+ GDK_mmap_minsize_temporary = GDK_mmap_minsize_transient;
+ p = mo_find_option(set, setlen, "gdk_mmap_minsize_temporary");
+ if (p) {
+ char *e;
+ GDK_mmap_minsize_temporary = (size_t) strtoll(p, &e, 10);
+ if (e && *e) {
+ TRC_CRITICAL(GDK, "gdk_mmap_minsize_temporary must be
an integer");
+ return GDK_FAIL;
+ }
+ }
p = mo_find_option(set, setlen, "gdk_mmap_pagesize");
if (p) {
char *e;
@@ -1278,6 +1289,13 @@ GDKinit(opt *set, int setlen, bool embed
return GDK_FAIL;
}
}
+ if (GDKgetenv("gdk_mmap_minsize_temporary") == NULL) {
+ snprintf(buf, sizeof(buf), "%zu", GDK_mmap_minsize_temporary);
+ if (GDKsetenv("gdk_mmap_minsize_temporary", buf) !=
GDK_SUCCEED) {
+ TRC_CRITICAL(GDK, "GDKsetenv gdk_mmap_minsize_temporary
failed");
+ return GDK_FAIL;
+ }
+ }
if (GDKgetenv("gdk_mmap_pagesize") == NULL) {
snprintf(buf, sizeof(buf), "%zu", GDK_mmap_pagesize);
if (GDKsetenv("gdk_mmap_pagesize", buf) != GDK_SUCCEED) {
@@ -1411,6 +1429,7 @@ GDKreset(int status)
if (GDK_mmap_minsize_persistent >
GDK_mmap_minsize_transient)
GDK_mmap_minsize_persistent =
GDK_mmap_minsize_transient;
}
+ GDK_mmap_minsize_temporary = GDK_mmap_minsize_transient;
GDKnr_threads = 0;
GDKL3_size = 0;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]