From 698a28c6fcc4b33ff2878fa15d238c36e3e246cc Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
Date: Thu, 20 May 2021 22:15:00 +0200
Subject: [PATCH] roles/common: Install generic OOM configuration

- Allow killing of any cgroup if swap is about to run out. When swap is
  at least 90% full, oomd will kill a cgroup, tending to kill the cgroup
  with the highest swap usage.
- Allow killing cgroups of logged in users under severe memory pressure.
  When a cgroup is stalled waiting for memory at least 60% of the time,
  for at least 30 seconds, oomd will attempt to kill it or one of its
  descendant cgroups.
---
 roles/common/files/oomd-override_-.slice.conf      |  2 ++
 .../common/files/oomd-override_user@.service.conf  |  3 +++
 roles/common/tasks/main.yml                        | 14 ++++++++++++++
 3 files changed, 19 insertions(+)
 create mode 100644 roles/common/files/oomd-override_-.slice.conf
 create mode 100644 roles/common/files/oomd-override_user@.service.conf

diff --git a/roles/common/files/oomd-override_-.slice.conf b/roles/common/files/oomd-override_-.slice.conf
new file mode 100644
index 000000000..49958e8e0
--- /dev/null
+++ b/roles/common/files/oomd-override_-.slice.conf
@@ -0,0 +1,2 @@
+[Slice]
+ManagedOOMSwap=kill
diff --git a/roles/common/files/oomd-override_user@.service.conf b/roles/common/files/oomd-override_user@.service.conf
new file mode 100644
index 000000000..c66c40121
--- /dev/null
+++ b/roles/common/files/oomd-override_user@.service.conf
@@ -0,0 +1,3 @@
+[Service]
+ManagedOOMMemoryPressure=kill
+ManagedOOMMemoryPressureLimit=60%
diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml
index 3bd3ce2d6..9dc76ec71 100644
--- a/roles/common/tasks/main.yml
+++ b/roles/common/tasks/main.yml
@@ -103,6 +103,20 @@
   command: systemd-tmpfiles --create
   when: zramtmpfiles.changed
 
+- name: create drop-in directories for oomd
+  file: path=/etc/systemd/system/{{ item }}.d state=directory owner=root group=root mode=0755
+  with_items:
+    - "-.slice"
+    - user@.service
+
+- name: install drop-in snippets for oomd
+  copy: src=oomd-override_{{ item }}.conf dest=/etc/systemd/system/{{ item }}.d/override.conf owner=root group=root mode=0644
+  with_items:
+    - "-.slice"
+    - user@.service
+  notify:
+    - systemd daemon-reload
+
 - name: start systemd-oomd
   service: name=systemd-oomd state=started enabled=yes
 
-- 
GitLab