aboutsummaryrefslogtreecommitdiff
path: root/profiles/core/cgroups.nix
diff options
context:
space:
mode:
Diffstat (limited to 'profiles/core/cgroups.nix')
-rw-r--r--profiles/core/cgroups.nix75
1 files changed, 75 insertions, 0 deletions
diff --git a/profiles/core/cgroups.nix b/profiles/core/cgroups.nix
new file mode 100644
index 0000000..07dc964
--- /dev/null
+++ b/profiles/core/cgroups.nix
@@ -0,0 +1,75 @@
+# Stolen from https://git.lix.systems/the-distro/infra/src/branch/main/common/cgroups.nix
+# Relatively inspired by fbtax2:
+# https://facebookmicrosites.github.io/cgroup2/docs/fbtax-results.html
+{ ... }:
+let
+ systemCriticalSliceConfig = {
+ ManagedOOMMemoryPressure = "kill";
+
+ # guarantee availability of memory
+ MemoryMin = "192M";
+ # default 100
+ IOWeight = 1000;
+ # default 100
+ CPUWeight = 1000;
+ };
+in
+{
+ systemd.oomd = {
+ enable = true;
+ enableRootSlice = true;
+ enableSystemSlice = true;
+ enableUserSlices = true;
+ };
+
+ systemd.services.nix-daemon = {
+ serviceConfig = {
+ CPUWeight = 10;
+ IOWeight = 10;
+ };
+ };
+
+ systemd.slices.hostcritical = {
+ description = "Ensures that services to keep the system alive remain alive";
+
+ unitConfig = {
+ # required to avoid a dependency cycle on systemd-oomd. systemd will
+ # actually guess this right but we should fix it anyway.
+ DefaultDependencies = false;
+ };
+
+ sliceConfig = systemCriticalSliceConfig;
+ };
+
+ # make root logins higher priority for resources
+ systemd.slices."user-0" = {
+ sliceConfig = systemCriticalSliceConfig;
+ };
+
+ systemd.slices.system = {
+ sliceConfig = {
+ ManagedOOMMemoryPressure = "kill";
+ ManagedOOMMemoryPressureLimit = "50%";
+
+ IOWeight = 100;
+ };
+ };
+
+ systemd.services.sshd = {
+ serviceConfig = {
+ Slice = "hostcritical.slice";
+ };
+ };
+
+ systemd.services.systemd-oomd = {
+ serviceConfig = {
+ Slice = "hostcritical.slice";
+ };
+ };
+
+ systemd.services.systemd-journald = {
+ serviceConfig = {
+ Slice = "hostcritical.slice";
+ };
+ };
+}