On Thurs, 12 Mar 2020, Chris Down wrote: > Matthew Wilcox writes: > >On Thu, Mar 12, 2020 at 12:48:22PM +0000, Ivan Teterevkov wrote: > >> This is exactly what I'm trying to avoid: in some distros there is no > >> way to tackle the configuration early enough, e.g. in systemd-based > >> systems the systemd is the process that starts first and arranges > >> memcg in a way it's configured, but unfortunately, it doesn't offer the > swappiness knob. > > > >This sounds like a systemd problem. Have you talked to the systemd > >people about fixing it in systemd? > > Hi there ;-) > > In general most of us maintaining cgroups in systemd run with cgroup v2, so this > isn't a problem we run into in production. The swappiness controls in general > don't make a whole lot of sense being distributed hierarchically, so they've been > phased out entirely in cgroup v2. > > If there had been a patch years ago implementing this in systemd we'd probably > have accepted it, but cgroup v1 is dying and I am really not in favour of adding > more code to massage its rough edges. We already have enough problems > generated by it already. > > However, the following kludge in tmpfiles.d should work to solve your > immediate > problem: > > w /sys/fs/cgroup/memory/system.slice/memory.swappiness - - - - value > > Taking my systemd hat off and putting my -mm hat on: let's not add more hacky > APIs at cgroup v1's behest, or we'll be here until we're pushing up the daisies. > > Thanks, > > Chris The above approach doesn't work for me in el7 with systemd 219 or ubuntu 19 with systemd 242 because presumably the systemd-tmpfiles services start too late. Please find the snippet at the bottom of the email. The only approach that seems to work is to set up a service to run: $ find /sys/fs/cgroup/memory/ -name memory.swappiness | while read -r name; do echo 0 > "${name}"; done I think this is quite ugly because there might be a race condition with the systemd that could be creating the slices while the find is running. One could suggest constraining the depth and going from top to the bottom of the memcg but this still looks inherently unstable. This is why I ended up with the vm_swappiness patch (which I don't quite like myself) but this appears to be the only rock solid option unless I've missed anything obvious. There is no doubt that cgroup v1 is due for replacement and vm_swappiness is frightening but they still have certain advantages to employ until they are history. $ systemctl --version systemd 242 (242) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=19.10 DISTRIB_CODENAME=eoan DISTRIB_DESCRIPTION="Ubuntu 19.10" $ uname -a Linux ubuntu 5.6.0-rc5-custom #1 SMP Wed Mar 11 14:59:15 GMT 2020 x86_64 x86_64 x86_64 GNU/Linux $ tail -1 /etc/sysctl.conf vm.swappiness=10 $ cat /etc/tmpfiles.d/10-swap.conf w /sys/fs/cgroup/memory/system.slice/memory.swappiness - - - - 20 w /sys/fs/cgroup/memory/user.slice/memory.swappiness - - - - 30 $ find /sys/fs/cgroup/memory -name memory.swappiness | while read -r name; do cat "${name}"; done | sort | uniq -c 1 10 32 20 6 30 21 60 $ find /sys/fs/cgroup/memory -name memory.swappiness | while read -r name; do echo "${name}"; cat "${name}"; done | grep --before-context=1 60 /sys/fs/cgroup/memory/system.slice/systemd-udevd.service/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/sys-fs-fuse-connections.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/snap-gnome\x2d3\x2d28\x2d1804-116.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/snap-gnome\x2dlogs-81.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/sys-kernel-config.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-core-7917.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/sys-kernel-debug.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-gnome\x2dcharacters-399.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/swapfile.swap/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-gtk\x2dcommon\x2dthemes-1440.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/snap-gnome\x2dcharacters-317.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/systemd-journald.service/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/dev-mqueue.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-gtk\x2dcommon\x2dthemes-1353.mount/memory.swappiness 60 /sys/fs/cgroup/memory/system.slice/snap-core-8689.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-gnome\x2d3\x2d28\x2d1804-71.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-core18-1668.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-gnome\x2dcalculator-501.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/dev-hugepages.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-gnome\x2dcalculator-544.mount/memory.swappiness 60 -- /sys/fs/cgroup/memory/system.slice/snap-core18-1223.mount/memory.swappiness 60