lxc/0017-isulad-check-cgroup-cpu.shares-after-setted.patch

100 lines
2.9 KiB
Diff
Raw Normal View History

2019-12-25 15:57:42 +08:00
From 7b916ae46720ce394cc49ee605ae678c73d62640 Mon Sep 17 00:00:00 2001
2019-09-30 11:03:07 -04:00
From: tanyifeng <tanyifeng1@huawei.com>
Date: Mon, 14 Jan 2019 11:03:03 +0800
2019-12-25 15:57:42 +08:00
Subject: [PATCH 017/131] isulad: check cgroup cpu.shares after setted
2019-09-30 11:03:07 -04:00
Signed-off-by: LiFeng <lifeng68@huawei.com>
---
2019-12-25 15:57:42 +08:00
src/lxc/cgroups/cgfsng.c | 61 ++++++++++++++++++++++++++++++++++++++++
2019-09-30 11:03:07 -04:00
1 file changed, 61 insertions(+)
diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
2019-12-25 15:57:42 +08:00
index 3e702b34..ab5732ba 100644
2019-09-30 11:03:07 -04:00
--- a/src/lxc/cgroups/cgfsng.c
+++ b/src/lxc/cgroups/cgfsng.c
@@ -2204,6 +2204,42 @@ static int cg_legacy_set_data(struct cgroup_ops *ops, const char *filename,
return ret;
}
+/* Called from setup_limits - here we have the container's cgroup_data because
+ * we created the cgroups.
+ */
+static int cg_legacy_get_data(struct cgroup_ops *ops, const char *filename,
+ char *value, size_t len)
+{
+ char *fullpath, *p;
+ struct hierarchy *h;
+ int ret = 0;
+ char *controller = NULL;
+
+ len = strlen(filename);
+ controller = alloca(len + 1);
+ (void)strlcpy(controller, filename, len + 1);
+
+ p = strchr(controller, '.');
+ if (p)
+ *p = '\0';
+
+
+ h = get_hierarchy(ops, controller);
+ if (!h) {
+ ERROR("Failed to setup limits for the \"%s\" controller. "
+ "The controller seems to be unused by \"cgfsng\" cgroup "
+ "driver or not enabled on the cgroup hierarchy",
+ controller);
+ errno = ENOENT;
+ return -ENOENT;
+ }
+
+ fullpath = must_make_path(h->container_full_path, filename, NULL);
+ ret = lxc_read_from_file(fullpath, value, len);
+ free(fullpath);
+ return ret;
+}
+
static bool __cg_legacy_setup_limits(struct cgroup_ops *ops,
struct lxc_list *cgroup_settings,
bool do_devices)
@@ -2211,6 +2247,8 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops,
struct lxc_list *iterator, *next, *sorted_cgroup_settings;
struct lxc_cgroup *cg;
bool ret = false;
+ char value[21];
+ long long int readvalue, setvalue;
if (lxc_list_empty(cgroup_settings))
return true;
@@ -2236,6 +2274,29 @@ static bool __cg_legacy_setup_limits(struct cgroup_ops *ops,
DEBUG("Set controller \"%s\" set to \"%s\"",
cg->subsystem, cg->value);
}
+ // isulad: check cpu shares
+ if (strcmp(cg->subsystem, "cpu.shares") == 0) {
+ if (cg_legacy_get_data(ops, cg->subsystem, value, sizeof(value)) < 0) {
+ SYSERROR("Error get %s", cg->subsystem);
+ goto out;
+ }
+ trim(value);
+ if (lxc_safe_long_long(cg->value, &setvalue) != 0) {
+ SYSERROR("Invalid value %s", cg->value);
+ goto out;
+ }
+ if (lxc_safe_long_long(value, &readvalue) != 0) {
+ SYSERROR("Invalid value %s", value);
+ goto out;
+ }
+ if (setvalue > readvalue) {
+ ERROR("The maximum allowed cpu-shares is %s", value);
+ goto out;
+ } else if (setvalue < readvalue) {
+ ERROR("The minimum allowed cpu-shares is %s", value);
+ goto out;
+ }
+ }
}
ret = true;
--
2019-12-25 15:57:42 +08:00
2.23.0
2019-09-30 11:03:07 -04:00