From: Michael Tremer Date: Sat, 14 Dec 2024 13:31:21 +0000 (+0000) Subject: cgroups: Bring back a function that enables accounting X-Git-Tag: 0.9.30~724 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=451bbd802f7c4f2accb652a508379c8622a0d242;p=pakfire.git cgroups: Bring back a function that enables accounting Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/cgroup.c b/src/libpakfire/cgroup.c index e86711f89..dbf769f45 100644 --- a/src/libpakfire/cgroup.c +++ b/src/libpakfire/cgroup.c @@ -362,29 +362,6 @@ static int pakfire_cgroup_enable_controller(struct pakfire_cgroup* cgroup, int c return 0; } -/* - Enables all controllers that we need. -*/ -static int pakfire_cgroup_enable_controllers(struct pakfire_cgroup* cgroup) { - static const int controllers[] = { - PAKFIRE_CGROUP_CONTROLLER_CPU, - PAKFIRE_CGROUP_CONTROLLER_MEMORY, - PAKFIRE_CGROUP_CONTROLLER_PIDS, - PAKFIRE_CGROUP_CONTROLLER_IO, - 0, - }; - int r; - - // Enable all controllers - for (int* controller = controllers; *controller; controller++) { - r = pakfire_cgroup_enable_controller(cgroup, *controller); - if (r < 0) - return r; - } - - return 0; -} - /* Entry function to open a new cgroup. @@ -438,11 +415,6 @@ static int pakfire_cgroup_open(struct pakfire_cgroup** cgroup, if (r < 0) goto ERROR; - // Enable all controllers - r = pakfire_cgroup_enable_controllers(c); - if (r < 0) - goto ERROR; - #if 0 // Setup the devices filter r = pakfire_cgroup_setup_devices(c); @@ -561,6 +533,29 @@ int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup) { return cgroup->fd; } +// Accounting + +int pakfire_cgroup_enable_accounting(struct pakfire_cgroup* cgroup) { + int r; + + // CPU + r = pakfire_cgroup_enable_controller(cgroup, PAKFIRE_CGROUP_CONTROLLER_CPU); + if (r < 0) + return r; + + // Memory + r = pakfire_cgroup_enable_controller(cgroup, PAKFIRE_CGROUP_CONTROLLER_MEMORY); + if (r < 0) + return r; + + // IO + r = pakfire_cgroup_enable_controller(cgroup, PAKFIRE_CGROUP_CONTROLLER_IO); + if (r < 0) + return r; + + return 0; +} + // Memory int pakfire_cgroup_set_guaranteed_memory(struct pakfire_cgroup* cgroup, size_t mem) { diff --git a/src/libpakfire/include/pakfire/cgroup.h b/src/libpakfire/include/pakfire/cgroup.h index 6f86fbdca..443f101ea 100644 --- a/src/libpakfire/include/pakfire/cgroup.h +++ b/src/libpakfire/include/pakfire/cgroup.h @@ -218,6 +218,9 @@ int pakfire_cgroup_destroy(struct pakfire_cgroup* cgroup); int pakfire_cgroup_fd(struct pakfire_cgroup* cgroup); +// Accounting +int pakfire_cgroup_enable_accounting(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); diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index 1260dd779..1c9676668 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -1512,6 +1512,11 @@ static int __pakfire_jail_exec(struct pakfire_jail* jail, goto ERROR; } + // Enable accounting to collect stats + r = pakfire_cgroup_enable_accounting(ctx.cgroup); + if (r < 0) + goto ERROR; + // Clone into this cgroup args.cgroup = pakfire_cgroup_fd(ctx.cgroup); }