Skip to content

Commit

Permalink
mxqd: Enforce limits using setrlimit()
Browse files Browse the repository at this point in the history
requested resources are now enforced
  - memory limits (100% of requested)
  - single thread time limits (cpu time 105% of requested - softlimit at 100%)

still not enforced:
  - memory limit for process groups.
  - time limits by wall time seconds (includes multithread)
  • Loading branch information
mariux committed Jul 21, 2015
1 parent a5b7181 commit 511439f
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions mxqd.c
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,7 @@ static int init_child_process(struct mxq_group_list *group, struct mxq_job *j)
pid_t pid;
int res;
int fh;
struct rlimit rlim;

assert(j);
assert(group);
Expand Down Expand Up @@ -772,6 +773,46 @@ static int init_child_process(struct mxq_group_list *group, struct mxq_job *j)
dprintf(fh, "%d", g->user_uid);
close(fh);

/* set memory limits */
rlim.rlim_cur = g->job_memory*1024*1024;
rlim.rlim_max = g->job_memory*1024*1024;

res = setrlimit(RLIMIT_AS, &rlim);
if (res == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_AS, ...) failed: %m",
g->user_name, g->user_uid, g->group_id, j->job_id);

res = setrlimit(RLIMIT_DATA, &rlim);
if (res == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_DATA, ...) failed: %m",
g->user_name, g->user_uid, g->group_id, j->job_id);

res = setrlimit(RLIMIT_RSS, &rlim);
if (res == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_RSS, ...) failed: %m",
g->user_name, g->user_uid, g->group_id, j->job_id);

/* disable core files */
rlim.rlim_cur = 0;
rlim.rlim_cur = 0;

res = setrlimit(RLIMIT_CORE, &rlim);
if (res == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_CORE, ...) failed: %m",
g->user_name, g->user_uid, g->group_id, j->job_id);

/* set single threaded time limits */
if (g->job_threads == 1) {
/* set cpu time limits - hardlimit is 105% of softlimit */
rlim.rlim_cur = g->job_time*60;
rlim.rlim_cur = g->job_time*63;

res = setrlimit(RLIMIT_CPU, &rlim);
if (res == -1)
mx_log_err("job=%s(%d):%lu:%lu setrlimit(RLIMIT_CPU, ...) failed: %m",
g->user_name, g->user_uid, g->group_id, j->job_id);
}

res = initgroups(passwd->pw_name, g->user_gid);
if (res == -1) {
mx_log_err("job=%s(%d):%lu:%lu initgroups() failed: %m",
Expand Down

0 comments on commit 511439f

Please sign in to comment.