Changeset: 30efba37da23 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=30efba37da23
Modified Files:
        gdk/gdk_utils.c
Branch: configurable_working_set
Log Message:

Add Windows specific working set configuration.


diffs (36 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -47,6 +47,12 @@ static char THRprintbuf[BUFSIZ];
 #define chdir _chdir
 #endif
 
+#ifdef WIN32
+# 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);
 
@@ -548,7 +554,18 @@ 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(1 << 26, GDK_mem_maxsize);
+                       GDK_mem_maxsize = MAX(MIN_WORKING_SET, 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))
+                       {
+                               printf("Something went wrong while setting the 
limits on the working set: %d\n", GetLastError());
+                               return 1;
+                       }
+#endif
                } else if (strcmp("gdk_vm_maxsize", n[i].name) == 0) {
                        GDK_vm_maxsize = (size_t) strtoll(n[i].value, NULL, 10);
                        GDK_vm_maxsize = MAX(1 << 30, GDK_vm_maxsize);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to