Refactor, clean up removed top-level cgroups

The main purpose of this patch is to remove top-level cgroups when they
are remvoed from finit.conf.  However, this is tricky, becasue there may
still be supervised services (and children of them) running.  We must
postpone removal until a cgroup.events change.  To make matters worse,
events may arrive out-of-order, i.e. the last-child event for the parent
cgroup before the sub-group.

A spin-off from this patch is that we can now support arbitrarily long
group names and group config.  (Only applies to top-level cgroups, not
run/task/services.)

Limitations:
 - Processes in "removed" cgroups are not migrated/orphaned, the reasons
   are several: overhead and complexity and the fact that memory cannot
   be migrated
 - A lingering child of a moved service may prevent an old top-level
   cgroup from being removed.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg committed 2021-04-09 17:49:55 +02:00
1 parent d77c014723
commit a42a789d29
4 files changed
+194 -82

No files matched your search

-4
View File
@@ -31,15 +31,11 @@ extern int logfile_size_max;
extern int logfile_count_max;
extern struct rlimit global_rlimit[];
extern struct cgroup cgroups[];
extern size_t cgroup_num;
extern char cgroup_current[];
int str2rlim(char *str);
char *rlim2str(int rlim);
struct cgroup *conf_cgfind(char *name);
int conf_init (uev_ctx_t *ctx);
void conf_reload (void);
int conf_any_change (void);