Changeset: e2a346a9df13 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e2a346a9df13
Added Files:
        gdk/Tests/caprss.py
        gdk/Tests/prologue.mal
        gdk/Tests/push_and_check_rss.sql
Removed Files:
        gdk/Tests/caprss.prologue5
        gdk/Tests/caprss.sql
Modified Files:
        gdk/gdk_utils.c
Branch: configurable_working_set
Log Message:

Implementation seems to be working on Windows as output of test suggests.


diffs (113 lines):

diff --git a/gdk/Tests/caprss.py b/gdk/Tests/caprss.py
new file mode 100644
--- /dev/null
+++ b/gdk/Tests/caprss.py
@@ -0,0 +1,39 @@
+import os, sys
+try:
+    from MonetDBtesting import process
+except ImportError:
+    import process
+
+def server_start(args):
+    sys.stderr.write('#mserver: "%s"\n' % ' '.join(args))
+    sys.stderr.flush()
+    srv = process.server(args = args, stdin = process.PIPE,
+                         stdout = process.PIPE, stderr = process.PIPE)
+    return srv
+
+def client(lang, file):
+    sys.stderr.write('#client: "%s"\n' % file)
+    sys.stderr.flush()
+    clt = process.client(lang.lower(), stdin = open(file),
+                         stdout = process.PIPE, stderr = process.PIPE)
+    return clt.communicate()
+
+def main():
+    srv = server_start(["--set", "gdk_mem_maxsize=70000000"])
+
+    out, err = client('MAL',
+                      os.path.join(os.getenv('RELSRCDIR'),
+                                   'prologue.mal'))
+    sys.stdout.write(out)
+    sys.stderr.write(err)
+
+    out, err = client('SQL',
+                      os.path.join(os.getenv('RELSRCDIR'),
+                                   'push_and_check_rss.sql'))
+    sys.stdout.write(out)
+    sys.stderr.write(err)
+    out, err = srv.communicate()
+    sys.stdout.write(out)
+    sys.stderr.write(err)
+
+main()
diff --git a/gdk/Tests/caprss.prologue5 b/gdk/Tests/prologue.mal
rename from gdk/Tests/caprss.prologue5
rename to gdk/Tests/prologue.mal
diff --git a/gdk/Tests/caprss.sql b/gdk/Tests/push_and_check_rss.sql
rename from gdk/Tests/caprss.sql
rename to gdk/Tests/push_and_check_rss.sql
--- a/gdk/Tests/caprss.sql
+++ b/gdk/Tests/push_and_check_rss.sql
@@ -8,22 +8,21 @@ create table test(a int, b int, c double
 
 insert into test VALUES (1, 0, 1);
 
-select getrss() as resident_set_size, getvm() as virtual_memory_size;
-
-create procedure loop_insert(n bigint)
+create procedure loop_insert(maximum_size bigint)
 BEGIN
-    declare run BIGINT;
-    set run = (select count(*) from test);
+    declare size BIGINT;
+    set size = (select count(*) from test);
 
-    WHILE run < n DO
+    WHILE size < maximum_size DO
         insert into test (select a+1, b+2, rand()*c from test);
 
-        set run = (select count(*) from test);
+        set size = (select count(*) from test);
     END WHILE;
 END;
 
 call loop_insert(10000000);
 
-select count(*) from test;
+-- It seems that it requires an analytical query to keep memory in RAM.
+select count(*) as record_count from test;
 
 select getrss() as resident_set_size, getvm() as virtual_memory_size;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -51,8 +51,6 @@ static char THRprintbuf[BUFSIZ];
 # include <Windows.h>
 #endif
 
-#define MIN_WORKING_SET 1 << 26  // Minimum memory working/resident set size
-
 static volatile ATOMIC_FLAG GDKstopped = ATOMIC_FLAG_INIT;
 static void GDKunlockHome(int farmid);
 
@@ -554,15 +552,14 @@ GDKinit(opt *set, int setlen)
        for (i = 0; i < nlen; i++) {
                if (strcmp("gdk_mem_maxsize", n[i].name) == 0) {
                        GDK_mem_maxsize = (size_t) strtoll(n[i].value, NULL, 
10);
-                       GDK_mem_maxsize = MAX(MIN_WORKING_SET, GDK_mem_maxsize);
+                       GDK_mem_maxsize = MAX(1 << 26, GDK_mem_maxsize);
 #ifdef WIN32 // On windows we can use a system call to limit the maximum 
working set size.
                        const HANDLE process = GetCurrentProcess();
 
-                       printf("MonetDb says Hello, world!\"\n\n");
-
-                       if (!SetProcessWorkingSetSizeEx(process, 
MIN_WORKING_SET, GDK_mem_maxsize, QUOTA_LIMITS_HARDWS_MAX_ENABLE))
+                       if (!SetProcessWorkingSetSizeEx(process, 1, 
GDK_mem_maxsize, QUOTA_LIMITS_HARDWS_MAX_ENABLE))
                        {
                                printf("Something went wrong while setting the 
limits on the working set: %d\n", GetLastError());
+
                                return 1;
                        }
 #endif
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to