Systemd/src/shared
Chris Down c52db42b78 cgroup: Implement default propagation of MemoryLow with DefaultMemoryLow
In cgroup v2 we have protection tunables -- currently MemoryLow and
MemoryMin (there will be more in future for other resources, too). The
design of these protection tunables requires not only intermediate
cgroups to propagate protections, but also the units at the leaf of that
resource's operation to accept it (by setting MemoryLow or MemoryMin).

This makes sense from an low-level API design perspective, but it's a
good idea to also have a higher-level abstraction that can, by default,
propagate these resources to children recursively. In this patch, this
happens by having descendants set memory.low to N if their ancestor has
DefaultMemoryLow=N -- assuming they don't set a separate MemoryLow
value.

Any affected unit can opt out of this propagation by manually setting
`MemoryLow` to some value in its unit configuration. A unit can also
stop further propagation by setting `DefaultMemoryLow=` with no
argument. This removes further propagation in the subtree, but has no
effect on the unit itself (for that, use `MemoryLow=0`).

Our use case in production is simplifying the configuration of machines
which heavily rely on memory protection tunables, but currently require
tweaking a huge number of unit files to make that a reality. This
directive makes that significantly less fragile, and decreases the risk
of misconfiguration.

After this patch is merged, I will implement DefaultMemoryMin= using the
same principles.
2019-04-12 17:23:58 +02:00
..
linux tree-wide: drop several missing_*.h and import relevant headers from kernel-5.0 2019-04-11 19:00:37 +02:00
acl-util.c headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
acl-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
acpi-fpdt.c tree-wide: drop copyright headers from frequent contributors 2018-06-20 11:58:53 +02:00
acpi-fpdt.h tree-wide: drop double newline 2018-06-29 11:02:17 +09:00
apparmor-util.c tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
apparmor-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
ask-password-api.c ask-password: add extra paranoid overflow check 2019-03-20 10:48:33 +01:00
ask-password-api.h ask-password: make ask_password_keyring() static 2018-12-30 21:09:41 +09:00
barrier.c tree-wide: use SWAP_TWO a bit more 2018-11-26 22:17:34 +01:00
barrier.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
base-filesystem.c shared: be friendly to EROFS images 2019-04-03 17:27:20 +02:00
base-filesystem.h tree-wide: drop double newline 2018-06-29 11:02:17 +09:00
bitmap.c util: split out memcmp()/memset() related calls into memory-util.[ch] 2019-03-13 12:16:43 +01:00
bitmap.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
blkid-util.h shared/blkid-util: do not include util.h needlessly 2018-12-07 02:49:03 +01:00
boot-timestamps.c tree-wide: drop copyright headers from frequent contributors 2018-06-20 11:58:53 +02:00
boot-timestamps.h tree-wide: drop double newline 2018-06-29 11:02:17 +09:00
bootspec.c Add fmemopen_unlocked() and use unlocked ops in fuzzers and some other tests 2019-04-12 11:44:57 +02:00
bootspec.h bootspec: remove now-unused boot_entry_type_table 2019-04-05 13:50:45 +02:00
bpf-program.c util: split out memcmp()/memset() related calls into memory-util.[ch] 2019-03-13 12:16:43 +01:00
bpf-program.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
bus-unit-procs.c bus-unit-procs: use empty_or_root() where appropriate 2019-03-13 17:44:11 +01:00
bus-unit-procs.h bus-unit-util: split out code that shows a unit's process tree 2019-03-13 17:41:41 +01:00
bus-unit-util.c cgroup: Implement default propagation of MemoryLow with DefaultMemoryLow 2019-04-12 17:23:58 +02:00
bus-unit-util.h bus-unit-util: split out code that shows a unit's process tree 2019-03-13 17:41:41 +01:00
bus-util.c cgroup: Implement default propagation of MemoryLow with DefaultMemoryLow 2019-04-12 17:23:58 +02:00
bus-util.h headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
bus-wait-for-jobs.c shared: add some minor comments 2019-04-02 05:34:53 +09:00
bus-wait-for-jobs.h shared: split out code to wait for jobs to complet into its own source file 2019-03-13 17:39:24 +01:00
calendarspec.c Add open_memstream_unlocked() wrapper 2019-04-12 11:44:57 +02:00
calendarspec.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
cgroup-show.c util: split out sorting related calls to new sort-util.[ch] 2019-03-13 12:16:43 +01:00
cgroup-show.h tree-wide: remove various unused functions 2018-12-02 13:35:34 +09:00
clean-ipc.c Move LONG_LINE_MAX definition to fileio.h 2018-11-14 16:25:32 +01:00
clean-ipc.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
clock-util.c util: split out errno related stuff 2019-03-14 13:25:51 +01:00
clock-util.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
condition.c Merge pull request #12030 from poettering/condition-memory 2019-04-02 08:01:42 +09:00
condition.h Merge pull request #12030 from poettering/condition-memory 2019-04-02 08:01:42 +09:00
conf-parser.c util: split out nulstr related stuff to nulstr-util.[ch] 2019-03-14 13:25:52 +01:00
conf-parser.h time-util: Introduce parse_sec_def_infinity 2019-02-14 11:04:42 -08:00
cpu-set-util.c Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
cpu-set-util.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
crypt-util.c Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
crypt-util.h cryptsetup: add same-cpu-crypt and submit-from-crypt-cpus options 2019-03-13 09:48:50 +01:00
daemon-util.h sd-daemon: add notify_start() and notify_on_cleanup() helper function 2018-12-08 18:09:25 +09:00
dev-setup.c util: split out nulstr related stuff to nulstr-util.[ch] 2019-03-14 13:25:52 +01:00
dev-setup.h dev-setup: generalize logic we use to create "inaccessible" device nodes 2018-11-29 20:21:40 +01:00
dissect-image.c tree-wide: drop several missing_*.h and import relevant headers from kernel-5.0 2019-04-11 19:00:37 +02:00
dissect-image.h dissect: automatically detect boot loader spec $BOOT partition 2019-03-01 12:41:32 +01:00
dns-domain.c Partially unify hostname_is_valid() and dns_name_is_valid() 2018-12-10 09:56:56 +01:00
dns-domain.h resolve: reject host names with leading or trailing dashes in /etc/hosts 2018-12-10 09:56:56 +01:00
dropin.c coccinelle: make use of SYNTHETIC_ERRNO 2018-11-22 10:54:38 +01:00
dropin.h Drop my copyright headers 2018-06-14 13:03:20 +02:00
efivars.c efivars: add helper to format efivarfs path 2019-04-05 13:50:12 +02:00
efivars.h efivars: add helper to format efivarfs path 2019-04-05 13:50:12 +02:00
enable-mempool.c mempool: only enable mempool use when linked to libsystemd-shared.so 2018-10-11 11:10:37 +02:00
env-file-label.c util-lib: split out env file parsing code into env-file.c 2018-12-02 13:22:29 +01:00
env-file-label.h util-lib: split out env file parsing code into env-file.c 2018-12-02 13:22:29 +01:00
exec-util.c core: Allow to configure execute_directories execution behavior 2019-02-18 16:16:02 +01:00
exec-util.h core: Allow to configure execute_directories execution behavior 2019-02-18 16:16:02 +01:00
exit-status.c exit-status: introduce EXIT_EXCEPTION mapping to 255 2018-11-20 17:04:07 +01:00
exit-status.h exit-status: introduce EXIT_EXCEPTION mapping to 255 2018-11-20 17:04:07 +01:00
fdset.c nspawn: don't free "fds" twice 2019-03-22 18:11:27 +01:00
fdset.h nspawn: don't free "fds" twice 2019-03-22 18:11:27 +01:00
fileio-label.c util-lib: split out env file parsing code into env-file.c 2018-12-02 13:22:29 +01:00
fileio-label.h util-lib: split out env file parsing code into env-file.c 2018-12-02 13:22:29 +01:00
firewall-util.c firewall-util: add an assert that we're not overwriting a buffer 2018-10-12 14:51:35 +02:00
firewall-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
format-table.c Add open_memstream_unlocked() wrapper 2019-04-12 11:44:57 +02:00
format-table.h format-table: add option to uppercase cells on display 2018-12-03 22:42:38 +01:00
fstab-util.c util: split out nulstr related stuff to nulstr-util.[ch] 2019-03-14 13:25:52 +01:00
fstab-util.h Remove variable only used for an assert 2019-03-28 09:03:06 +01:00
generate-ip-protocol-list.sh scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
generator.c Make fopen_temporary and fopen_temporary_label unlocked 2019-04-12 11:44:56 +02:00
generator.h Pull in systemd-remount-fs.service only when required 2019-01-03 15:30:28 +01:00
gpt.h gpt: add definition for boot loader spec partition 2019-03-01 12:41:32 +01:00
id128-print.c tree-wide: use SD_ID128_UUID_FORMAT_STR as appropriate 2019-04-05 13:48:38 +02:00
id128-print.h systemd-id128: a new tool to print machine/boot/invocation/app-specific ids 2018-10-02 15:15:10 +02:00
ima-util.c tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
ima-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
import-util.c util: split out nulstr related stuff to nulstr-util.[ch] 2019-03-14 13:25:52 +01:00
import-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
initreq.h tree-wide: use '#pragma once' for header guard 2018-08-30 06:10:43 +03:00
install-printf.c Mark *data and *userdata params to specifier_printf() as const 2018-12-12 16:45:33 +01:00
install-printf.h Mark *data and *userdata params to specifier_printf() as const 2018-12-12 16:45:33 +01:00
install.c shared/install: try even harder to make sure variable is initalized 2019-03-26 19:58:17 +01:00
install.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
ip-protocol-list.c ip-protocol-list: sort headers 2018-12-04 09:18:21 +01:00
ip-protocol-list.h util: introduce parse_ip_protocol() 2018-12-02 06:13:41 +01:00
ip-protocol-to-name.awk util: rename socket_protocol_{from,to}_name() to ip_protocol_{from,to}_name() 2018-12-02 05:48:27 +01:00
journal-importer.c journal-remote: set a limit on the number of fields in a message 2019-01-09 23:44:17 +01:00
journal-importer.h journald: set a limit on the number of fields (1k) 2019-01-09 23:41:53 +01:00
journal-util.c Drop my copyright headers 2018-06-14 13:03:20 +02:00
journal-util.h tree-wide: add multiple inclusion guard 2018-06-25 13:04:59 +09:00
json-internal.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
json.c Add open_memstream_unlocked() wrapper 2019-04-12 11:44:57 +02:00
json.h headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
libmount-util.h shared: add a single definition of libmount cleanup functions 2019-04-05 10:18:21 +02:00
libshared.sym tree-wide: tabs suck (#8527) 2018-03-23 15:21:35 +01:00
lockfile-util.c lockfile-util.c: fix build without F_OFD_SETLK 2019-01-11 17:37:36 +01:00
lockfile-util.h lockfile: drop unnecessary headers from lockfile-util.h 2018-12-06 13:31:16 +01:00
log-link.h network: move log_link_debug() or friends to log-link.h 2019-03-13 14:29:03 +09:00
logs-show.c util: split out namespace related stuff into a new namespace-util.[ch] pair 2019-03-13 12:16:38 +01:00
logs-show.h logs-show: make highlight parameter const (#10311) 2018-10-09 16:43:47 +09:00
loop-util.c loop-util: tweak codepath when a loopback file is "created" from an existing block device 2019-01-07 17:50:39 +01:00
loop-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
machine-image.c util-lib: when copying files make sure to apply some chattrs early, some late 2019-03-28 18:43:04 +01:00
machine-image.h machine-image: introduce image_hash_ops and use it 2018-12-02 12:18:54 +01:00
machine-pool.c import: drop logic of setting up /var/lib/machines as btrfs loopback mount 2018-11-26 18:09:01 +01:00
machine-pool.h import: drop logic of setting up /var/lib/machines as btrfs loopback mount 2018-11-26 18:09:01 +01:00
main-func.h main-func: make sure we destruct memory and stuff last 2019-03-21 18:10:06 +01:00
meson.build tree-wide: drop several missing_*.h and import relevant headers from kernel-5.0 2019-04-11 19:00:37 +02:00
module-util.c shared/module-util: fix preexisting mixup with errno sign 2018-07-19 18:28:21 +02:00
module-util.h udev-builtin-kmod: use the generic module_load() function 2018-07-19 18:28:21 +02:00
mount-util.c Make fopen_temporary and fopen_temporary_label unlocked 2019-04-12 11:44:56 +02:00
mount-util.h mount-util: beef up bind_remount_recursive() to be able to toggle more than MS_RDONLY 2019-03-25 19:33:55 +01:00
nscd-flush.c shared: add helper for flushing nscd caches 2018-12-15 12:10:19 +01:00
nscd-flush.h shared: add helper for flushing nscd caches 2018-12-15 12:10:19 +01:00
nsflags.c util: drop missing.h from socket-util.h 2018-12-06 13:31:16 +01:00
nsflags.h nsflsgs: drop missing.h and use missing_sched.h 2018-12-06 13:31:16 +01:00
os-util.c tree-wide: Remove O_CLOEXEC from fdopen 2018-12-12 20:47:40 +01:00
os-util.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
output-mode.c output-mode: add generic helper to pick right JsonFormatFlags for given OutputMode 2018-12-03 22:42:38 +01:00
output-mode.h output-mode: add new helper OUTPUT_MODE_IS_JSON() 2018-12-03 22:42:38 +01:00
pager.c headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
pager.h Split out pretty-print.c and move pager.c and main-func.h to shared/ 2018-11-20 18:40:02 +01:00
path-lookup.c util-lib: split out all temporary file related calls into tmpfiles-util.c 2018-12-02 13:22:29 +01:00
path-lookup.h path-lookup: define explicit unit file directory for attached unit files 2018-10-08 18:49:45 +02:00
pe-header.h bootspec: also look for boot loader spec type 2 entries (i.e. unified kernel images) 2019-03-01 12:41:32 +01:00
pretty-print.c systemd-analyze: support cat-config kernel/install.d 2019-03-07 16:34:35 +01:00
pretty-print.h terminal-util: split out file:// generation from terminal_urlify_path() 2018-11-30 16:46:10 +01:00
ptyfwd.c ptyfwd: optionally override terminal width/height 2018-11-29 20:21:39 +01:00
ptyfwd.h tree-wide: add whitespace between type and variable name 2018-12-04 09:29:54 +01:00
reboot-util.c logind: Add support for RebootParameter 2019-03-22 20:30:33 +02:00
reboot-util.h logind: Add support for RebootParameter 2019-03-22 20:30:33 +02:00
resolve-util.c tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
resolve-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
seccomp-util.c seccomp: check more error codes from seccomp_load() 2019-04-12 10:23:07 +02:00
seccomp-util.h seccomp: check more error codes from seccomp_load() 2019-04-12 10:23:07 +02:00
securebits-util.c missing: rename securebits.h to missing_securebits.h 2018-12-04 07:49:24 +01:00
securebits-util.h missing: rename securebits.h to missing_securebits.h 2018-12-04 07:49:24 +01:00
serialize.c util: drop missing.h from util.h 2018-12-04 10:00:34 +01:00
serialize.h headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
sleep-config.c headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
sleep-config.h shared/sleep-config: add switches to kill specific sleep modes 2018-10-08 18:21:00 +02:00
spawn-ask-password-agent.c tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
spawn-ask-password-agent.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
spawn-polkit-agent.c tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
spawn-polkit-agent.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
specifier.c headers: remove unneeded includes from util.h 2019-03-27 11:53:12 +01:00
specifier.h Mark *data and *userdata params to specifier_printf() as const 2018-12-12 16:45:33 +01:00
switch-root.c switch-root: fix error message 2018-12-28 15:37:15 +09:00
switch-root.h tree-wide: drop double newline 2018-06-29 11:02:17 +09:00
sysctl-util.c sysctl-util: add sysctl_read_ip_property() 2019-02-21 10:38:10 +09:00
sysctl-util.h sysctl-util: add sysctl_read_ip_property() 2019-02-21 10:38:10 +09:00
test-tables.h Drop my copyright headers 2018-06-14 13:03:20 +02:00
tests.c util-lib: split out env file parsing code into env-file.c 2018-12-02 13:22:29 +01:00
tests.h tests: add helper call have_namespaces() to test whether Linux namespaces are available 2018-10-24 19:40:24 +02:00
tmpfile-util-label.c util-lib: split out all temporary file related calls into tmpfiles-util.c 2018-12-02 13:22:29 +01:00
tmpfile-util-label.h util-lib: split out all temporary file related calls into tmpfiles-util.c 2018-12-02 13:22:29 +01:00
tomoyo-util.c tree-wide: drop copyright headers from frequent contributors 2018-06-20 11:58:53 +02:00
tomoyo-util.h tree-wide: drop double newline 2018-06-29 11:02:17 +09:00
udev-util.c udev-util: allocate an event loop of our own for waiting 2019-04-04 02:15:14 +09:00
udev-util.h util: introduce device_for_action() 2019-03-12 03:49:53 +09:00
uid-range.c util: split out sorting related calls to new sort-util.[ch] 2019-03-13 12:16:43 +01:00
uid-range.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
utmp-wtmp.c util: split out memcmp()/memset() related calls into memory-util.[ch] 2019-03-13 12:16:43 +01:00
utmp-wtmp.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
verbs.c coccinelle: make use of SYNTHETIC_ERRNO 2018-11-22 10:54:38 +01:00
verbs.h tree-wide: fix a few missing includes 2018-11-26 18:09:01 +01:00
vlan-util.c vlan-util: add assertions to parse_vlanid() 2018-11-04 00:31:46 +09:00
vlan-util.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
volatile-util.c volatile-util: tweak query_volatile_mode() a bit 2019-03-01 14:11:07 +01:00
volatile-util.h nspawn: add --volatile=overlay support 2019-03-01 14:11:06 +01:00
watchdog.c tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
watchdog.h tree-wide: remove Lennart's copyright lines 2018-06-14 10:20:20 +02:00
web-util.c tree-wide: port various places over to STARTSWITH_SET() 2018-11-26 14:08:46 +01:00
web-util.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00
xml.c tree-wide: use '"' instead of '\"' 2019-01-17 16:46:29 +00:00
xml.h Move various files that don't need to be in basic/ to shared/ 2018-11-20 07:27:37 +01:00