Changeset: b12abff3e942 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b12abff3e942 Modified Files: gdk/shared_memory.c monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh monetdb5/extras/pyapi/pyapi.c monetdb5/extras/pyapi/pyapi.h monetdb5/extras/pyapi/pyapi.mal Branch: pyapi Log Message:
Don't use ftok for generating shared memory keys. diffs (128 lines): diff --git a/gdk/shared_memory.c b/gdk/shared_memory.c --- a/gdk/shared_memory.c +++ b/gdk/shared_memory.c @@ -27,8 +27,10 @@ static int shm_unique_id = 1; static int shm_current_id = 0; static int shm_max_id = 32; static int shm_is_initialized = false; -static char shm_keystring[] = "."; +static char shm_keystring[] = BINDIR; static MT_Lock release_memory_lock; +static key_t base_key = 800000000; + str init_shared_memory(int id, size_t size, void **ptr, int flags); void store_shared_memory(int memory_id, void *ptr); @@ -84,7 +86,6 @@ void store_shared_memory(int memory_id, shm_max_id *= 2; } - shm_memory_ids[shm_current_id] = memory_id; shm_ptrs[shm_current_id] = ptr; shm_current_id++; @@ -110,17 +111,24 @@ str get_shared_memory(int id, size_t siz return init_shared_memory(id, size, return_ptr, 0); } +str ftok_enhanced(int id, key_t *return_key); +str ftok_enhanced(int id, key_t *return_key) +{ + *return_key = base_key + id; + return MAL_SUCCEED; +} + str init_shared_memory(int id, size_t size, void **return_ptr, int flags) { int shmid; void *ptr; int i; - int key = ftok(shm_keystring, id); - if (key == (key_t) -1) + key_t key; + + str msg = ftok_enhanced(id, &key); + if (msg != MAL_SUCCEED) { - char *err = strerror(errno); - errno = 0; - return createException(MAL, "shared_memory.get", "Error calling ftok(keystring:%s,id:%d): %s", shm_keystring, id, err); + return msg; } assert(shm_is_initialized); diff --git a/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh b/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh --- a/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh +++ b/monetdb5/extras/pyapi/Benchmarks/pyapi_test.sh @@ -11,7 +11,7 @@ export MSERVERTEST='netstat -ant | grep # Testing parameters # Input test (zero copy vs copy) # The input sizes to test (in MB) -export INPUT_TESTING_SIZES="0.1 1 10 100 1000" +export INPUT_TESTING_SIZES="10" # Amount of tests to run for each size export INPUT_TESTING_NTESTS=10 @@ -130,6 +130,11 @@ function pyapi_build() { fi } +function pyapi_run_single_test_echo() { + echo \$PYAPI_BUILD_DIR/bin/mserver5 --set mapi_port=\$MSERVER_PORT --set embedded_py=true --set enable_pyverbose=true --set pyapi_benchmark_output=\$PYAPI_OUTPUT_DIR/temp_output.tsv $2 + echo python \$PYAPI_TESTFILE $3 $4 $5 \$MSERVER_PORT $6 +} + function pyapi_run_single_test() { echo "Beginning Test $1" if [ $SETSID -eq 1 ]; then @@ -155,6 +160,7 @@ function pyapi_run_single_test() { return 1 } + function pyapi_test_input() { echo "Beginning Input Testing (Copy vs Zero Copy)" pyapi_run_single_test "Input Testing (Zero Copy)" "" "INPUT" input_zerocopy "$INPUT_TESTING_NTESTS" "$INPUT_TESTING_SIZES" diff --git a/monetdb5/extras/pyapi/pyapi.c b/monetdb5/extras/pyapi/pyapi.c --- a/monetdb5/extras/pyapi/pyapi.c +++ b/monetdb5/extras/pyapi/pyapi.c @@ -618,7 +618,9 @@ str PyAPIeval(MalBlkPtr mb, MalStkPtr st if (descr->bat_size == 0) { msg = createException(MAL, "pyapi.eval", "Failure in child process with unknown error."); } else { + MT_lock_set(&pyapiLock, "pyapi.evaluate"); msg = get_shared_memory(shm_id + 1, descr->bat_size, (void**) &err_ptr); + MT_lock_unset(&pyapiLock, "pyapi.evaluate"); if (msg == MAL_SUCCEED) { msg = createException(MAL, "pyapi.eval", "%s", err_ptr); @@ -1149,7 +1151,6 @@ returnvalues: VERBOSE_MESSAGE("Cleaning up.\n"); - // Actual cleanup // Cleanup input BATs for (i = pci->retc + 2; i < pci->argc; i++) diff --git a/monetdb5/extras/pyapi/pyapi.h b/monetdb5/extras/pyapi/pyapi.h --- a/monetdb5/extras/pyapi/pyapi.h +++ b/monetdb5/extras/pyapi/pyapi.h @@ -26,6 +26,7 @@ #define _PYAPI_WARNINGS_ // Enable debug mode, does literally nothing right now, but hey we have this nice #define here anyway #define _PYAPI_DEBUG_ + #define _PYAPI_TESTING_ #endif #ifdef _PYAPI_VERBOSE_ diff --git a/monetdb5/extras/pyapi/pyapi.mal b/monetdb5/extras/pyapi/pyapi.mal --- a/monetdb5/extras/pyapi/pyapi.mal +++ b/monetdb5/extras/pyapi/pyapi.mal @@ -29,7 +29,6 @@ comment "grouped aggregates through Pyth command prelude() :void address PyAPIprelude; pyapi.prelude(); - # The SQL compiler needs these functions for bat-wise operations module batpyapi; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list