Changeset: 83a9cbbb1939 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=83a9cbbb1939
Added Files:
sql/test/malloc_fail/Tests/mallocs.SQL.py
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.err
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out
Removed Files:
sql/test/malloc_fail/Tests/initialize.sql
sql/test/malloc_fail/Tests/initialize.stable.err
sql/test/malloc_fail/Tests/initialize.stable.out
sql/test/malloc_fail/Tests/setmemorylimit-fail.reqtests
sql/test/malloc_fail/Tests/setmemorylimit-fail.sql
sql/test/malloc_fail/Tests/setmemorylimit-fail.stable.err
sql/test/malloc_fail/Tests/setmemorylimit-fail.stable.out
sql/test/malloc_fail/Tests/setmemorylimit-fail2.reqtests
sql/test/malloc_fail/Tests/setmemorylimit-fail2.sql
sql/test/malloc_fail/Tests/setmemorylimit.reqtests
sql/test/malloc_fail/Tests/setmemorylimit.sql
sql/test/malloc_fail/Tests/setmemorylimit.stable.err
sql/test/malloc_fail/Tests/setmemorylimit.stable.out
Modified Files:
configure.ag
gdk/gdk_system.c
gdk/gdk_utils.c
gdk/gdk_utils.h
monetdb5/mal/Tests/performanceTests/performanceLog
monetdb5/mal/Tests/performanceTests/tst400d.malC
monetdb5/mal/Tests/performanceTests/tst901a.malC
monetdb5/mal/Tests/performanceTests/tst901b.malC
monetdb5/mal/mal.h
monetdb5/mal/mal_builder.c
monetdb5/mal/mal_exception.c
monetdb5/mal/mal_function.c
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_runtime.c
monetdb5/mal/mal_stack.c
monetdb5/modules/mal/mal_io.c
monetdb5/modules/mal/mal_io.h
monetdb5/modules/mal/mal_io.mal
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_reorder.c
sql/backends/monet5/UDF/pyapi/Tests/pyapi_types_string.stable.out
sql/backends/monet5/UDF/pyapi/type_conversion.c
sql/backends/monet5/UDF/pyapi/unicode.c
sql/backends/monet5/UDF/pyapi/unicode.h
sql/backends/monet5/sql_optimizer.c
sql/test/malloc_fail/Tests/All
sql/test/sys-schema/Tests/All
testing/Mtest.py.in
Branch: wlcr
Log Message:
merge with default
diffs (truncated from 2046 to 300 lines):
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2561,6 +2561,7 @@ AC_CHECK_FUNCS([\
asctime_r \
backtrace \
cbrt \
+ clock_gettime \
ctime_r \
fabsf \
fallocate \
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -895,16 +895,34 @@ GDKusec(void)
return (lng) (((ctr.QuadPart - start.QuadPart) * 1000000) /
freq.QuadPart);
}
#endif
+#ifdef HAVE_CLOCK_GETTIME
+#if defined(CLOCK_UPTIME_FAST)
+#define CLK_ID CLOCK_UPTIME_FAST /* FreeBSD */
+#else
+#define CLK_ID CLOCK_MONOTONIC /* Posix (fallback) */
+#endif
+ {
+ static struct timespec tsbase;
+ struct timespec ts;
+ if (tsbase.tv_sec == 0) {
+ clock_gettime(CLK_ID, &tsbase);
+ return tsbase.tv_nsec / 1000;
+ }
+ if (clock_gettime(CLK_ID, &ts) == 0)
+ return (ts.tv_sec - tsbase.tv_sec) * 1000000 +
ts.tv_nsec / 1000;
+ }
+#endif
#ifdef HAVE_GETTIMEOFDAY
{
static struct timeval tpbase; /* automatically initialized to
0 */
struct timeval tp;
- if (tpbase.tv_sec == 0)
+ if (tpbase.tv_sec == 0) {
gettimeofday(&tpbase, NULL);
+ return (lng) tpbase.tv_usec;
+ }
gettimeofday(&tp, NULL);
- tp.tv_sec -= tpbase.tv_sec;
- return (lng) tp.tv_sec * 1000000 + (lng) tp.tv_usec;
+ return (lng) (tp.tv_sec - tpbase.tv_sec) * 1000000 + (lng)
tp.tv_usec;
}
#else
#ifdef HAVE_FTIME
@@ -912,11 +930,12 @@ GDKusec(void)
static struct timeb tbbase; /* automatically initialized to
0 */
struct timeb tb;
- if (tbbase.time == 0)
+ if (tbbase.time == 0) {
ftime(&tbbase);
+ return (lng) tbbase.millitm * 1000;
+ }
ftime(&tb);
- tb.time -= tbbase.time;
- return (lng) tb.time * 1000000 + (lng) tb.millitm * 1000;
+ return (lng) (tb.time - tbbase.time) * 1000000 + (lng)
tb.millitm * 1000;
}
#endif
#endif
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -319,7 +319,7 @@ int GDK_vm_trim = 1;
#include "gdk_atomic.h"
static volatile ATOMIC_TYPE GDK_mallocedbytes_estimate = 0;
#ifndef NDEBUG
-static volatile lng GDK_mallocedbytes_limit = -1;
+static volatile lng GDK_malloc_success_count = -1;
#endif
static volatile ATOMIC_TYPE GDK_vm_cursize = 0;
#ifdef GDK_VM_KEEPHISTO
@@ -1639,12 +1639,17 @@ GDKmalloc_prefixsize(size_t size)
return s;
}
+#ifndef NDEBUG
+static MT_Lock mallocsuccesslock;
+#endif
+
void
-GDKsetmemorylimit(lng nbytes)
+GDKsetmallocsuccesscount(lng count)
{
- (void) nbytes;
+ (void) count;
#ifndef NDEBUG
- GDK_mallocedbytes_limit = nbytes;
+ MT_lock_init(&mallocsuccesslock, "mallocsuccesslock");
+ GDK_malloc_success_count = count;
#endif
}
@@ -1668,10 +1673,15 @@ GDKmallocmax(size_t size, size_t *maxsiz
}
#ifndef NDEBUG
/* fail malloc for testing purposes depending on set limit */
- if (GDK_mallocedbytes_limit >= 0 &&
- size > (size_t) GDK_mallocedbytes_limit) {
+ if (GDK_malloc_success_count > 0) {
+ MT_lock_set(&mallocsuccesslock);
+ if (GDK_malloc_success_count > 0) GDK_malloc_success_count--;
+ MT_lock_unset(&mallocsuccesslock);
+ }
+ if (GDK_malloc_success_count == 0) {
return NULL;
}
+
#endif
size = (size + 7) & ~7; /* round up to a multiple of eight */
s = GDKmalloc_prefixsize(size);
diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h
--- a/gdk/gdk_utils.h
+++ b/gdk/gdk_utils.h
@@ -77,7 +77,7 @@ gdk_export void MT_init(void); /* init
gdk_export int GDKinit(opt *set, int setlen);
/* used for testing only */
-gdk_export void GDKsetmemorylimit(lng nbytes);
+gdk_export void GDKsetmallocsuccesscount(lng count);
/*
* Upon closing the session, all persistent BATs should be saved and
diff --git a/monetdb5/mal/Tests/performanceTests/performanceLog
b/monetdb5/mal/Tests/performanceTests/performanceLog
--- a/monetdb5/mal/Tests/performanceTests/performanceLog
+++ b/monetdb5/mal/Tests/performanceTests/performanceLog
@@ -1218,7 +1218,7 @@ tst901a 1.315/0.651/0.595
tst901b 1.313/1.222/0.016
======================== 20 mar 2013 ===================
Vienna Fedora 18
-Default release
+Default branch
The compilation mode for is --enable-optimize --disable-debug
compilation took ?
command: time mserver5 TST </dev/null >/dev/null
@@ -1233,7 +1233,7 @@ tst901a 0.655/0.409/0.038
tst901b 1.417/1.100/0.038
======================== 12 oct 2014 ===================
Vienna Fedora 20
-Default release
+Default branch
The compilation mode for is --enable-optimize --disable-debug
compilation took ?
command: time mserver5 TST </dev/null >/dev/null
@@ -1248,7 +1248,7 @@ tst901a 0.812/0.750/0.032
tst901b 2.112/2.051/0.038
======================== 23 apr 2015 ===================
Vienna Fedora 20
-Default release
+Default branch
The compilation mode for is --enable-optimize --disable-debug
compilation took ?
command: time mserver5 TST </dev/null >/dev/null
@@ -1261,3 +1261,32 @@ tst400e 1.006/0.986/0.020
tst901a 0.790/0.760/0.030
tst901b 2.053/2.016/0.037
+======================== 6 jan 2017 ===================
+Vienna Fedora 25
+Default branch
+The compilation mode for is --enable-optimize --disable-debug
+command: time mserver5 TST </dev/null >/dev/null
+base 0.280/0.185/0.016
+tst400a 0.295/0.273/0.011
+tst400bHuge 0.324/0.281/0.031
+tst400cHuge 0.276/0.226/0.026
+tst400d 0.647/0.620/0.016
+tst400e 1.097/1.060/0.019
+
+tst901a 0.777/0.736/0.030
+tst901b 1.777/1.744/0.023
+======================== 6 jan 2017 ===================
+Vienna Fedora 25
+Default branch
+After fixing the timing.
+The compilation mode for is --enable-optimize --disable-debug
+command: time mserver5 TST </dev/null >/dev/null
+base 0.220/0.183/0.022
+tst400a 0.298/0.281/0.015
+tst400bHuge 0.323/0.291/0.021
+tst400cHuge 0.225/0.194/0.013
+tst400d 0.651/0.625/0.016
+tst400e 1.074/1.063/0.010
+
+tst901a 0.800/0.776/0.018
+tst901b 1.848/1.812/0.023
diff --git a/monetdb5/mal/Tests/performanceTests/tst400d.malC
b/monetdb5/mal/Tests/performanceTests/tst400d.malC
--- a/monetdb5/mal/Tests/performanceTests/tst400d.malC
+++ b/monetdb5/mal/Tests/performanceTests/tst400d.malC
@@ -1,9 +1,9 @@
# simple iterator loop test
- b:= bat.new(:oid,:int);
-barrier i:= 0:lng;
- z:= bat.append(b,1);
- redo i:= iterator.next(1:lng,1000000:lng);
+ b:= bat.new(:int);
+barrier i:= 0:int;
+ bat.append(b,1);
+ redo i:= iterator.next(1:int,1000000:int);
exit i;
c:= aggr.count(b);
io.print(c);
diff --git a/monetdb5/mal/Tests/performanceTests/tst901a.malC
b/monetdb5/mal/Tests/performanceTests/tst901a.malC
--- a/monetdb5/mal/Tests/performanceTests/tst901a.malC
+++ b/monetdb5/mal/Tests/performanceTests/tst901a.malC
@@ -1,5 +1,5 @@
# what is the overhead of MAL in multiplex situations
-b:= bat.new(:oid,:lng);
+b:= bat.new(:lng);
t0:= alarm.usec();
barrier i:= 0:lng;
o:= calc.oid(i);
diff --git a/monetdb5/mal/Tests/performanceTests/tst901b.malC
b/monetdb5/mal/Tests/performanceTests/tst901b.malC
--- a/monetdb5/mal/Tests/performanceTests/tst901b.malC
+++ b/monetdb5/mal/Tests/performanceTests/tst901b.malC
@@ -1,6 +1,6 @@
# what is the overhead of MAL in multiplex situations
# using a BATloop !! This is 40x slower as the V4.3 multiplex implementation
-b:= bat.new(:oid,:lng);
+b:= bat.new(:lng);
t0:= alarm.usec();
barrier i:= 0:lng;
o:= calc.oid(i);
@@ -10,7 +10,7 @@ exit i;
t1:= alarm.usec();
c:= algebra.copy(b);
t2:= alarm.usec();
-d:= bat.new(:oid,:lng);
+d:= bat.new(:lng);
barrier (h,t):= iterator.new(b);
zz:= algebra.fetch(b,h);
z:= algebra.fetch(c,h);
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -176,7 +176,7 @@ typedef struct {
struct MALBLK *blk; /* resolved MAL function
address */
int mitosis; /* old mtProp value */
/* inline statistics */
- struct timeval clock; /* when the last call was started */
+ lng clock; /* when the last call
was started */
lng ticks; /* total micro seconds
spent in last call */
int calls; /* number of calls made
to this instruction */
lng totticks; /* total time spent on this
instruction. */
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -108,6 +108,10 @@ newComment(MalBlkPtr mb, const char *val
}
cst.len= (int) strlen(cst.val.sval);
getArg(q,0) = defConstant(mb,TYPE_str,&cst);
+ if (getArg(q,0) < 0) {
+ freeInstruction(q);
+ return NULL;
+ }
clrVarConstant(mb,getArg(q,0));
setVarDisabled(mb,getArg(q,0));
if (mb->errors) {
diff --git a/monetdb5/mal/mal_exception.c b/monetdb5/mal/mal_exception.c
--- a/monetdb5/mal/mal_exception.c
+++ b/monetdb5/mal/mal_exception.c
@@ -57,7 +57,10 @@ createExceptionInternal(enum malexceptio
{
char *message;
int len;
-
+ // if there is an error we allow memory allocation once again
+#ifndef NDEBUG
+ GDKsetmallocsuccesscount(-1);
+#endif
message = GDKmalloc(GDKMAXERRLEN);
if (message == NULL)
return M5OutOfMemory; /* last resort */
diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c
--- a/monetdb5/mal/mal_function.c
+++ b/monetdb5/mal/mal_function.c
@@ -34,12 +34,12 @@ Symbol newFunction(str mod, str nme,int
}
p = newInstruction(NULL,mod,nme);
- p->token = kind;
- p->barrier = 0;
if (p == NULL) {
freeSymbol(s);
return NULL;
}
+ p->token = kind;
+ p->barrier = 0;
setDestVar(p, varid);
pushInstruction(s->def,p);
return s;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list