Changeset: 4379c833cfa4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4379c833cfa4
Modified Files:
        gdk/gdk.h
        gdk/gdk_atoms.c
        gdk/gdk_bat.c
        gdk/gdk_heap.c
        gdk/gdk_storage.c
        monetdb5/mal/mal.h
        monetdb5/modules/mal/mdb.mx
        tools/mserver/mserver5.1
        tools/mserver/mserver5.c
Branch: default
Log Message:

Add heap tracing
Re-used the EXTENDMASK as HEAPMASK to trace solely the behavior
of the heap management.


diffs (282 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2388,8 +2388,8 @@ VALptr(ValPtr v)
 #define OPTMASK                (1<<27)
 #define OPTDEBUG       if (GDKdebug & OPTMASK)
 
-#define EXTENDMASK     (1<<28)
-#define EXTENDDEBUG    if (GDKdebug & EXTENDMASK)
+#define HEAPMASK       (1<<28)
+#define HEAPDEBUG      if (GDKdebug & HEAPMASK)
 
 #define FORCEMITOMASK  (1<<29)
 #define FORCEMITODEBUG if (GDKdebug & FORCEMITOMASK)
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1203,7 +1203,7 @@ strPut(Heap *h, var_t *dst, const char *
                        /* if there is reserved space, first use the reserved 
space */
                        newsize = MIN(newsize, h->maxsize);
                }
-               EXTENDDEBUG fprintf(stderr, "#HEAPextend in strPut %s " SZFMT " 
" SZFMT "\n", h->filename, h->size, newsize);
+               HEAPDEBUG fprintf(stderr, "#HEAPextend in strPut %s " SZFMT " " 
SZFMT "\n", h->filename, h->size, newsize);
                if (HEAPextend(h, newsize) < 0) {
                        return 0;
                }
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -470,12 +470,12 @@ BATextend(BAT *b, BUN newcap)
        b->batCapacity = newcap;
 
        hheap_size *= Hsize(b);
-       if (b->H->heap.base && GDKdebug & EXTENDMASK)
+       if (b->H->heap.base && GDKdebug & HEAPMASK)
                fprintf(stderr, "#HEAPextend in BATextend %s " SZFMT " " SZFMT 
"\n", b->H->heap.filename, b->H->heap.size, hheap_size);
        if (b->H->heap.base && HEAPextend(&b->H->heap, hheap_size) < 0)
                return NULL;
        theap_size *= Tsize(b);
-       if (b->T->heap.base && GDKdebug & EXTENDMASK)
+       if (b->T->heap.base && GDKdebug & HEAPMASK)
                fprintf(stderr, "#HEAPextend in BATextend %s " SZFMT " " SZFMT 
"\n", b->T->heap.filename, b->T->heap.size, theap_size);
        if (b->T->heap.base && HEAPextend(&b->T->heap, theap_size) < 0)
                return NULL;
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -126,7 +126,7 @@ HEAPcacheAdd( void *base, size_t maxsz, 
        }
        if (!added)
                return GDKmunmap(base, maxsz);
-       ALLOCDEBUG fprintf(stderr, "#HEAPcacheAdd (%s) " SZFMT " " PTRFMT " %d 
%d %d\n", fn, maxsz, PTRFMTCAST base, storage, free_file, hc->used);
+       HEAPDEBUG mnstr_printf(GDKerr, "#HEAPcacheAdd (%s) " SZFMT " " PTRFMT " 
%d %d %d\n", fn, maxsz, PTRFMTCAST base, storage, free_file, hc->used);
        return 0;
 }
 
@@ -137,7 +137,7 @@ HEAPcacheFind( size_t *maxsz, char *fn, 
 
        *maxsz = (1 + (*maxsz >> 16)) << 16;    /* round up to 64K */
        if (hc && mode == STORE_MMAP && hc->used < hc->sz) {
-               ALLOCDEBUG fprintf(stderr, "#HEAPcacheFind (%s)" SZFMT " %d 
%d\n", fn, *maxsz, mode, hc->used);
+               HEAPDEBUG mnstr_printf(GDKerr, "#HEAPcacheFind (%s)" SZFMT " %d 
%d\n", fn, *maxsz, mode, hc->used);
                gdk_set_lock(HEAPcacheLock, "HEAPcache_init");
 
                if (hc->used) {
@@ -207,7 +207,7 @@ HEAPcacheFind( size_t *maxsz, char *fn, 
                        return GDKload(fn, NULL, *maxsz, *maxsz, mode);
                }
        } else
-               ALLOCDEBUG fprintf(stderr, "#HEAPcacheFind (%s) re-used\n", fn);
+               HEAPDEBUG mnstr_printf(GDKerr, "#HEAPcacheFind (%s) re-used\n", 
fn);
        return base;
 }
 
@@ -283,7 +283,7 @@ HEAPalloc(Heap *h, size_t nitems, size_t
        if (h->filename == NULL || (h->size < minsize)) {
                h->storage = STORE_MEM;
                h->base = (char *) GDKmallocmax(h->size, &h->maxsize, 0);
-               ALLOCDEBUG fprintf(stderr, "#HEAPalloc " SZFMT " " SZFMT " " 
PTRFMT "%s\n", h->size, h->maxsize, PTRFMTCAST h->base, h->base && ((ssize_t*) 
h->base)[-1] < 0 ? " VM" : "");
+               HEAPDEBUG mnstr_printf(GDKerr, "#HEAPalloc " SZFMT " " SZFMT " 
" PTRFMT "%s\n", h->size, h->maxsize, PTRFMTCAST h->base, h->base && 
((ssize_t*) h->base)[-1] < 0 ? " VM" : "");
        }
        if (h->filename && h->base == NULL) {
                char *of = h->filename;
@@ -345,7 +345,7 @@ HEAPextend(Heap *h, size_t size)
                return 0;
 
        if (h->storage != STORE_MEM) {
-               EXTENDDEBUG fprintf(stderr, "#HEAPextend: extending %s mmapped 
heap\n", h->storage == STORE_MMAP ? "shared" : "privately");
+               HEAPDEBUG mnstr_printf(GDKerr, "#HEAPextend: extending %s 
mmapped heap\n", h->storage == STORE_MMAP ? "shared" : "privately");
                /* memory mapped files extend: save and remap */
                if (HEAPsave_intern(h, nme, ext, ".tmp") < 0)
                        return -1;
@@ -379,9 +379,8 @@ HEAPextend(Heap *h, size_t size)
                if (!must_mmap) {
                        void *p = h->base;
                        h->newstorage = h->storage = STORE_MEM;
-                       EXTENDDEBUG fprintf(stderr, "#HEAPextend: extending 
malloced heap\n");
                        h->base = (char *) GDKreallocmax(h->base, size, 
&h->maxsize, 0);
-                       ALLOCDEBUG fprintf(stderr, "#HEAPextend " SZFMT " " 
SZFMT " " PTRFMT " " PTRFMT "\n", size, h->maxsize, PTRFMTCAST p, PTRFMTCAST 
h->base);
+                       HEAPDEBUG mnstr_printf(GDKerr, "#HEAPextend: extending 
malloced heap " SZFMT " " SZFMT " " PTRFMT " " PTRFMT "\n", size, h->maxsize, 
PTRFMTCAST p, PTRFMTCAST h->base);
                        if (h->base)
                                return 0;
                }
@@ -414,7 +413,7 @@ HEAPextend(Heap *h, size_t size)
                                        h->forcemap = 0;
                                }
                                h->base = NULL;
-                               EXTENDDEBUG fprintf(stderr, "#HEAPextend: 
converting malloced to %s mmapped heap\n", h->newstorage == STORE_MMAP ? 
"shared" : "privately");
+                               HEAPDEBUG mnstr_printf(GDKerr, "#HEAPextend: 
converting malloced to %s mmapped heap\n", h->newstorage == STORE_MMAP ? 
"shared" : "privately");
                                /* try to allocate a memory-mapped based heap */
                                if (HEAPload(h, nme, ext, FALSE) >= 0) {
                                        MT_madvise(h->base, h->size, 
MMAP_SEQUENTIAL);
@@ -561,7 +560,7 @@ HEAPfree_(Heap *h, int free_file)
 {
        if (h->base) {
                if (h->storage == STORE_MEM) {  /* plain memory */
-                       ALLOCDEBUG fprintf(stderr, "#HEAPfree " SZFMT " " SZFMT 
" " PTRFMT "%s\n", h->size, h->maxsize, PTRFMTCAST h->base, h->base && 
((ssize_t*) h->base)[-1] < 0 ? " VM" : "");
+                       HEAPDEBUG mnstr_printf(GDKerr, "#HEAPfree " SZFMT " " 
SZFMT " " PTRFMT "%s\n", h->size, h->maxsize, PTRFMTCAST h->base, h->base && 
((ssize_t*) h->base)[-1] < 0 ? " VM" : "");
                        GDKfree(h->base);
                } else {        /* mapped file, or STORE_PRIV */
                        int ret = HEAPcacheAdd(h->base, h->maxsize, 
h->filename, h->storage, free_file);
@@ -570,7 +569,7 @@ HEAPfree_(Heap *h, int free_file)
                                GDKsyserror("HEAPfree: %s was not mapped\n", 
h->filename);
                                assert(0);
                        }
-                       IODEBUG THRprintf(GDKstdout,
+                       HEAPDEBUG mnstr_printf(GDKerr,
                                          "#munmap(base=" PTRFMT ", size=" 
SZFMT ") = %d\n",
                                          PTRFMTCAST(void *)h->base,
                                          h->maxsize, ret);
@@ -630,7 +629,7 @@ HEAPload_intern(Heap *h, const char *nme
                fp = (FILE *) GDKfilelocate(nme, "mrb+", ext);
                if (fp) {
                        ret = ftruncate(fileno(fp), (off_t) truncsize);
-                       IODEBUG THRprintf(GDKstdout, "#ftruncate(file=%s.%s, 
size=" SZFMT ") = %d\n", nme, ext, truncsize, ret);
+                       HEAPDEBUG mnstr_printf(GDKerr, "#ftruncate(file=%s.%s, 
size=" SZFMT ") = %d\n", nme, ext, truncsize, ret);
                        fclose(fp);
                        if (ret == 0) {
                                h->size = h->maxsize = truncsize;
@@ -639,8 +638,8 @@ HEAPload_intern(Heap *h, const char *nme
                }
        }
 
-       IODEBUG {
-               THRprintf(GDKstdout, "#HEAPload(%s.%s,storage=%d,free=" SZFMT 
",size=" SZFMT ")\n", nme, ext, h->storage, h->free, h->size);
+       HEAPDEBUG {
+               mnstr_printf(GDKerr, "#HEAPload(%s.%s,storage=%d,free=" SZFMT 
",size=" SZFMT ")\n", nme, ext, h->storage, h->free, h->size);
        }
        /* On some OSs (WIN32,Solaris), it is prohibited to write to a
           file that is open in MAP_PRIVATE (FILE_MAP_COPY)
@@ -657,7 +656,7 @@ HEAPload_intern(Heap *h, const char *nme
                if (ret == 0) {
                        t0 = GDKms();
                        ret = unlink(dstpath);
-                       IODEBUG THRprintf(GDKstdout, "#unlink %s = %d 
(%dms)\n", dstpath, ret, GDKms() - t0);
+                       HEAPDEBUG mnstr_printf(GDKerr, "#unlink %s = %d 
(%dms)\n", dstpath, ret, GDKms() - t0);
                }
                t0 = GDKms();
                ret = rename(srcpath, dstpath);
@@ -665,7 +664,7 @@ HEAPload_intern(Heap *h, const char *nme
                        GDKsyserror("HEAPload: rename of %s failed\n", srcpath);
                        return -1;
                }
-               IODEBUG THRprintf(GDKstdout, "#rename %s %s = %d (%dms)\n", 
srcpath, dstpath, ret, GDKms() - t0);
+               HEAPDEBUG mnstr_printf(GDKerr, "#rename %s %s = %d (%dms)\n", 
srcpath, dstpath, ret, GDKms() - t0);
        }
 
        h->base = (char *) GDKload(nme, ext, h->free, h->size, h->newstorage);
@@ -711,8 +710,8 @@ HEAPsave_intern(Heap *h, const char *nme
        } else if (store != STORE_MEM) {
                store = h->storage;
        }
-       IODEBUG {
-               THRprintf(GDKstdout, "#HEAPsave(%s.%s,storage=%d,free=" SZFMT 
",size=" SZFMT ")\n", nme, ext, h->newstorage, h->free, h->size);
+       HEAPDEBUG {
+               mnstr_printf(GDKerr, "#HEAPsave(%s.%s,storage=%d,free=" SZFMT 
",size=" SZFMT ")\n", nme, ext, h->newstorage, h->free, h->size);
        }
        return GDKsave(nme, ext, h->base, h->free, store);
 }
@@ -1021,7 +1020,7 @@ HEAP_malloc(Heap *heap, size_t nbytes)
                   // Double the size of the heap.
                   // TUNE: increase heap by diffent amount.
                 */
-               EXTENDDEBUG fprintf(stderr, "#HEAPextend in HEAP_malloc %s " 
SZFMT " " SZFMT "\n", heap->filename, heap->size, newsize);
+               HEAPDEBUG mnstr_printf(GDKerr, "#HEAPextend in HEAP_malloc %s " 
SZFMT " " SZFMT "\n", heap->filename, heap->size, newsize);
                if (HEAPextend(heap, newsize) < 0)
                        return 0;
                heap->free = newsize;
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -627,11 +627,11 @@ BATload_intern(bat i, int lock)
                        BUN cap = b->batCapacity;
                        if (cap < (b->T->heap.size >> b->T->shift)) {
                                cap = (BUN) (b->T->heap.size >> b->T->shift);
-                               EXTENDDEBUG fprintf(stderr, "#HEAPextend in 
BATload_inter %s " SZFMT " " SZFMT "\n", b->H->heap.filename, b->H->heap.size, 
headsize(b, cap));
+                               HEAPDEBUG fprintf(stderr, "#HEAPextend in 
BATload_inter %s " SZFMT " " SZFMT "\n", b->H->heap.filename, b->H->heap.size, 
headsize(b, cap));
                                HEAPextend(&b->H->heap, headsize(b, cap));
                                b->batCapacity = cap;
                        } else {
-                               EXTENDDEBUG fprintf(stderr, "#HEAPextend in 
BATload_intern %s " SZFMT " " SZFMT "\n", b->T->heap.filename, b->T->heap.size, 
tailsize(b, cap));
+                               HEAPDEBUG fprintf(stderr, "#HEAPextend in 
BATload_intern %s " SZFMT " " SZFMT "\n", b->T->heap.filename, b->T->heap.size, 
tailsize(b, cap));
                                HEAPextend(&b->T->heap, tailsize(b, cap));
                        }
                }
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -71,6 +71,7 @@ mal_export int                memoryclaims;    /* num
 #define GRPmemory (MEMMASK | ALLOCMASK )
 #define GRPproperties (CHECKMASK | PROPMASK | BATMASK )
 #define GRPio (IOMASK | PERFMASK )
+#define GRPheaps (HEAPMASK)
 #define GRPtransactions (TMMASK | DELTAMASK | TEMMASK)
 #define GRPmodules (LOADMASK)
 #define GRPalgorithms (ALGOMASK | ESTIMASK)
diff --git a/monetdb5/modules/mal/mdb.mx b/monetdb5/modules/mal/mdb.mx
--- a/monetdb5/modules/mal/mdb.mx
+++ b/monetdb5/modules/mal/mdb.mx
@@ -438,6 +438,8 @@ MDBsetDebugStr(int *ret, str *flg)
                GDKdebug |= GRPproperties;
        if( strcmp("io",*flg)==0)
                GDKdebug |= GRPio;
+       if( strcmp("heaps",*flg)==0)
+               GDKdebug |= GRPheaps;
        if( strcmp("transactions",*flg)==0)
                GDKdebug |= GRPtransactions;
        if( strcmp("modules",*flg)==0)
diff --git a/tools/mserver/mserver5.1 b/tools/mserver/mserver5.1
--- a/tools/mserver/mserver5.1
+++ b/tools/mserver/mserver5.1
@@ -122,7 +122,7 @@ integer, which value can be (a combinati
                              for debugging (GDK developers, only)
   134217728 = OPTMASK      = trace the actions, decisions and
                              effects of MAL optimizers
-  268435456 = EXTENDMASK   = trace/debug HEAPextend;
+  268435456 = HEAPMASK   = trace/debug HEAPextend;
                              used only for development & debugging
   536870912 = FORCEMITOMASK = forcefully activate mitosis even on
                               small tables, i.e., split small tables
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -95,8 +95,9 @@ usage(char *prog)
        fprintf(stderr,"The debug, testing & trace options:\n");
        fprintf(stderr,"     --threads\n");
        fprintf(stderr,"     --memory\n");
+       fprintf(stderr,"     --io\n");
+       fprintf(stderr,"     --heaps\n");
        fprintf(stderr,"     --properties\n");
-       fprintf(stderr,"     --io\n");
        fprintf(stderr,"     --transactions\n");
        fprintf(stderr,"     --modules\n");
        fprintf(stderr,"     --algorithms\n");
@@ -231,6 +232,7 @@ main(int argc, char **av)
                {"performance",0,0,0},
                {"xproperties",0,0,0},
                {"forcemito",0,0,0},
+               {"heaps",0,0,0},
                {0, 0, 0, 0}
        };
 
@@ -270,7 +272,7 @@ main(int argc, char **av)
        for (;;) {
                int option_index = 0;
 
-               int c = getopt_long(argc, av, "c:d::t:rh?s:m:i:a:e:x",
+               int c = getopt_long(argc, av, "c:d::t:rh?s:m:i:a:e:x:h",
                                    long_options, &option_index);
 
                if (c == -1)
@@ -352,6 +354,10 @@ main(int argc, char **av)
                                grpdebug |= GRPthreads;
                                break;
                        }
+                       if (strcmp(long_options[option_index].name, "heaps") == 
0) {
+                               grpdebug |= GRPheaps;
+                               break;
+                       }
                        usage(prog);
                        /* not reached */
                case 'c':
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to