Changeset: ae03b3295b7d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ae03b3295b7d Added Files: sql/backends/monet5/config_rss/Makefile.ag sql/backends/monet5/config_rss/test_rss.c sql/backends/monet5/config_rss/test_rss.mal Removed Files: sql/test/configurable_rss/Tests/cap_rss_32.py.src sql/test/configurable_rss/Tests/cap_rss_32.stable.err sql/test/configurable_rss/Tests/cap_rss_32.stable.out sql/test/configurable_rss/Tests/cap_rss_64.py.src sql/test/configurable_rss/Tests/cap_rss_64.stable.err sql/test/configurable_rss/Tests/cap_rss_64.stable.out sql/test/configurable_rss/Tests/no_cap_rss_32.py.src sql/test/configurable_rss/Tests/no_cap_rss_32.stable.err sql/test/configurable_rss/Tests/no_cap_rss_32.stable.out sql/test/configurable_rss/Tests/no_cap_rss_64.py.src sql/test/configurable_rss/Tests/no_cap_rss_64.stable.err sql/test/configurable_rss/Tests/no_cap_rss_64.stable.out Modified Files: sql/backends/monet5/Makefile.ag sql/test/configurable_rss/Tests/All sql/test/configurable_rss/Tests/rss.py Branch: config_rss Log Message:
Use custom c code to test configurable rss. diffs (truncated from 639 to 300 lines): diff --git a/sql/backends/monet5/Makefile.ag b/sql/backends/monet5/Makefile.ag --- a/sql/backends/monet5/Makefile.ag +++ b/sql/backends/monet5/Makefile.ag @@ -4,7 +4,7 @@ # # Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. -SUBDIRS = NOT_WIN32?vaults UDF generator +SUBDIRS = NOT_WIN32?vaults UDF generator HAVE_TESTING&WIN32?config_rss INCLUDES = ../../include ../../common ../../storage ../../server \ ../../../monetdb5/modules/atoms \ diff --git a/sql/backends/monet5/config_rss/Makefile.ag b/sql/backends/monet5/config_rss/Makefile.ag new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/config_rss/Makefile.ag @@ -0,0 +1,25 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. + +INCLUDES = ../../../include \ + ../../../common \ + ../../../../monetdb5/mal \ + ../../../../monetdb5/modules/mal + +lib__test_rss = { + MODULE + CONDINST = HAVE_TESTING WIN32 + DIR = libdir/monetdb5 + SOURCES = test_rss.c + LIBS = WIN32?../../../../monetdb5/tools/libmonetdb5 \ + WIN32?../../../../gdk/libbat +} + +headers_mal = { + HEADERS = mal + DIR = libdir/monetdb5 + SOURCES = test_rss.mal +} diff --git a/sql/backends/monet5/config_rss/test_rss.c b/sql/backends/monet5/config_rss/test_rss.c new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/config_rss/test_rss.c @@ -0,0 +1,64 @@ +#include<stdio.h> +#include<stdlib.h> + +#include<Psapi.h> +#include<Windows.h> + +#include<mal.h> +#include<mal_exception.h> + +#define MB(x) ((SIZE_T) (x) << 20) +#define GB(x) ((SIZE_T) (x) << 30) + +#define ALLOC_CHUNK_SIZE (MB(10)) +#define MIN_WORKING_SET MB(100) +#define MAX_WORKING_SET MB(200) +#define MAX_VIRTUAL_MEMORY MB(400) + +#define TEST_FILE "test_file" + +mal_export str TESTrestricted_rss(lng* GDK_mem_maxsize /*in bytes*/) +{ + // We are going to try to allocate twice the maximum configured rss bound. + size_t rss_bound = (size_t) *GDK_mem_maxsize, to_be_allocated = 2 * rss_bound, allocated = 0; + + // A test file is going to be (re)created in the current directory. + FILE* const pfile = fopen(TEST_FILE, "w"); + + char* committedMemory = NULL; + + while(allocated < to_be_allocated) + { + if(!(committedMemory = (char*) malloc(ALLOC_CHUNK_SIZE))) + { + break; + } + + // Write something to newly committed memory. + for (int i = 0; i < ALLOC_CHUNK_SIZE - 1; i++) + { + committedMemory[i] = rand()%26+'a'; + } + committedMemory[ALLOC_CHUNK_SIZE] = '\0'; + + // Perform some I/O to make sure the OS is actually doing something with these dirty pages. + + fputs(committedMemory, pfile); + + // Query process memory counters from OS. + PROCESS_MEMORY_COUNTERS_EX psmemCounters; + GetProcessMemoryInfo(GetCurrentProcess(), &psmemCounters, sizeof(PROCESS_MEMORY_COUNTERS_EX)); + + printf("Working Set:\t%lld MB\t", psmemCounters.WorkingSetSize >> 20); + printf("Total Memory:\t%lld MB\n", psmemCounters.PrivateUsage >> 20); + + if (psmemCounters.WorkingSetSize > rss_bound) { + fclose(pfile); + throw(MAL, "test_config_rss.run_test_config_rss", "physical memory allocation violates configured working set size limit" ); + } + } + + fclose(pfile); + + return MAL_SUCCEED; +} diff --git a/sql/backends/monet5/config_rss/test_rss.mal b/sql/backends/monet5/config_rss/test_rss.mal new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/config_rss/test_rss.mal @@ -0,0 +1,5 @@ +module test_config_rss; + +command run_test_config_rss(GDK_mem_maxsize:lng):void +address TESTrestricted_rss +comment "C code will allocate memory and test whether the configured rss limit is violated."; diff --git a/sql/test/configurable_rss/Tests/All b/sql/test/configurable_rss/Tests/All --- a/sql/test/configurable_rss/Tests/All +++ b/sql/test/configurable_rss/Tests/All @@ -1,4 +1,1 @@ -BITS64&NATIVE_WIN32?cap_rss_64 -BITS64&NATIVE_WIN32?no_cap_rss_64 -BITS32&NATIVE_WIN32?cap_rss_32 -BITS32&NATIVE_WIN32?no_cap_rss_32 +NATIVE_WIN32?rss diff --git a/sql/test/configurable_rss/Tests/cap_rss_32.py.src b/sql/test/configurable_rss/Tests/cap_rss_32.py.src deleted file mode 100644 --- a/sql/test/configurable_rss/Tests/cap_rss_32.py.src +++ /dev/null @@ -1,1 +0,0 @@ -$RELSRCDIR/rss.py diff --git a/sql/test/configurable_rss/Tests/cap_rss_32.stable.err b/sql/test/configurable_rss/Tests/cap_rss_32.stable.err deleted file mode 100644 --- a/sql/test/configurable_rss/Tests/cap_rss_32.stable.err +++ /dev/null @@ -1,31 +0,0 @@ -stderr of test 'cap_rss_64` in directory 'sql/test/configurable_rss` itself: - - -# 16:57:17 > -# 16:57:17 > "C:\Python27\python.exe" "cap_rss_64.py" "cap_rss_64" -# 16:57:17 > - -#mserver: "--set gdk_mem_maxsize=20000000" -#client: "..\..\..\..\..\Sources\monetdb\sql\test\configurable_rss\Tests\push_and_check_rss.sql" -# builtin opt gdk_dbpath = C:\Users\aris\monetdb-installation\var\monetdb5\dbfarm\demo -# builtin opt gdk_debug = 0 -# builtin opt gdk_vmtrim = no -# builtin opt monet_prompt = > -# builtin opt monet_daemon = no -# builtin opt mapi_port = 50000 -# builtin opt mapi_open = false -# builtin opt mapi_autosense = false -# builtin opt sql_optimizer = default_pipe -# builtin opt sql_debug = 0 -# cmdline opt gdk_nr_threads = 0 -# cmdline opt mapi_open = true -# cmdline opt mapi_port = 32503 -# cmdline opt monet_prompt = -# cmdline opt gdk_dbpath = C:\Users\aris\monetdb-installation\var\MonetDB\mTests_sql_test_configurable_rss -# cmdline opt gdk_mem_maxsize = 20000000 -# cmdline opt gdk_debug = 553648138 - -# 16:57:24 > -# 16:57:24 > "Done." -# 16:57:24 > - diff --git a/sql/test/configurable_rss/Tests/cap_rss_32.stable.out b/sql/test/configurable_rss/Tests/cap_rss_32.stable.out deleted file mode 100644 --- a/sql/test/configurable_rss/Tests/cap_rss_32.stable.out +++ /dev/null @@ -1,79 +0,0 @@ -stdout of test 'cap_rss_64` in directory 'sql/test/configurable_rss` itself: - - -# 16:57:17 > -# 16:57:17 > "C:\Python27\python.exe" "cap_rss_64.py" "cap_rss_64" -# 16:57:17 > - -#create function getrss() -#returns bigint external name status.rss_cursize; -#create table test(a int, b int, c double); -#insert into test values (1, 0, 1); -[ 1 ] -#create procedure loop_insert(maximum_size bigint) -#begin -# declare size bigint; -# set size = (select count(*) from test); -# -# while size < maximum_size do -# insert into test (select a+1, b+2, rand()*c from test); -# -# set size = (select count(*) from test); -# end while; -#end; -#select getrss() < 25000 as resident_set_size_is_less_then_25kbytes, quantile(c/a, 0.8) * 0 from test; -% .L2, sys.L6 # table_name -% resident_set_size_is_less_then_25000_kb, L6 # name -% boolean, double # type -% 5, 24 # length -[ true, 0 ] -#drop table test cascade; -#drop function getrss; -# MonetDB 5 server v11.29.4 -# This is an unreleased version -# Serving database 'mTests_sql_test_configurable_rss', using 2 threads -# Compiled for x86_64-pc-winnt/64bit -# Found 8.000 GiB available main-memory. -# Copyright (c) 1993 - July 2008 CWI. -# Copyright (c) August 2008 - 2018 MonetDB B.V., all rights reserved -# Visit https://www.monetdb.org/ for further information -# Listening for connection requests on mapi:monetdb://DESKTOP-J5OE0E3:32503/ -# MonetDB/GIS module loaded -# MonetDB/SQL module loaded -# SQL catalog created, loading sql scripts once -# loading sql script: 09_like.sql -# loading sql script: 10_math.sql -# loading sql script: 11_times.sql -# loading sql script: 12_url.sql -# loading sql script: 13_date.sql -# loading sql script: 14_inet.sql -# loading sql script: 15_querylog.sql -# loading sql script: 16_tracelog.sql -# loading sql script: 17_temporal.sql -# loading sql script: 18_index.sql -# loading sql script: 20_vacuum.sql -# loading sql script: 21_dependency_functions.sql -# loading sql script: 21_dependency_views.sql -# loading sql script: 22_clients.sql -# loading sql script: 23_skyserver.sql -# loading sql script: 25_debug.sql -# loading sql script: 26_sysmon.sql -# loading sql script: 27_rejects.sql -# loading sql script: 39_analytics.sql -# loading sql script: 40_geom.sql -# loading sql script: 40_json.sql -# loading sql script: 41_md5sum.sql -# loading sql script: 45_uuid.sql -# loading sql script: 46_profiler.sql -# loading sql script: 51_sys_schema_extension.sql -# loading sql script: 60_wlcr.sql -# loading sql script: 75_storagemodel.sql -# loading sql script: 80_statistics.sql -# loading sql script: 80_udf.sql -# loading sql script: 90_generator.sql -# loading sql script: 99_system.sql - -# 16:57:24 > -# 16:57:24 > "Done." -# 16:57:24 > - diff --git a/sql/test/configurable_rss/Tests/cap_rss_64.py.src b/sql/test/configurable_rss/Tests/cap_rss_64.py.src deleted file mode 100644 --- a/sql/test/configurable_rss/Tests/cap_rss_64.py.src +++ /dev/null @@ -1,1 +0,0 @@ -$RELSRCDIR/rss.py diff --git a/sql/test/configurable_rss/Tests/cap_rss_64.stable.err b/sql/test/configurable_rss/Tests/cap_rss_64.stable.err deleted file mode 100644 --- a/sql/test/configurable_rss/Tests/cap_rss_64.stable.err +++ /dev/null @@ -1,31 +0,0 @@ -stderr of test 'cap_rss_64` in directory 'sql/test/configurable_rss` itself: - - -# 16:57:17 > -# 16:57:17 > "C:\Python27\python.exe" "cap_rss_64.py" "cap_rss_64" -# 16:57:17 > - -#mserver: "--set gdk_mem_maxsize=20000000" -#client: "..\..\..\..\..\Sources\monetdb\sql\test\configurable_rss\Tests\push_and_check_rss.sql" -# builtin opt gdk_dbpath = C:\Users\aris\monetdb-installation\var\monetdb5\dbfarm\demo -# builtin opt gdk_debug = 0 -# builtin opt gdk_vmtrim = no -# builtin opt monet_prompt = > -# builtin opt monet_daemon = no -# builtin opt mapi_port = 50000 -# builtin opt mapi_open = false -# builtin opt mapi_autosense = false -# builtin opt sql_optimizer = default_pipe -# builtin opt sql_debug = 0 -# cmdline opt gdk_nr_threads = 0 -# cmdline opt mapi_open = true -# cmdline opt mapi_port = 32503 -# cmdline opt monet_prompt = -# cmdline opt gdk_dbpath = C:\Users\aris\monetdb-installation\var\MonetDB\mTests_sql_test_configurable_rss -# cmdline opt gdk_mem_maxsize = 20000000 -# cmdline opt gdk_debug = 553648138 - -# 16:57:24 > -# 16:57:24 > "Done." -# 16:57:24 > - diff --git a/sql/test/configurable_rss/Tests/cap_rss_64.stable.out b/sql/test/configurable_rss/Tests/cap_rss_64.stable.out deleted file mode 100644 _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list