Changeset: 2c3127fd4002 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2c3127fd4002
Modified Files:
gdk/gdk_utils.c
Branch: Nov2019
Log Message:
Merge with Apr2019 branch.
diffs (111 lines):
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -402,39 +402,76 @@ MT_init(void)
# error "don't know how to get the amount of physical memory for your OS"
#endif
-#ifndef WIN32
+#ifdef __linux__
/* limit values to whatever cgroups gives us */
- FILE *f;
- /* limit of memory usage */
- f = fopen("/sys/fs/cgroup/memory/memory.limit_in_bytes", "r");
- if (f != NULL) {
- uint64_t mem;
- if (fscanf(f, "%" SCNu64, &mem) == 1
- && mem < (uint64_t) _MT_pagesize * _MT_npages) {
- _MT_npages = (size_t) (mem / _MT_pagesize);
+ FILE *fc;
+ fc = fopen("/proc/self/cgroup", "r");
+ if (fc != NULL) {
+ char buf[1024];
+ while (fgets(buf, (int) sizeof(buf), fc) != NULL) {
+ char *p, *q;
+ p = strchr(buf, ':');
+ if (p == NULL)
+ break;
+ q = p + 1;
+ p = strchr(q, ':');
+ if (p == NULL)
+ break;
+ *p++ = 0;
+ if (strstr(q, "memory") != NULL) {
+ char pth[1024];
+ FILE *f;
+ q = strchr(p, '\n');
+ if (q == NULL)
+ break;
+ *q = 0;
+ q = stpconcat(pth, "/sys/fs/cgroup/memory",
+ p, NULL);
+ /* sometimes the path in
+ * /proc/self/cgroup ends in "/" (or
+ * actually, is "/"); in all other
+ * cases add one */
+ if (q[-1] != '/')
+ *q++ = '/';
+ /* limit of memory usage */
+ strcpy(q, "memory.limit_in_bytes");
+ f = fopen(pth, "r");
+ if (f != NULL) {
+ uint64_t mem;
+ if (fscanf(f, "%" SCNu64, &mem) == 1
+ && mem < (uint64_t) _MT_pagesize *
_MT_npages) {
+ _MT_npages = (size_t) (mem /
_MT_pagesize);
+ }
+ fclose(f);
+ }
+ /* soft limit of memory usage */
+ strcpy(q, "memory.soft_limit_in_bytes");
+ f = fopen(pth, "r");
+ if (f != NULL) {
+ uint64_t mem;
+ if (fscanf(f, "%" SCNu64, &mem) == 1
+ && mem < (uint64_t) _MT_pagesize *
_MT_npages) {
+ _MT_npages = (size_t) (mem /
_MT_pagesize);
+ }
+ fclose(f);
+ }
+ /* limit of memory+swap usage
+ * we use this as maximum virtual memory size */
+ strcpy(q, "memory.memsw.limit_in_bytes");
+ f = fopen(pth, "r");
+ if (f != NULL) {
+ uint64_t mem;
+ if (fscanf(f, "%" SCNu64, &mem) == 1
+ && mem < (uint64_t) GDK_vm_maxsize)
{
+ GDK_vm_maxsize = (size_t) mem;
+ }
+ fclose(f);
+ }
+ break;
+
+ }
}
- fclose(f);
- }
- /* soft limit of memory usage */
- f = fopen("/sys/fs/cgroup/memory/memory.soft_limit_in_bytes", "r");
- if (f != NULL) {
- uint64_t mem;
- if (fscanf(f, "%" SCNu64, &mem) == 1
- && mem < (uint64_t) _MT_pagesize * _MT_npages) {
- _MT_npages = (size_t) (mem / _MT_pagesize);
- }
- fclose(f);
- }
- /* limit of memory+swap usage
- * we use this as maximum virtual memory size */
- f = fopen("/sys/fs/cgroup/memory/memory.memsw.limit_in_bytes", "r");
- if (f != NULL) {
- uint64_t mem;
- if (fscanf(f, "%" SCNu64, &mem) == 1
- && mem < (uint64_t) GDK_vm_maxsize) {
- GDK_vm_maxsize = (size_t) mem;
- }
- fclose(f);
+ fclose(fc);
}
#endif
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list