Add support for configuring cgroups and their settings on services

This patch adds support for modifying settings for the default cgroups;
init, user, and system, as well as adding up to a total of eight groups
for the system.

Services can now be assigned to a cgroup, with optional extra settings
for that particular process group.  The syntax is slightly contrivied
but follows the overall Finit syntax of prop:value,prop':value', e.g.

   cgroup maint cpu.weight:123,mem.max:10000

Starting with the introduction of rlimits, a group of services sharing
the same .conf file can share the same (locally "global") rlimits, and
now also the same cgroup, e.g.

    cgroup.maint
    service foo
    service bar cgroup:mem.max:1000

This puts foo and bar in the same top-level cgroup 'maint', with an
extra memory restriction on bar for max 1000 bytes memory.

NOTE: 'mem.' is a Finit extension, a shorthand for cgroups2 'memory.'

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2021-03-30 10:21:01 +02:00
1 parent 9e6e653c57
commit 665d212bd6
8 files changed
+282 -28

No files matched your search

+2
View File
@@ -32,6 +32,7 @@
#include <lite/queue.h> /* BSD sys/queue.h API */
#include <uev/uev.h>
#include "cgroup.h"
#include "helpers.h"
typedef int svc_cmd_t;
@@ -94,6 +95,7 @@ typedef struct svc {
/* Limits and scoping */
struct rlimit rlimit[RLIMIT_NLIMITS];
struct cgroup cgroup;
/* Service details */
int sighalt; /* Signal to stop prorcess, default: SIGTERM */