Changeset: 8b6c63e57ac2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b6c63e57ac2
Modified Files:
gdk/gdk_heap.c
Branch: default
Log Message:
When we have allocated more than GDK_mem_maxsize bytes, start mmapping.
When we get above the limit of how much memory the system has, we
start memory mapping all heaps over 4 times the page size (i.e. a
quarter MB), no matter what the two mmap_minsize parameters say.
Also, always memory map heaps that we are loading when they are at
least 4 times the page size in size, no matter how much memory is in
use, or what the mmap_minsize parameters say. The rationale here is
that malloc+read is tradded off against mmap.
diffs (34 lines):
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,10 @@ 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 < (h->farmid == 0 ?
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient)) {
+ if (h->filename == NULL ||
+ h->size < 4 * GDK_mmap_pagesize ||
+ (GDKmem_cursize() + h->size < GDK_mem_maxsize &&
+ 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);
@@ -204,8 +207,7 @@ HEAPextend(Heap *h, size_t size, int may
/* extend a malloced heap, possibly switching over to
* file-mapped storage */
Heap bak = *h;
- size_t cur = GDKmem_cursize(), tot = GDK_mem_maxsize;
- int exceeds_swap = size > (tot + tot - MIN(tot + tot, cur));
+ int exceeds_swap = size >= 4 * GDK_mmap_pagesize && size +
GDKmem_cursize() >= GDK_mem_maxsize;
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 +623,7 @@ HEAPload_intern(Heap *h, const char *nme
char *srcpath, *dstpath;
int t0;
- h->storage = h->newstorage = h->size < (h->farmid == 0 ?
GDK_mmap_minsize_persistent : GDK_mmap_minsize_transient) ? STORE_MEM :
STORE_MMAP;
+ h->storage = h->newstorage = h->size < 4 * GDK_mmap_pagesize ?
STORE_MEM : STORE_MMAP;
if (h->filename == NULL)
h->filename = (char *) GDKmalloc(strlen(nme) + strlen(ext) + 2);
if (h->filename == NULL)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list