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]

Reply via email to