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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list