forked from the-distro/infra
feat: introduce resource control over all machines
We were using over all our machines in the Lix infrastructure. It still makes sense for all our machines. Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
This commit is contained in:
parent
3c9b077bb2
commit
acaaad68bb
|
@ -1,6 +1,7 @@
|
||||||
{ lib, pkgs, ... }: {
|
{ lib, pkgs, ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
./known-ssh-keys.nix
|
./known-ssh-keys.nix
|
||||||
|
./cgroups.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs.overlays = import ../overlays;
|
nixpkgs.overlays = import ../overlays;
|
||||||
|
|
83
common/cgroups.nix
Normal file
83
common/cgroups.nix
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
# Relatively inspired by fbtax2:
|
||||||
|
# https://facebookmicrosites.github.io/cgroup2/docs/fbtax-results.html
|
||||||
|
#
|
||||||
|
# See also the Chris Down talk at LISA'21:
|
||||||
|
# https://www.usenix.org/conference/lisa21/presentation/down
|
||||||
|
{ ... }:
|
||||||
|
let
|
||||||
|
systemCriticalSliceConfig = {
|
||||||
|
ManagedOOMMemoryPressure = "kill";
|
||||||
|
|
||||||
|
# guarantee availability of memory
|
||||||
|
MemoryMin = "192M";
|
||||||
|
# default 100
|
||||||
|
IOWeight = 1000;
|
||||||
|
# default 100
|
||||||
|
CPUWeight = 1000;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
systemd.oomd = {
|
||||||
|
enable = true;
|
||||||
|
# why not, we have cgroups at user level now so it'll just kill the
|
||||||
|
# terminal
|
||||||
|
enableRootSlice = true;
|
||||||
|
enableSystemSlice = true;
|
||||||
|
enableUserSlices = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.enableCgroupAccounting = true;
|
||||||
|
|
||||||
|
systemd.services.nix-daemon = {
|
||||||
|
serviceConfig = {
|
||||||
|
# FIXME: how do i deprioritize this for memory
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue