From 1a0df07843cd5803a0858dd0b646e12992e7561a Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Sat, 17 Jan 2026 01:21:34 +0100 Subject: [PATCH] core/cgroup: obsolete DefaultMemoryMin/Low= Now that our kernel baseline is v5.7 and memory_recursiveprot is universally enabled, remove userspace workarounds. --- TODO | 4 - man/org.freedesktop.systemd1.xml | 108 -------------- man/systemd.resource-control.xml | 12 +- src/core/cgroup.c | 63 ++------ src/core/cgroup.h | 12 -- src/core/dbus-cgroup.c | 84 +++-------- src/core/execute-serialize.c | 65 --------- src/core/load-fragment-gperf.gperf.in | 6 +- src/core/load-fragment.c | 26 +--- src/core/varlink-cgroup.c | 7 +- src/shared/bus-get-properties.c | 1 + src/shared/bus-get-properties.h | 1 + src/shared/bus-unit-util.c | 6 +- src/shared/varlink-io.systemd.Unit.c | 6 - src/systemctl/systemctl-show.c | 7 - src/test/meson.build | 3 - src/test/test-cgroup-unit-default.c | 136 ------------------ test/meson.build | 1 - .../dml-discard-empty.service | 8 -- .../dml-discard-set-ml.service | 9 -- .../dml-discard.slice | 6 - .../dml-override-empty.service | 8 -- .../dml-override.slice | 6 - .../dml-passthrough-empty.service | 8 -- .../dml-passthrough-set-dml.service | 9 -- .../dml-passthrough-set-ml.service | 9 -- .../dml-passthrough.slice | 6 - test/test-cgroup-unit-default/dml.slice | 6 - 28 files changed, 48 insertions(+), 575 deletions(-) delete mode 100644 src/test/test-cgroup-unit-default.c delete mode 100644 test/test-cgroup-unit-default/dml-discard-empty.service delete mode 100644 test/test-cgroup-unit-default/dml-discard-set-ml.service delete mode 100644 test/test-cgroup-unit-default/dml-discard.slice delete mode 100644 test/test-cgroup-unit-default/dml-override-empty.service delete mode 100644 test/test-cgroup-unit-default/dml-override.slice delete mode 100644 test/test-cgroup-unit-default/dml-passthrough-empty.service delete mode 100644 test/test-cgroup-unit-default/dml-passthrough-set-dml.service delete mode 100644 test/test-cgroup-unit-default/dml-passthrough-set-ml.service delete mode 100644 test/test-cgroup-unit-default/dml-passthrough.slice delete mode 100644 test/test-cgroup-unit-default/dml.slice diff --git a/TODO b/TODO index e24eade3816..d45ee30dc94 100644 --- a/TODO +++ b/TODO @@ -120,10 +120,6 @@ Deprecations and removals: https://github.com/util-linux/util-linux/commit/508fb0e7ac103b68531a59db2a4473897853ab52 has hit the prominent distributions, revert --issue-file= hack in units/*getty*service.in -* Once kernel baseline is 5.7, obsolete DefaultMemoryMin/Low= and DefaultStartupMemoryLow= - since we can systematically enable memory_recursiveprot on cgroupfs and have those - enforced by the kernel - Features: * systemd-sysupdate: add support a "best before" in manifests (ie. SHA256SUMS) diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml index 7a65bfa809c..e6c2c6fdab8 100644 --- a/man/org.freedesktop.systemd1.xml +++ b/man/org.freedesktop.systemd1.xml @@ -2969,12 +2969,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly b MemoryAccounting = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultStartupMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryMin = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryMin = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryLow = ...; @@ -3642,12 +3636,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { - - - - - - @@ -4336,12 +4324,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice { - - - - - - @@ -5238,12 +5220,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket { @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly b MemoryAccounting = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultStartupMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryMin = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryMin = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryLow = ...; @@ -5929,12 +5905,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket { - - - - - - @@ -6599,12 +6569,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket { - - - - - - @@ -7325,12 +7289,6 @@ node /org/freedesktop/systemd1/unit/home_2emount { @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly b MemoryAccounting = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultStartupMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryMin = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryMin = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryLow = ...; @@ -7940,12 +7898,6 @@ node /org/freedesktop/systemd1/unit/home_2emount { - - - - - - @@ -8518,12 +8470,6 @@ node /org/freedesktop/systemd1/unit/home_2emount { - - - - - - @@ -9377,12 +9323,6 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap { @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly b MemoryAccounting = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultStartupMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryMin = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryMin = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryLow = ...; @@ -9974,12 +9914,6 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap { - - - - - - @@ -10534,12 +10468,6 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap { - - - - - - @@ -11246,12 +11174,6 @@ node /org/freedesktop/systemd1/unit/system_2eslice { @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly b MemoryAccounting = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultStartupMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryMin = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryMin = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryLow = ...; @@ -11427,12 +11349,6 @@ node /org/freedesktop/systemd1/unit/system_2eslice { - - - - - - @@ -11619,12 +11535,6 @@ node /org/freedesktop/systemd1/unit/system_2eslice { - - - - - - @@ -11836,12 +11746,6 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope { @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly b MemoryAccounting = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultStartupMemoryLow = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") - readonly t DefaultMemoryMin = ...; - @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryMin = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("false") readonly t MemoryLow = ...; @@ -12031,12 +11935,6 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope { - - - - - - @@ -12247,12 +12145,6 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope { - - - - - - diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml index cabadb74f77..12a3c0e644e 100644 --- a/man/systemd.resource-control.xml +++ b/man/systemd.resource-control.xml @@ -326,7 +326,7 @@ CPUWeight=20 DisableControllers=cpu / \ MemoryMin=bytes, MemoryLow=bytes - StartupMemoryLow=bytes, DefaultStartupMemoryLow=bytes + StartupMemoryLow=bytes These settings control the controller in the unified hierarchy. @@ -353,16 +353,6 @@ CPUWeight=20 DisableControllers=cpu / \ For details about this control group attribute, see Memory Interface Files. - Units may have their children use a default memory.min or - memory.low value by specifying DefaultMemoryMin= or - DefaultMemoryLow=, which has the same semantics as - MemoryMin= and MemoryLow=, or DefaultStartupMemoryLow= - which has the same semantics as StartupMemoryLow=. - This setting does not affect memory.min or memory.low - in the unit itself. - Using it to set a default child allocation is only useful on kernels older than 5.7, - which do not support the memory_recursiveprot cgroup2 mount option. - While StartupMemoryLow= applies to the startup and shutdown phases of the system, MemoryMin= applies to normal runtime of the system, and if the former is not set also to the startup and shutdown phases. Using StartupMemoryLow= allows prioritizing specific services at diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 6519440e457..6a434eba84b 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -330,13 +330,13 @@ static int unit_compare_memory_limit(Unit *u, const char *property_name, uint64_ bool startup = u->manager && IN_SET(manager_state(u->manager), MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING); if (streq(property_name, "MemoryLow")) { - unit_value = unit_get_ancestor_memory_low(u); + unit_value = c->memory_low; file = "memory.low"; } else if (startup && streq(property_name, "StartupMemoryLow")) { - unit_value = unit_get_ancestor_startup_memory_low(u); + unit_value = c->startup_memory_low; file = "memory.low"; } else if (streq(property_name, "MemoryMin")) { - unit_value = unit_get_ancestor_memory_min(u); + unit_value = c->memory_min; file = "memory.min"; } else if (streq(property_name, "MemoryHigh")) { unit_value = c->memory_high; @@ -504,8 +504,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) { "%sStartupAllowedMemoryNodes: %s\n" "%sIOWeight: %" PRIu64 "\n" "%sStartupIOWeight: %" PRIu64 "\n" - "%sDefaultMemoryMin: %" PRIu64 "\n" - "%sDefaultMemoryLow: %" PRIu64 "\n" "%sMemoryMin: %" PRIu64 "%s\n" "%sMemoryLow: %" PRIu64 "%s\n" "%sStartupMemoryLow: %" PRIu64 "%s\n" @@ -542,8 +540,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) { prefix, strempty(startup_cpuset_mems), prefix, c->io_weight, prefix, c->startup_io_weight, - prefix, c->default_memory_min, - prefix, c->default_memory_low, prefix, c->memory_min, format_cgroup_memory_limit_comparison(u, "MemoryMin", cda, sizeof(cda)), prefix, c->memory_low, format_cgroup_memory_limit_comparison(u, "MemoryLow", cdb, sizeof(cdb)), prefix, c->startup_memory_low, format_cgroup_memory_limit_comparison(u, "StartupMemoryLow", cdc, sizeof(cdc)), @@ -764,36 +760,6 @@ int cgroup_context_add_bpf_foreign_program(CGroupContext *c, uint32_t attach_typ return 0; } -#define UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(entry) \ - uint64_t unit_get_ancestor_##entry(Unit *u) { \ - CGroupContext *c; \ - \ - /* 1. Is entry set in this unit? If so, use that. \ - * 2. Is the default for this entry set in any \ - * ancestor? If so, use that. \ - * 3. Otherwise, return CGROUP_LIMIT_MIN. */ \ - \ - assert(u); \ - \ - c = unit_get_cgroup_context(u); \ - if (c && c->entry##_set) \ - return c->entry; \ - \ - while ((u = UNIT_GET_SLICE(u))) { \ - c = unit_get_cgroup_context(u); \ - if (c && c->default_##entry##_set) \ - return c->default_##entry; \ - } \ - \ - /* We've reached the root, but nobody had default for \ - * this entry set, so set it to the kernel default. */ \ - return CGROUP_LIMIT_MIN; \ -} - -UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_low); -UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(startup_memory_low); -UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_min); - static void unit_set_xattr_graceful(Unit *u, const char *name, const void *data, size_t size) { int r; @@ -1263,15 +1229,11 @@ static void cgroup_apply_io_device_limit(Unit *u, const char *dev_path, uint64_t (void) set_attribute_and_warn(u, "io.max", buf); } -static bool unit_has_memory_config(Unit *u) { - CGroupContext *c; - - assert(u); - - assert_se(c = unit_get_cgroup_context(u)); +static bool cgroup_context_has_memory_config(CGroupContext *c) { + assert(c); - return unit_get_ancestor_memory_min(u) > 0 || - unit_get_ancestor_memory_low(u) > 0 || unit_get_ancestor_startup_memory_low(u) > 0 || + return c->memory_min > 0 || + c->memory_low > 0 || c->startup_memory_low_set || c->memory_high != CGROUP_LIMIT_MAX || c->startup_memory_high_set || c->memory_max != CGROUP_LIMIT_MAX || c->startup_memory_max_set || c->memory_swap_max != CGROUP_LIMIT_MAX || c->startup_memory_swap_max_set || @@ -1517,19 +1479,20 @@ static void cgroup_context_apply( /* 'memory' attributes do not exist on the root cgroup. */ if ((apply_mask & CGROUP_MASK_MEMORY) && !is_local_root) { - uint64_t max = CGROUP_LIMIT_MAX, swap_max = CGROUP_LIMIT_MAX, zswap_max = CGROUP_LIMIT_MAX, high = CGROUP_LIMIT_MAX; + uint64_t low = CGROUP_LIMIT_MIN, max = CGROUP_LIMIT_MAX, swap_max = CGROUP_LIMIT_MAX, zswap_max = CGROUP_LIMIT_MAX, high = CGROUP_LIMIT_MAX; - if (unit_has_memory_config(u)) { + if (cgroup_context_has_memory_config(c)) { bool startup = IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING); + low = startup && c->startup_memory_low_set ? c->startup_memory_low : c->memory_low; high = startup && c->startup_memory_high_set ? c->startup_memory_high : c->memory_high; max = startup && c->startup_memory_max_set ? c->startup_memory_max : c->memory_max; swap_max = startup && c->startup_memory_swap_max_set ? c->startup_memory_swap_max : c->memory_swap_max; zswap_max = startup && c->startup_memory_zswap_max_set ? c->startup_memory_zswap_max : c->memory_zswap_max; } - cgroup_apply_memory_limit(u, "memory.min", unit_get_ancestor_memory_min(u)); - cgroup_apply_memory_limit(u, "memory.low", unit_get_ancestor_memory_low(u)); + cgroup_apply_memory_limit(u, "memory.min", c->memory_min); + cgroup_apply_memory_limit(u, "memory.low", low); cgroup_apply_memory_limit(u, "memory.high", high); cgroup_apply_memory_limit(u, "memory.max", max); cgroup_apply_memory_limit(u, "memory.swap.max", swap_max); @@ -1697,7 +1660,7 @@ static CGroupMask unit_get_cgroup_mask(Unit *u) { mask |= CGROUP_MASK_IO; if (c->memory_accounting || - unit_has_memory_config(u)) + cgroup_context_has_memory_config(c)) mask |= CGROUP_MASK_MEMORY; if (cgroup_context_has_device_policy(c)) diff --git a/src/core/cgroup.h b/src/core/cgroup.h index 5d450bd6085..0cd290e92f2 100644 --- a/src/core/cgroup.h +++ b/src/core/cgroup.h @@ -137,9 +137,6 @@ typedef struct CGroupContext { LIST_HEAD(CGroupIODeviceLimit, io_device_limits); LIST_HEAD(CGroupIODeviceLatency, io_device_latencies); - uint64_t default_memory_min; - uint64_t default_memory_low; - uint64_t default_startup_memory_low; uint64_t memory_min; uint64_t memory_low; uint64_t startup_memory_low; @@ -152,11 +149,6 @@ typedef struct CGroupContext { uint64_t memory_zswap_max; uint64_t startup_memory_zswap_max; - bool default_memory_min_set:1; - bool default_memory_low_set:1; - bool default_startup_memory_low_set:1; - bool memory_min_set:1; - bool memory_low_set:1; bool startup_memory_low_set:1; bool startup_memory_high_set:1; bool startup_memory_max_set:1; @@ -416,10 +408,6 @@ Unit* manager_get_unit_by_pidref_cgroup(Manager *m, const PidRef *pid); Unit* manager_get_unit_by_pidref_watching(Manager *m, const PidRef *pid); Unit* manager_get_unit_by_pidref(Manager *m, PidRef *pid); -uint64_t unit_get_ancestor_memory_min(Unit *u); -uint64_t unit_get_ancestor_memory_low(Unit *u); -uint64_t unit_get_ancestor_startup_memory_low(Unit *u); - int unit_search_main_pid(Unit *u, PidRef *ret); int unit_get_memory_available(Unit *u, uint64_t *ret); diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 92c59cd4ecf..dcb27f80f8c 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -395,9 +395,6 @@ const sd_bus_vtable bus_cgroup_vtable[] = { SD_BUS_PROPERTY("IOWriteIOPSMax", "a(st)", property_get_io_device_limits, 0, 0), SD_BUS_PROPERTY("IODeviceLatencyTargetUSec", "a(st)", property_get_io_device_latency, 0, 0), SD_BUS_PROPERTY("MemoryAccounting", "b", bus_property_get_bool, offsetof(CGroupContext, memory_accounting), 0), - SD_BUS_PROPERTY("DefaultMemoryLow", "t", NULL, offsetof(CGroupContext, default_memory_low), 0), - SD_BUS_PROPERTY("DefaultStartupMemoryLow", "t", NULL, offsetof(CGroupContext, default_startup_memory_low), 0), - SD_BUS_PROPERTY("DefaultMemoryMin", "t", NULL, offsetof(CGroupContext, default_memory_min), 0), SD_BUS_PROPERTY("MemoryMin", "t", NULL, offsetof(CGroupContext, memory_min), 0), SD_BUS_PROPERTY("MemoryLow", "t", NULL, offsetof(CGroupContext, memory_low), 0), SD_BUS_PROPERTY("StartupMemoryLow", "t", NULL, offsetof(CGroupContext, startup_memory_low), 0), @@ -447,6 +444,10 @@ const sd_bus_vtable bus_cgroup_vtable[] = { SD_BUS_PROPERTY("BlockIOWriteBandwidth", "a(st)", property_get_blockio_ast, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN), /* since kernel v4.15 CPU accounting requires no controller, i.e. is available everywhere */ SD_BUS_PROPERTY("CPUAccounting", "b", bus_property_get_bool_true, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN), + /* since kernel v5.7 kernel would take care of these when cgroup is mounted with memory_recursiveprot */ + SD_BUS_PROPERTY("DefaultMemoryMin", "t", bus_property_get_uint64_0, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN), + SD_BUS_PROPERTY("DefaultMemoryLow", "t", bus_property_get_uint64_0, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN), + SD_BUS_PROPERTY("DefaultStartupMemoryLow", "t", bus_property_get_uint64_0, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN), SD_BUS_VTABLE_END }; @@ -1053,19 +1054,11 @@ int bus_cgroup_set_property( if (streq(name, "MemoryAccounting")) return bus_cgroup_set_boolean(u, name, &c->memory_accounting, CGROUP_MASK_MEMORY, message, flags, reterr_error); - if (streq(name, "MemoryMin")) { - r = bus_cgroup_set_memory_protection(u, name, &c->memory_min, message, flags, reterr_error); - if (r > 0) - c->memory_min_set = true; - return r; - } + if (streq(name, "MemoryMin")) + return bus_cgroup_set_memory_protection(u, name, &c->memory_min, message, flags, reterr_error); - if (streq(name, "MemoryLow")) { - r = bus_cgroup_set_memory_protection(u, name, &c->memory_low, message, flags, reterr_error); - if (r > 0) - c->memory_low_set = true; - return r; - } + if (streq(name, "MemoryLow")) + return bus_cgroup_set_memory_protection(u, name, &c->memory_low, message, flags, reterr_error); if (streq(name, "StartupMemoryLow")) { r = bus_cgroup_set_memory_protection(u, name, &c->startup_memory_low, message, flags, reterr_error); @@ -1074,27 +1067,6 @@ int bus_cgroup_set_property( return r; } - if (streq(name, "DefaultMemoryMin")) { - r = bus_cgroup_set_memory_protection(u, name, &c->default_memory_min, message, flags, reterr_error); - if (r > 0) - c->default_memory_min_set = true; - return r; - } - - if (streq(name, "DefaultMemoryLow")) { - r = bus_cgroup_set_memory_protection(u, name, &c->default_memory_low, message, flags, reterr_error); - if (r > 0) - c->default_memory_low_set = true; - return r; - } - - if (streq(name, "DefaultStartupMemoryLow")) { - r = bus_cgroup_set_memory_protection(u, name, &c->default_startup_memory_low, message, flags, reterr_error); - if (r > 0) - c->default_startup_memory_low_set = true; - return r; - } - if (streq(name, "MemoryHigh")) return bus_cgroup_set_memory(u, name, &c->memory_high, message, flags, reterr_error); @@ -1135,33 +1107,11 @@ int bus_cgroup_set_property( return r; } - if (streq(name, "MemoryMinScale")) { - r = bus_cgroup_set_memory_protection_scale(u, name, &c->memory_min, message, flags, reterr_error); - if (r > 0) - c->memory_min_set = true; - return r; - } - - if (streq(name, "MemoryLowScale")) { - r = bus_cgroup_set_memory_protection_scale(u, name, &c->memory_low, message, flags, reterr_error); - if (r > 0) - c->memory_low_set = true; - return r; - } - - if (streq(name, "DefaultMemoryMinScale")) { - r = bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_min, message, flags, reterr_error); - if (r > 0) - c->default_memory_min_set = true; - return r; - } + if (streq(name, "MemoryMinScale")) + return bus_cgroup_set_memory_protection_scale(u, name, &c->memory_min, message, flags, reterr_error); - if (streq(name, "DefaultMemoryLowScale")) { - r = bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_low, message, flags, reterr_error); - if (r > 0) - c->default_memory_low_set = true; - return r; - } + if (streq(name, "MemoryLowScale")) + return bus_cgroup_set_memory_protection_scale(u, name, &c->memory_low, message, flags, reterr_error); if (streq(name, "MemoryHighScale")) return bus_cgroup_set_memory_scale(u, name, &c->memory_high, message, flags, reterr_error); @@ -2041,8 +1991,8 @@ int bus_cgroup_set_property( return 1; } - /* deprecated CGroup v1 properties */ if (STR_IN_SET(name, + /* deprecated CGroup v1 properties */ "MemoryLimit", "MemoryLimitScale", "CPUShares", @@ -2053,7 +2003,13 @@ int bus_cgroup_set_property( "BlockIODeviceWeight", "BlockIOReadBandwidth", "BlockIOWriteBandwidth", - "CPUAccounting")) { /* see comment in bus_cgroup_vtable */ + /* see comments in bus_cgroup_vtable */ + "CPUAccounting", + "DefaultMemoryMin", + "DefaultMemoryMinScale", + "DefaultMemoryLow", + "DefaultMemoryLowScale", + "DefaultStartupMemoryLow")) { r = sd_bus_message_skip(message, NULL); if (r < 0) diff --git a/src/core/execute-serialize.c b/src/core/execute-serialize.c index 955fa1937cd..3ffedf58db7 100644 --- a/src/core/execute-serialize.c +++ b/src/core/execute-serialize.c @@ -132,18 +132,6 @@ static int exec_cgroup_context_serialize(const CGroupContext *c, FILE *f) { return r; } - if (c->default_memory_min > 0) { - r = serialize_item_format(f, "exec-cgroup-context-default-memory-min", "%" PRIu64, c->default_memory_min); - if (r < 0) - return r; - } - - if (c->default_memory_low > 0) { - r = serialize_item_format(f, "exec-cgroup-context-default-memory-low", "%" PRIu64, c->default_memory_low); - if (r < 0) - return r; - } - if (c->memory_min > 0) { r = serialize_item_format(f, "exec-cgroup-context-memory-min", "%" PRIu64, c->memory_min); if (r < 0) @@ -226,26 +214,6 @@ static int exec_cgroup_context_serialize(const CGroupContext *c, FILE *f) { return r; } - r = serialize_bool_elide(f, "exec-cgroup-context-default-memory-min-set", c->default_memory_min_set); - if (r < 0) - return r; - - r = serialize_bool_elide(f, "exec-cgroup-context-default-memory-low-set", c->default_memory_low_set); - if (r < 0) - return r; - - r = serialize_bool_elide(f, "exec-cgroup-context-default-startup-memory-low-set", c->default_startup_memory_low_set); - if (r < 0) - return r; - - r = serialize_bool_elide(f, "exec-cgroup-context-memory-min-set", c->memory_min_set); - if (r < 0) - return r; - - r = serialize_bool_elide(f, "exec-cgroup-context-memory-low-set", c->memory_low_set); - if (r < 0) - return r; - r = serialize_bool_elide(f, "exec-cgroup-context-startup-memory-low-set", c->startup_memory_low_set); if (r < 0) return r; @@ -532,14 +500,6 @@ static int exec_cgroup_context_deserialize(CGroupContext *c, FILE *f) { r = safe_atou64(val, &c->startup_io_weight); if (r < 0) return r; - } else if ((val = startswith(l, "exec-cgroup-context-default-memory-min="))) { - r = safe_atou64(val, &c->default_memory_min); - if (r < 0) - return r; - } else if ((val = startswith(l, "exec-cgroup-context-default-memory-low="))) { - r = safe_atou64(val, &c->default_memory_low); - if (r < 0) - return r; } else if ((val = startswith(l, "exec-cgroup-context-memory-min="))) { r = safe_atou64(val, &c->memory_min); if (r < 0) @@ -597,31 +557,6 @@ static int exec_cgroup_context_deserialize(CGroupContext *c, FILE *f) { r = safe_atou64(val, &c->tasks_max.scale); if (r < 0) return r; - } else if ((val = startswith(l, "exec-cgroup-context-default-memory-min-set="))) { - r = parse_boolean(val); - if (r < 0) - return r; - c->default_memory_min_set = r; - } else if ((val = startswith(l, "exec-cgroup-context-default-memory-low-set="))) { - r = parse_boolean(val); - if (r < 0) - return r; - c->default_memory_low_set = r; - } else if ((val = startswith(l, "exec-cgroup-context-default-startup-memory-low-set="))) { - r = parse_boolean(val); - if (r < 0) - return r; - c->default_startup_memory_low_set = r; - } else if ((val = startswith(l, "exec-cgroup-context-memory-min-set="))) { - r = parse_boolean(val); - if (r < 0) - return r; - c->memory_min_set = r; - } else if ((val = startswith(l, "exec-cgroup-context-memory-low-set="))) { - r = parse_boolean(val); - if (r < 0) - return r; - c->memory_low_set = r; } else if ((val = startswith(l, "exec-cgroup-context-startup-memory-low-set="))) { r = parse_boolean(val); if (r < 0) diff --git a/src/core/load-fragment-gperf.gperf.in b/src/core/load-fragment-gperf.gperf.in index 69e39ed0dc3..7f8198ff487 100644 --- a/src/core/load-fragment-gperf.gperf.in +++ b/src/core/load-fragment-gperf.gperf.in @@ -223,11 +223,11 @@ {{type}}.CPUQuotaPeriodSec, config_parse_sec_def_infinity, 0, offsetof({{type}}, cgroup_context.cpu_quota_period_usec) {{type}}.MemoryAccounting, config_parse_bool, 0, offsetof({{type}}, cgroup_context.memory_accounting) {{type}}.MemoryMin, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) -{{type}}.DefaultMemoryMin, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) -{{type}}.DefaultMemoryLow, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) -{{type}}.DefaultStartupMemoryLow, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) {{type}}.MemoryLow, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) {{type}}.StartupMemoryLow, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) +{{type}}.DefaultMemoryMin, config_parse_warn_compat, DISABLED_LEGACY, 0 +{{type}}.DefaultMemoryLow, config_parse_warn_compat, DISABLED_LEGACY, 0 +{{type}}.DefaultStartupMemoryLow, config_parse_warn_compat, DISABLED_LEGACY, 0 {{type}}.MemoryHigh, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) {{type}}.StartupMemoryHigh, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) {{type}}.MemoryMax, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index baee9b56c9d..decdd2eae30 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -3790,9 +3790,7 @@ int config_parse_memory_limit( uint64_t bytes = CGROUP_LIMIT_MAX; int r; - if (isempty(rvalue) && STR_IN_SET(lvalue, "DefaultMemoryLow", - "DefaultMemoryMin", - "MemoryLow", + if (isempty(rvalue) && STR_IN_SET(lvalue, "MemoryLow", "StartupMemoryLow", "MemoryMin")) bytes = CGROUP_LIMIT_MIN; @@ -3816,31 +3814,17 @@ int config_parse_memory_limit( "StartupMemoryZSwapMax", "MemoryLow", "StartupMemoryLow", - "MemoryMin", - "DefaultMemoryLow", - "DefaultstartupMemoryLow", - "DefaultMemoryMin"))) { + "MemoryMin"))) { log_syntax(unit, LOG_WARNING, filename, line, 0, "Memory limit '%s' out of range, ignoring.", rvalue); return 0; } } - if (streq(lvalue, "DefaultMemoryLow")) { - c->default_memory_low = bytes; - c->default_memory_low_set = true; - } else if (streq(lvalue, "DefaultStartupMemoryLow")) { - c->default_startup_memory_low = bytes; - c->default_startup_memory_low_set = true; - } else if (streq(lvalue, "DefaultMemoryMin")) { - c->default_memory_min = bytes; - c->default_memory_min_set = true; - } else if (streq(lvalue, "MemoryMin")) { + if (streq(lvalue, "MemoryMin")) c->memory_min = bytes; - c->memory_min_set = true; - } else if (streq(lvalue, "MemoryLow")) { + else if (streq(lvalue, "MemoryLow")) c->memory_low = bytes; - c->memory_low_set = true; - } else if (streq(lvalue, "StartupMemoryLow")) { + else if (streq(lvalue, "StartupMemoryLow")) { c->startup_memory_low = bytes; c->startup_memory_low_set = true; } else if (streq(lvalue, "MemoryHigh")) diff --git a/src/core/varlink-cgroup.c b/src/core/varlink-cgroup.c index d26542f0324..ffa3b7ca6d0 100644 --- a/src/core/varlink-cgroup.c +++ b/src/core/varlink-cgroup.c @@ -259,12 +259,9 @@ int unit_cgroup_context_build_json(sd_json_variant **ret, const char *name, void /* Memory Accounting and Control */ SD_JSON_BUILD_PAIR_BOOLEAN("MemoryAccounting", c->memory_accounting), - JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->memory_min_set, "MemoryMin", c->memory_min), - JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->default_memory_min_set, "DefaultMemoryMin", c->default_memory_min), - JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->memory_low_set, "MemoryLow", c->memory_low), - JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->default_memory_low_set, "DefaultMemoryLow", c->default_memory_low), + JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryMin", c->memory_min, CGROUP_LIMIT_MIN), + JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryLow", c->memory_low, CGROUP_LIMIT_MIN), JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->startup_memory_low_set, "StartupMemoryLow", c->startup_memory_low), - JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->default_startup_memory_low_set, "DefaultStartupMemoryLow", c->default_startup_memory_low), JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryHigh", c->memory_high, CGROUP_LIMIT_MAX), JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->startup_memory_high_set, "StartupMemoryHigh", c->startup_memory_high), JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryMax", c->memory_max, CGROUP_LIMIT_MAX), diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c index ffbe2b7930b..c977df66d0c 100644 --- a/src/shared/bus-get-properties.c +++ b/src/shared/bus-get-properties.c @@ -10,6 +10,7 @@ BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_bool_false, "b", 0); BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_bool_true, "b", 1); +BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_uint64_0, "t", UINT64_C(0)); BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_uint64_max, "t", UINT64_MAX); int bus_property_get_bool( diff --git a/src/shared/bus-get-properties.h b/src/shared/bus-get-properties.h index 23d68bd635a..219c8195b73 100644 --- a/src/shared/bus-get-properties.h +++ b/src/shared/bus-get-properties.h @@ -107,4 +107,5 @@ int bus_property_get_pidfdid(sd_bus *bus, const char *path, const char *interfac /* For deprecated properties. */ int bus_property_get_bool_false(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error); int bus_property_get_bool_true(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error); +int bus_property_get_uint64_0(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error); int bus_property_get_uint64_max(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error); diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c index 894a2639cdb..ad718ea0f02 100644 --- a/src/shared/bus-unit-util.c +++ b/src/shared/bus-unit-util.c @@ -342,8 +342,6 @@ static int bus_append_parse_resource_limit(sd_bus_message *m, const char *field, if (isempty(eq) || streq(eq, "infinity")) { uint64_t x = streq(eq, "infinity") ? CGROUP_LIMIT_MAX : STR_IN_SET(field, - "DefaultMemoryLow", - "DefaultMemoryMin", "MemoryLow", "MemoryMin") ? CGROUP_LIMIT_MIN : CGROUP_LIMIT_MAX; @@ -2348,8 +2346,6 @@ static const BusProperty cgroup_properties[] = { { "DisableControllers", bus_append_strv }, { "Delegate", bus_append_parse_delegate }, { "MemoryMin", bus_append_parse_resource_limit }, - { "DefaultMemoryLow", bus_append_parse_resource_limit }, - { "DefaultMemoryMin", bus_append_parse_resource_limit }, { "MemoryLow", bus_append_parse_resource_limit }, { "MemoryHigh", bus_append_parse_resource_limit }, { "MemoryMax", bus_append_parse_resource_limit }, @@ -2386,6 +2382,8 @@ static const BusProperty cgroup_properties[] = { { "BlockIOReadBandwidth", warn_deprecated }, { "BlockIOWriteBandwidth", warn_deprecated }, { "CPUAccounting", warn_deprecated }, + { "DefaultMemoryMin", warn_deprecated }, + { "DefaultMemoryLow", warn_deprecated }, { NULL, bus_try_append_parse_cgroup_io_limit, cgroup_io_limits_list }, {} diff --git a/src/shared/varlink-io.systemd.Unit.c b/src/shared/varlink-io.systemd.Unit.c index 1cdb52de14e..f8e255dd5b9 100644 --- a/src/shared/varlink-io.systemd.Unit.c +++ b/src/shared/varlink-io.systemd.Unit.c @@ -111,15 +111,9 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"), SD_VARLINK_DEFINE_FIELD(MemoryMin, SD_VARLINK_INT, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"), - SD_VARLINK_DEFINE_FIELD(DefaultMemoryMin, SD_VARLINK_INT, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"), SD_VARLINK_DEFINE_FIELD(MemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"), - SD_VARLINK_DEFINE_FIELD(DefaultMemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemorySwapMax=bytes"), SD_VARLINK_DEFINE_FIELD(StartupMemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"), - SD_VARLINK_DEFINE_FIELD(DefaultStartupMemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryHigh=bytes"), SD_VARLINK_DEFINE_FIELD(MemoryHigh, SD_VARLINK_INT, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryHigh=bytes"), diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c index 08319602c00..c35db87c45a 100644 --- a/src/systemctl/systemctl-show.c +++ b/src/systemctl/systemctl-show.c @@ -302,10 +302,6 @@ typedef struct UnitStatusInfo { uint64_t io_read_bytes; uint64_t io_write_bytes; - uint64_t default_memory_min; - uint64_t default_memory_low; - uint64_t default_startup_memory_low; - /* Exec Quotas */ QuotaInfo exec_directories_quota[_EXEC_DIRECTORY_TYPE_MAX]; @@ -2248,9 +2244,6 @@ static int show_one( { "MemorySwapPeak", "t", NULL, offsetof(UnitStatusInfo, memory_swap_peak) }, { "MemoryZSwapCurrent", "t", NULL, offsetof(UnitStatusInfo, memory_zswap_current) }, { "MemoryAvailable", "t", NULL, offsetof(UnitStatusInfo, memory_available) }, - { "DefaultMemoryMin", "t", NULL, offsetof(UnitStatusInfo, default_memory_min) }, - { "DefaultMemoryLow", "t", NULL, offsetof(UnitStatusInfo, default_memory_low) }, - { "DefaultStartupMemoryLow", "t", NULL, offsetof(UnitStatusInfo, default_startup_memory_low) }, { "MemoryMin", "t", NULL, offsetof(UnitStatusInfo, memory_min) }, { "MemoryLow", "t", NULL, offsetof(UnitStatusInfo, memory_low) }, { "StartupMemoryLow", "t", NULL, offsetof(UnitStatusInfo, startup_memory_low) }, diff --git a/src/test/meson.build b/src/test/meson.build index 44b6d5e4bd3..c68477dc60c 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -540,9 +540,6 @@ executables += [ 'sources' : files('test-cgroup-mask.c'), 'dependencies' : common_test_dependencies, }, - core_test_template + { - 'sources' : files('test-cgroup-unit-default.c'), - }, core_test_template + { 'sources' : files('test-chown-rec.c'), }, diff --git a/src/test/test-cgroup-unit-default.c b/src/test/test-cgroup-unit-default.c deleted file mode 100644 index a8415241341..00000000000 --- a/src/test/test-cgroup-unit-default.c +++ /dev/null @@ -1,136 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ - -#include "cgroup.h" -#include "manager.h" -#include "rm-rf.h" -#include "tests.h" -#include "unit.h" - -TEST_RET(default_memory_low, .sd_booted = true) { - _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; - _cleanup_(manager_freep) Manager *m = NULL; - Unit *root, *dml, - *dml_passthrough, *dml_passthrough_empty, *dml_passthrough_set_dml, *dml_passthrough_set_ml, - *dml_override, *dml_override_empty, - *dml_discard, *dml_discard_empty, *dml_discard_set_ml; - uint64_t dml_tree_default; - int r; - - r = enter_cgroup_subroot(NULL); - if (r == -ENOMEDIUM) - return log_tests_skipped("cgroupfs not available"); - - _cleanup_free_ char *unit_dir = NULL; - ASSERT_OK(get_testdata_dir("test-cgroup-unit-default", &unit_dir)); - ASSERT_OK(setenv_unit_path(unit_dir)); - assert_se(runtime_dir = setup_fake_runtime_dir()); - r = manager_new(RUNTIME_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m); - if (IN_SET(r, -EPERM, -EACCES)) { - log_error_errno(r, "manager_new: %m"); - return log_tests_skipped("cannot create manager"); - } - - ASSERT_OK(r); - ASSERT_OK(manager_startup(m, NULL, NULL, NULL)); - - /* dml.slice has DefaultMemoryLow=50. Beyond that, individual subhierarchies look like this: - * - * 1. dml-passthrough.slice sets MemoryLow=100. This should not affect its children, as only - * DefaultMemoryLow is propagated, not MemoryLow. As such, all leaf services should end up with - * memory.low as 50, inherited from dml.slice, *except* for dml-passthrough-set-ml.service, which - * should have the value of 0, as it has MemoryLow explicitly set. - * - * ┌───────────┐ - * │ dml.slice │ - * └─────┬─────┘ - * MemoryLow=100 - * ┌───────────┴───────────┐ - * │ dml-passthrough.slice │ - * └───────────┬───────────┘ - * ┌───────────────────────────────────┼───────────────────────────────────┐ - * no new settings DefaultMemoryLow=15 MemoryLow=0 - * ┌───────────────┴───────────────┐ ┌────────────────┴────────────────┐ ┌───────────────┴────────────────┐ - * │ dml-passthrough-empty.service │ │ dml-passthrough-set-dml.service │ │ dml-passthrough-set-ml.service │ - * └───────────────────────────────┘ └─────────────────────────────────┘ └────────────────────────────────┘ - * - * 2. dml-override.slice sets DefaultMemoryLow=10. As such, dml-override-empty.service should also - * end up with a memory.low of 10. dml-override.slice should still have a memory.low of 50. - * - * ┌───────────┐ - * │ dml.slice │ - * └─────┬─────┘ - * DefaultMemoryLow=10 - * ┌─────────┴──────────┐ - * │ dml-override.slice │ - * └─────────┬──────────┘ - * no new settings - * ┌─────────────┴──────────────┐ - * │ dml-override-empty.service │ - * └────────────────────────────┘ - * - * 3. dml-discard.slice sets DefaultMemoryLow= with no rvalue. As such, - * dml-discard-empty.service should end up with a value of 0. - * dml-discard-set-ml.service sets MemoryLow=15, and as such should have that override the - * reset DefaultMemoryLow value. dml-discard.slice should still have an eventual memory.low of 50. - * - * ┌───────────┐ - * │ dml.slice │ - * └─────┬─────┘ - * DefaultMemoryLow= - * ┌─────────┴─────────┐ - * │ dml-discard.slice │ - * └─────────┬─────────┘ - * ┌──────────────┴───────────────┐ - * no new settings MemoryLow=15 - * ┌─────────────┴─────────────┐ ┌─────────────┴──────────────┐ - * │ dml-discard-empty.service │ │ dml-discard-set-ml.service │ - * └───────────────────────────┘ └────────────────────────────┘ - */ - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml.slice", NULL, &dml)); - - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough.slice", NULL, &dml_passthrough)); - assert_se(UNIT_GET_SLICE(dml_passthrough) == dml); - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough-empty.service", NULL, &dml_passthrough_empty)); - assert_se(UNIT_GET_SLICE(dml_passthrough_empty) == dml_passthrough); - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough-set-dml.service", NULL, &dml_passthrough_set_dml)); - assert_se(UNIT_GET_SLICE(dml_passthrough_set_dml) == dml_passthrough); - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough-set-ml.service", NULL, &dml_passthrough_set_ml)); - assert_se(UNIT_GET_SLICE(dml_passthrough_set_ml) == dml_passthrough); - - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-override.slice", NULL, &dml_override)); - assert_se(UNIT_GET_SLICE(dml_override) == dml); - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-override-empty.service", NULL, &dml_override_empty)); - assert_se(UNIT_GET_SLICE(dml_override_empty) == dml_override); - - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-discard.slice", NULL, &dml_discard)); - assert_se(UNIT_GET_SLICE(dml_discard) == dml); - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-discard-empty.service", NULL, &dml_discard_empty)); - assert_se(UNIT_GET_SLICE(dml_discard_empty) == dml_discard); - ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-discard-set-ml.service", NULL, &dml_discard_set_ml)); - assert_se(UNIT_GET_SLICE(dml_discard_set_ml) == dml_discard); - - assert_se(root = UNIT_GET_SLICE(dml)); - assert_se(!UNIT_GET_SLICE(root)); - - assert_se(unit_get_ancestor_memory_low(root) == CGROUP_LIMIT_MIN); - - assert_se(unit_get_ancestor_memory_low(dml) == CGROUP_LIMIT_MIN); - dml_tree_default = unit_get_cgroup_context(dml)->default_memory_low; - assert_se(dml_tree_default == 50); - - assert_se(unit_get_ancestor_memory_low(dml_passthrough) == 100); - assert_se(unit_get_ancestor_memory_low(dml_passthrough_empty) == dml_tree_default); - assert_se(unit_get_ancestor_memory_low(dml_passthrough_set_dml) == 50); - assert_se(unit_get_ancestor_memory_low(dml_passthrough_set_ml) == 0); - - assert_se(unit_get_ancestor_memory_low(dml_override) == dml_tree_default); - assert_se(unit_get_ancestor_memory_low(dml_override_empty) == 10); - - assert_se(unit_get_ancestor_memory_low(dml_discard) == dml_tree_default); - assert_se(unit_get_ancestor_memory_low(dml_discard_empty) == CGROUP_LIMIT_MIN); - assert_se(unit_get_ancestor_memory_low(dml_discard_set_ml) == 15); - - return 0; -} - -DEFINE_TEST_MAIN(LOG_DEBUG); diff --git a/test/meson.build b/test/meson.build index b1d5421f671..6c7fd666a08 100644 --- a/test/meson.build +++ b/test/meson.build @@ -332,7 +332,6 @@ if install_tests 'journal-data', 'knot-data', 'test-cgroup-mask', - 'test-cgroup-unit-default', 'test-engine', 'test-execute', 'test-fstab-generator', diff --git a/test/test-cgroup-unit-default/dml-discard-empty.service b/test/test-cgroup-unit-default/dml-discard-empty.service deleted file mode 100644 index c17698999ab..00000000000 --- a/test/test-cgroup-unit-default/dml-discard-empty.service +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML discard empty service - -[Service] -Slice=dml-discard.slice -Type=oneshot -ExecStart=true diff --git a/test/test-cgroup-unit-default/dml-discard-set-ml.service b/test/test-cgroup-unit-default/dml-discard-set-ml.service deleted file mode 100644 index 0fba2acdafb..00000000000 --- a/test/test-cgroup-unit-default/dml-discard-set-ml.service +++ /dev/null @@ -1,9 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML discard set ml service - -[Service] -Slice=dml-discard.slice -Type=oneshot -ExecStart=true -MemoryLow=15 diff --git a/test/test-cgroup-unit-default/dml-discard.slice b/test/test-cgroup-unit-default/dml-discard.slice deleted file mode 100644 index dc8a39747fa..00000000000 --- a/test/test-cgroup-unit-default/dml-discard.slice +++ /dev/null @@ -1,6 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML discard slice - -[Slice] -DefaultMemoryLow= diff --git a/test/test-cgroup-unit-default/dml-override-empty.service b/test/test-cgroup-unit-default/dml-override-empty.service deleted file mode 100644 index 5f0c143d66b..00000000000 --- a/test/test-cgroup-unit-default/dml-override-empty.service +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML override empty service - -[Service] -Slice=dml-override.slice -Type=oneshot -ExecStart=true diff --git a/test/test-cgroup-unit-default/dml-override.slice b/test/test-cgroup-unit-default/dml-override.slice deleted file mode 100644 index ac664d1f6b8..00000000000 --- a/test/test-cgroup-unit-default/dml-override.slice +++ /dev/null @@ -1,6 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML override slice - -[Slice] -DefaultMemoryLow=10 diff --git a/test/test-cgroup-unit-default/dml-passthrough-empty.service b/test/test-cgroup-unit-default/dml-passthrough-empty.service deleted file mode 100644 index 896622689fc..00000000000 --- a/test/test-cgroup-unit-default/dml-passthrough-empty.service +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML passthrough empty service - -[Service] -Slice=dml-passthrough.slice -Type=oneshot -ExecStart=true diff --git a/test/test-cgroup-unit-default/dml-passthrough-set-dml.service b/test/test-cgroup-unit-default/dml-passthrough-set-dml.service deleted file mode 100644 index ec82174e695..00000000000 --- a/test/test-cgroup-unit-default/dml-passthrough-set-dml.service +++ /dev/null @@ -1,9 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML passthrough set DML service - -[Service] -Slice=dml-passthrough.slice -Type=oneshot -ExecStart=true -DefaultMemoryLow=15 diff --git a/test/test-cgroup-unit-default/dml-passthrough-set-ml.service b/test/test-cgroup-unit-default/dml-passthrough-set-ml.service deleted file mode 100644 index 63ec3058cf0..00000000000 --- a/test/test-cgroup-unit-default/dml-passthrough-set-ml.service +++ /dev/null @@ -1,9 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML passthrough set ML service - -[Service] -Slice=dml-passthrough.slice -Type=oneshot -ExecStart=true -MemoryLow=0 diff --git a/test/test-cgroup-unit-default/dml-passthrough.slice b/test/test-cgroup-unit-default/dml-passthrough.slice deleted file mode 100644 index 1c8769d2d8f..00000000000 --- a/test/test-cgroup-unit-default/dml-passthrough.slice +++ /dev/null @@ -1,6 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML passthrough slice - -[Slice] -MemoryLow=100 diff --git a/test/test-cgroup-unit-default/dml.slice b/test/test-cgroup-unit-default/dml.slice deleted file mode 100644 index 8e00e7fbf66..00000000000 --- a/test/test-cgroup-unit-default/dml.slice +++ /dev/null @@ -1,6 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later -[Unit] -Description=DML slice - -[Slice] -DefaultMemoryLow=50 -- 2.47.3