mirror of
https://github.com/troglobit/finit.git
synced 2026-10-24 11:54:36 +00:00
cgroup: refactor, use a unified hierarchy for finit
As of now, the default finit cgroup behavior is to use a unified hierarchy of controllers under /sys/fs/cgroup/finit. We mount cpu,cpuacct,cpuset,memory (if available) and gain the ability to control our three major groups: init, system, user. The default CPU share setup is ~10% for init and user, and 90% for system. These are guaranteed CPU shares to ensure we do not starve PID 1 or user processes. Support for configuring these limits will be added in a later commit. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
4e84ecae89
commit
5428dea5bf
5 files changed
+113
-20
No files matched your search
+27
-2
@@ -351,6 +351,30 @@ static int is_norespawn(void)
|
||||
fexist("/tmp/norespawn");
|
||||
}
|
||||
|
||||
/* used for process group name, derived from originating filename,
|
||||
* so to group multiple services, place them in the same .conf
|
||||
*/
|
||||
static char *group_name(svc_t *svc, char *buf, size_t len)
|
||||
{
|
||||
char *ptr;
|
||||
|
||||
if (!svc->file[0])
|
||||
return svc_ident(svc, buf, len);
|
||||
|
||||
ptr = strrchr(svc->file, '/');
|
||||
if (ptr)
|
||||
ptr++;
|
||||
else
|
||||
ptr = svc->file;
|
||||
|
||||
strlcpy(buf, ptr, len);
|
||||
ptr = strstr(buf, ".conf");
|
||||
if (ptr)
|
||||
*ptr = 0;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* service_start - Start service
|
||||
* @svc: Service to start
|
||||
@@ -362,6 +386,7 @@ static int service_start(svc_t *svc)
|
||||
{
|
||||
int result = 0, do_progress = 1;
|
||||
sigset_t nmask, omask;
|
||||
char grnam[80];
|
||||
pid_t pid;
|
||||
size_t i;
|
||||
|
||||
@@ -408,8 +433,6 @@ static int service_start(svc_t *svc)
|
||||
sigprocmask(SIG_BLOCK, &nmask, &omask);
|
||||
|
||||
pid = fork();
|
||||
cgroup_service(svc->name, svc->id, pid);
|
||||
|
||||
if (pid == 0) {
|
||||
int status;
|
||||
char *home = NULL;
|
||||
@@ -547,6 +570,8 @@ static int service_start(svc_t *svc)
|
||||
_d("Starting %s %s", svc->cmd, buf);
|
||||
}
|
||||
|
||||
cgroup_service(group_name(svc, grnam, sizeof(grnam)), pid);
|
||||
|
||||
logit(LOG_CONSOLE | LOG_NOTICE, "Starting %s[%d]", svc_ident(svc, NULL, 0), pid);
|
||||
|
||||
svc->pid = pid;
|
||||
|
||||
Reference in new issue
Block a user