From 46dd01c6fa319591330c5e813b21501e00bd2765 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 9 Aug 2022 12:17:40 +0000 Subject: [PATCH] cgroup: Add functions to configure memory limits Signed-off-by: Michael Tremer --- src/libpakfire/cgroup.c | 42 +++++++++++++++++++++++++ src/libpakfire/include/pakfire/cgroup.h | 4 +++ 2 files changed, 46 insertions(+) diff --git a/src/libpakfire/cgroup.c b/src/libpakfire/cgroup.c index bad6476c..0c902d85 100644 --- a/src/libpakfire/cgroup.c +++ b/src/libpakfire/cgroup.c @@ -532,3 +532,45 @@ int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup) { int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup) { return cgroup->fd; } + +// Memory + +int pakfire_cgroup_set_guaranteed_memory(struct pakfire_cgroup* cgroup, size_t mem) { + int r; + + // Enable memory controller + r = pakfire_cgroup_enable_controllers(cgroup, PAKFIRE_CGROUP_CONTROLLER_MEMORY); + if (r) + return r; + + DEBUG(cgroup->pakfire, "%s: Setting guaranteed memory to %zu byte(s)\n", + pakfire_cgroup_name(cgroup), mem); + + // Set value + r = pakfire_cgroup_write(cgroup, "memory.min", "%zu\n", mem); + if (r) + ERROR(cgroup->pakfire, "%s: Could not set guaranteed memory: %m\n", + pakfire_cgroup_name(cgroup)); + + return r; +} + +int pakfire_cgroup_set_memory_limit(struct pakfire_cgroup* cgroup, size_t mem) { + int r; + + // Enable memory controller + r = pakfire_cgroup_enable_controllers(cgroup, PAKFIRE_CGROUP_CONTROLLER_MEMORY); + if (r) + return r; + + DEBUG(cgroup->pakfire, "%s: Setting memory limit to %zu byte(s)\n", + pakfire_cgroup_name(cgroup), mem); + + // Set value + r = pakfire_cgroup_write(cgroup, "memory.max", "%zu\n", mem); + if (r) + ERROR(cgroup->pakfire, "%s: Could not set memory limit: %m\n", + pakfire_cgroup_name(cgroup)); + + return r; +} diff --git a/src/libpakfire/include/pakfire/cgroup.h b/src/libpakfire/include/pakfire/cgroup.h index 07a726d5..20dd0000 100644 --- a/src/libpakfire/include/pakfire/cgroup.h +++ b/src/libpakfire/include/pakfire/cgroup.h @@ -43,6 +43,10 @@ int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup); int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup); +// Memory +int pakfire_cgroup_set_guaranteed_memory(struct pakfire_cgroup* cgroup, size_t mem); +int pakfire_cgroup_set_memory_limit(struct pakfire_cgroup* cgroup, size_t mem); + #endif /* PAKFIRE_PRIVATE */ #endif /* PAKFIRE_CGROUP_H */ -- 2.47.3