aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/vespa/vespalib/util/resource_limits.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vespalib/src/vespa/vespalib/util/resource_limits.cpp')
-rw-r--r--vespalib/src/vespa/vespalib/util/resource_limits.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/vespalib/src/vespa/vespalib/util/resource_limits.cpp b/vespalib/src/vespa/vespalib/util/resource_limits.cpp
new file mode 100644
index 00000000000..85c479a67b6
--- /dev/null
+++ b/vespalib/src/vespa/vespalib/util/resource_limits.cpp
@@ -0,0 +1,33 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "resource_limits.h"
+#include "cgroup_resource_limits.h"
+#include <unistd.h>
+#include <thread>
+
+namespace vespalib {
+
+ResourceLimits::ResourceLimits(uint64_t memory, uint32_t cpu)
+ : _memory(memory),
+ _cpu(cpu)
+{
+}
+
+ResourceLimits
+ResourceLimits::create()
+{
+ uint64_t memory = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE);
+ uint32_t cpu = std::thread::hardware_concurrency();
+ CGroupResourceLimits cgroup_limits;
+ auto& cg_memory = cgroup_limits.get_memory_limit();
+ auto& cg_cpu = cgroup_limits.get_cpu_limit();
+ if (cg_memory.has_value() && cg_memory.value() < memory) {
+ memory = cg_memory.value();
+ }
+ if (cg_cpu.has_value() && cg_cpu.value() < cpu) {
+ cpu = cg_cpu.value();
+ }
+ return ResourceLimits(memory, cpu);
+}
+
+}