Changeset: d5d9e5fa34b8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d5d9e5fa34b8
Modified Files:
        gdk/gdk_bbp.c
        gdk/gdk_heap.c
        gdk/gdk_posix.c
        gdk/gdk_private.h
        gdk/gdk_utils.c
        tools/mserver/mserver5.c
Branch: default
Log Message:

Use different sizes before switching to MMAP for persistent and transient heaps.
The sizes can be changed using --set: gdk_mmap_minsize_persistent
(default 1<<18) and gdk_mmap_minsize_transient (default 1<<32).


diffs (149 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1309,8 +1309,10 @@ BBPinit(void)
        ATOMIC_INIT(BBPsizeLock);
 #endif
 
-       if (BBPfarms[0].dirname == NULL)
-               BBPaddfarm(".", (1 << PERSISTENT) | (1 << TRANSIENT));
+       if (BBPfarms[0].dirname == NULL) {
+               BBPaddfarm(".", 1 << PERSISTENT);
+               BBPaddfarm(".", 1 << TRANSIENT);
+       }
 
        GDKremovedir(0, DELDIR);
 
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -99,7 +99,7 @@ HEAPalloc(Heap *h, size_t nitems, size_t
                GDKerror("HEAPalloc: allocating more than heap can 
accomodate\n");
                return GDK_FAIL;
        }
-       if (h->filename == NULL || h->size < GDK_mmap_minsize) {
+       if (h->filename == NULL || h->size < (h->farmid == 0 ? 
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient)) {
                h->storage = STORE_MEM;
                h->base = (char *) GDKmallocmax(h->size, &h->size, 0);
                HEAPDEBUG fprintf(stderr, "#HEAPalloc " SZFMT " " PTRFMT "\n", 
h->size, PTRFMTCAST h->base);
@@ -206,7 +206,7 @@ HEAPextend(Heap *h, size_t size, int may
                Heap bak = *h;
                size_t cur = GDKmem_cursize(), tot = GDK_mem_maxsize;
                int exceeds_swap = size > (tot + tot - MIN(tot + tot, cur));
-               int must_mmap = h->filename != NULL && (exceeds_swap || 
h->newstorage != STORE_MEM || size >= GDK_mmap_minsize);
+               int must_mmap = h->filename != NULL && (exceeds_swap || 
h->newstorage != STORE_MEM || size >= (h->farmid == 0 ? 
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient));
 
                h->size = size;
 
@@ -621,7 +621,7 @@ HEAPload_intern(Heap *h, const char *nme
        char *srcpath, *dstpath;
        int t0;
 
-       h->storage = h->newstorage = h->size < GDK_mmap_minsize ? STORE_MEM : 
STORE_MMAP;
+       h->storage = h->newstorage = h->size < (h->farmid == 0 ? 
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient) ? STORE_MEM : 
STORE_MMAP;
        if (h->filename == NULL)
                h->filename = (char *) GDKmalloc(strlen(nme) + strlen(ext) + 2);
        if (h->filename == NULL)
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -557,7 +557,7 @@ MT_mremap(const char *path, int mode, vo
 #else
                                p = MAP_FAILED;
                                if (path == NULL ||
-                                   *new_size <= GDK_mmap_minsize) {
+                                   *new_size <= GDK_mmap_minsize_persistent) {
                                        /* size not too big yet or
                                         * anonymous, try to make new
                                         * anonymous mmap and copy
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -246,7 +246,8 @@ extern struct BBPfarm_t {
 extern int BBP_dirty;  /* BBP table dirty? */
 extern batlock_t GDKbatLock[BBP_BATMASK + 1];
 extern bbplock_t GDKbbpLock[BBP_THREADMASK + 1];
-extern size_t GDK_mmap_minsize;        /* size after which we use memory 
mapped files */
+extern size_t GDK_mmap_minsize_persistent; /* size after which we use memory 
mapped files for persistent heaps */
+extern size_t GDK_mmap_minsize_transient; /* size after which we use memory 
mapped files for transient heaps */
 extern size_t GDK_mmap_pagesize; /* mmap granularity */
 extern MT_Lock GDKnameLock;
 extern MT_Lock GDKthreadLock;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -273,8 +273,12 @@ BATSIGinit(void)
 
 /* memory thresholds; these values some "sane" constants only, really
  * set in GDKinit() */
-size_t GDK_mmap_minsize = (size_t) 1 << 18;
-size_t GDK_mmap_pagesize = (size_t) 1 << 16; /* mmap granularity */
+#define MMAP_MINSIZE_PERSISTENT        ((size_t) 1 << 18)
+#define MMAP_MINSIZE_TRANSIENT ((size_t) 1 << 32)
+#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_pagesize = MMAP_PAGESIZE; /* mmap granularity */
 size_t GDK_mem_maxsize = GDK_VM_MAXSIZE;
 size_t GDK_vm_maxsize = GDK_VM_MAXSIZE;
 
@@ -539,8 +543,10 @@ GDKinit(opt *set, int setlen)
                } else if (strcmp("gdk_vm_maxsize", n[i].name) == 0) {
                        GDK_vm_maxsize = (size_t) strtoll(n[i].value, NULL, 10);
                        GDK_vm_maxsize = MAX(1 << 30, GDK_vm_maxsize);
-               } else if (strcmp("gdk_mmap_minsize", n[i].name) == 0) {
-                       GDK_mmap_minsize = (size_t) strtoll(n[i].value, NULL, 
10);
+               } else if (strcmp("gdk_mmap_minsize_persistent", n[i].name) == 
0) {
+                       GDK_mmap_minsize_persistent = (size_t) 
strtoll(n[i].value, NULL, 10);
+               } else if (strcmp("gdk_mmap_minsize_transient", n[i].name) == 
0) {
+                       GDK_mmap_minsize_transient = (size_t) 
strtoll(n[i].value, NULL, 10);
                } else if (strcmp("gdk_mmap_pagesize", n[i].name) == 0) {
                        GDK_mmap_pagesize = (size_t) strtoll(n[i].value, NULL, 
10);
                        if (GDK_mmap_pagesize < 1 << 12 ||
@@ -588,9 +594,13 @@ GDKinit(opt *set, int setlen)
                snprintf(buf, sizeof(buf), SZFMT, GDK_mem_maxsize);
                GDKsetenv("gdk_mem_maxsize", buf);
        }
-       if (GDKgetenv("gdk_mmap_minsize") == NULL) {
-               snprintf(buf, sizeof(buf), SZFMT, GDK_mmap_minsize);
-               GDKsetenv("gdk_mmap_minsize", buf);
+       if (GDKgetenv("gdk_mmap_minsize_persistent") == NULL) {
+               snprintf(buf, sizeof(buf), SZFMT, GDK_mmap_minsize_persistent);
+               GDKsetenv("gdk_mmap_minsize_persistent", buf);
+       }
+       if (GDKgetenv("gdk_mmap_minsize_transient") == NULL) {
+               snprintf(buf, sizeof(buf), SZFMT, GDK_mmap_minsize_transient);
+               GDKsetenv("gdk_mmap_minsize_transient", buf);
        }
        if (GDKgetenv("gdk_mmap_pagesize") == NULL) {
                snprintf(buf, sizeof(buf), SZFMT, GDK_mmap_pagesize);
@@ -723,8 +733,9 @@ GDKreset(int status)
 #endif
                GDKdebug = 0;
                strcpy(GDKdbpathStr,"dbpath");
-               GDK_mmap_minsize = (size_t) 1 << 18;
-               GDK_mmap_pagesize = (size_t) 1 << 16; 
+               GDK_mmap_minsize_persistent = MMAP_MINSIZE_PERSISTENT;
+               GDK_mmap_minsize_transient = MMAP_MINSIZE_TRANSIENT;
+               GDK_mmap_pagesize = MMAP_PAGESIZE;
                GDK_mem_maxsize = GDK_VM_MAXSIZE;
                GDK_vm_maxsize = GDK_VM_MAXSIZE;
 
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -502,12 +502,8 @@ main(int argc, char **av)
                fprintf(stderr, "!ERROR: cannot create directory for %s\n", 
dbpath);
                exit(1);
        }
-       if (dbextra) {
-               BBPaddfarm(dbpath, 1 << PERSISTENT);
-               BBPaddfarm(dbextra, 1 << TRANSIENT);
-       } else {
-               BBPaddfarm(dbpath, (1 << PERSISTENT) | (1 << TRANSIENT));
-       }
+       BBPaddfarm(dbpath, 1 << PERSISTENT);
+       BBPaddfarm(dbextra ? dbextra : dbpath, 1 << TRANSIENT);
        GDKfree(dbpath);
        if (monet_init(set, setlen) == 0) {
                mo_free_options(set, setlen);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to