diff options
Diffstat (limited to 'core-add-invalidate-cgroup-config.patch')
-rw-r--r-- | core-add-invalidate-cgroup-config.patch | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/core-add-invalidate-cgroup-config.patch b/core-add-invalidate-cgroup-config.patch new file mode 100644 index 0000000..3179d4c --- /dev/null +++ b/core-add-invalidate-cgroup-config.patch @@ -0,0 +1,102 @@ +From d56b3978bbcd28246b3e3ce3f8c958ac95785dd7 Mon Sep 17 00:00:00 2001 +From: fangxiuning <fangxiuning@huawei.com> +Date: Wed, 22 Apr 2020 11:55:18 +0800 +Subject: + After systemd 239 version, a new feature is added to cgroups. +The processes started by users default to the cgroup group belonging +to user.slice, and the processes started by the system default to +system.slice. This is the direction of github systemd evolution. +However, there are still a large number of operations downstream +that systemd does not perceive to modify the cgroup group, +such as directly echo the process number to system.slice. + +For example: +1. sleep 1000 & +2. echo sleep pid > /sys/fs/cgroup/memory/system.slice/task +3. systemctl daemon-reload +4. cat /proc/sleep pid/cgroup +this kind of operation, systemd is not aware of it. +When systemctl disable service or systemctl daemon-reload operation +is executed, systemd will re-attach each process to its original +Under the group(user.slice). + +--- + src/core/main.c | 1 + + src/core/manager.c | 2 ++ + src/core/manager.h | 1 + + src/core/system.conf.in | 1 + + src/core/unit-serialize.c | 2 +- + 5 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/src/core/main.c b/src/core/main.c +index e9f56fa..964adb5 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -684,6 +684,7 @@ static int parse_config_file(void) { + { "Manager", "DefaultFreezerAccounting", config_parse_bool, 0, &arg_defaults.freezer_accounting }, + { "Manager", "DefaultTasksAccounting", config_parse_bool, 0, &arg_defaults.tasks_accounting }, + { "Manager", "DefaultTasksMax", config_parse_tasks_max, 0, &arg_defaults.tasks_max }, ++ { "Manager", "DefaultInvalidateCgroup", config_parse_bool, 0, &arg_defaults.invalidate_cgroup }, + { "Manager", "DefaultMemoryPressureThresholdSec", config_parse_sec, 0, &arg_defaults.memory_pressure_threshold_usec }, + { "Manager", "DefaultMemoryPressureWatch", config_parse_memory_pressure_watch, 0, &arg_defaults.memory_pressure_watch }, + { "Manager", "CtrlAltDelBurstAction", config_parse_emergency_action, arg_runtime_scope, &arg_cad_burst_action }, +diff --git a/src/core/manager.c b/src/core/manager.c +index 59170af..57dd3d1 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -4200,6 +4200,7 @@ int manager_set_unit_defaults(Manager *m, const UnitDefaults *defaults) { + m->defaults.ip_accounting = defaults->ip_accounting; + + m->defaults.tasks_max = defaults->tasks_max; ++ m->defaults.invalidate_cgroup = defaults->invalidate_cgroup; + m->defaults.optional_log = defaults->optional_log; + m->defaults.timer_accuracy_usec = defaults->timer_accuracy_usec; + +@@ -4969,6 +4970,7 @@ void unit_defaults_init(UnitDefaults *defaults, RuntimeScope scope) { + .io_accounting = false, + .blockio_accounting = false, + .tasks_accounting = true, ++ .invalidate_cgroup = true, + .ip_accounting = false, + + .tasks_max = DEFAULT_TASKS_MAX, +diff --git a/src/core/manager.h b/src/core/manager.h +index 3c954af..0c9a2ea 100644 +--- a/src/core/manager.h ++++ b/src/core/manager.h +@@ -173,6 +173,7 @@ typedef struct UnitDefaults { + + CGroupTasksMax tasks_max; + usec_t timer_accuracy_usec; ++ bool invalidate_cgroup; + + OOMPolicy oom_policy; + int oom_score_adjust; +diff --git a/src/core/system.conf.in b/src/core/system.conf.in +index a55106c..f48452d 100644 +--- a/src/core/system.conf.in ++++ b/src/core/system.conf.in +@@ -78,6 +78,7 @@ DefaultLimitMEMLOCK=64M + #DefaultLimitNICE= + #DefaultLimitRTPRIO= + #DefaultLimitRTTIME= ++#DefaultInvalidateCgroup=yes + #DefaultMemoryPressureThresholdSec=200ms + #DefaultMemoryPressureWatch=auto + #DefaultOOMPolicy=stop +diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c +index fe4221c..091e7b6 100644 +--- a/src/core/unit-serialize.c ++++ b/src/core/unit-serialize.c +@@ -574,7 +574,7 @@ int unit_deserialize_state(Unit *u, FILE *f, FDSet *fds) { + /* Let's make sure that everything that is deserialized also gets any potential new cgroup settings + * applied after we are done. For that we invalidate anything already realized, so that we can + * realize it again. */ +- if (u->cgroup_realized) { ++ if (u->cgroup_realized && u->manager->defaults.invalidate_cgroup) { + unit_invalidate_cgroup(u, _CGROUP_MASK_ALL); + unit_invalidate_cgroup_bpf(u); + } +-- +2.33.0 + |