aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib/src/mem.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2007-09-28 15:49:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2007-09-28 15:49:00 +0000
commit92de5e28bea38e22c0bb69acafa440fb0ff76ad8 (patch)
tree18119ab155ee408e9160eccc0a757f2ddf845566 /Carpet/CarpetLib/src/mem.cc
parent4ff785680bea6a8509b9f12fd6d1aa1c480b0d76 (diff)
CarpetLib: Enforce memory limit via operating system
Enforce memory limit by calling setrlimit for RLIMIT_AS. darcs-hash:20070928154922-dae7b-2b3436bfe35452de19b9765279c1bb81997f9497.gz
Diffstat (limited to 'Carpet/CarpetLib/src/mem.cc')
-rw-r--r--Carpet/CarpetLib/src/mem.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/Carpet/CarpetLib/src/mem.cc b/Carpet/CarpetLib/src/mem.cc
index 8a6260c9a..65d4f5e98 100644
--- a/Carpet/CarpetLib/src/mem.cc
+++ b/Carpet/CarpetLib/src/mem.cc
@@ -16,6 +16,9 @@
# include <malloc.h>
#endif
+#include <sys/resource.h>
+#include <sys/time.h>
+
#include "defs.hh"
#include "dist.hh"
@@ -202,6 +205,43 @@ alloc (size_t nbytes)
+extern "C" void CarpetLib_setmemlimit (CCTK_ARGUMENTS);
+
+void CarpetLib_setmemlimit (CCTK_ARGUMENTS)
+{
+ DECLARE_CCTK_ARGUMENTS;
+ DECLARE_CCTK_PARAMETERS;
+
+ // Set address space limit
+ struct rlimit aslimit;
+ {
+ int const ierr = getrlimit (RLIMIT_AS, & aslimit);
+ assert (not ierr);
+ }
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Old address space size limit: hard=%lld, soft=%lld",
+ (long long) aslimit.rlim_max, (long long) aslimit.rlim_cur);
+ if (max_allowed_memory_MB > 0) {
+ aslimit.rlim_cur = max_allowed_memory_MB * 1000000LL;
+ }
+ {
+ int const ierr = setrlimit (RLIMIT_AS, & aslimit);
+ assert (not ierr);
+ }
+ {
+ int const ierr = getrlimit (RLIMIT_AS, & aslimit);
+ assert (not ierr);
+ }
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Old address space size limit: hard=%lld, soft=%lld",
+ (long long) aslimit.rlim_max, (long long) aslimit.rlim_cur);
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "Unlimited address space size indicated by %lld",
+ (long long) RLIM_INFINITY);
+}
+
+
+
extern "C" void CarpetLib_printmemstats (CCTK_ARGUMENTS);
void CarpetLib_printmemstats (CCTK_ARGUMENTS)