diff --git a/modules/nix-daemon.nix b/modules/nix-daemon.nix index ab3626e..760c768 100644 --- a/modules/nix-daemon.nix +++ b/modules/nix-daemon.nix @@ -1,6 +1,7 @@ { lib , config , pkgs +, inputs , ... }: @@ -29,6 +30,17 @@ in { domain = "*"; item = "nofile"; type = "-"; value = "20480"; } ]; + # Memory accounting techniques + systemd.services.nix-daemon.serviceConfig = { + MemoryAccounting = true; + MemoryMax = "225G"; + MemoryHigh = "220G"; + MemorySwapMax = "2G"; + ManagedOOMSwap = "kill"; + ManagedOOMMemoryPressure = "kill"; + MemoryPressureWatch = "on"; + }; + nix = { # Garbage-collect often gc.automatic = true; @@ -38,23 +50,21 @@ in # Randomize GC to avoid thundering herd effects. gc.randomizedDelaySec = "1800"; - # 2.11, 2.12 suffers from a bug with remote builders… - package = pkgs.nixVersions.nix_2_13; + # Inchallah, it works. + # package = lib.mkForce inputs.nixpkgs-unstable.legacyPackages.x86_64-linux.nixVersions.nix_2_17; # should be enough? nrBuildUsers = 128; - # https://github.com/NixOS/nix/issues/719 - daemonCPUSchedPolicy = "batch"; - daemonIOSchedClass = "best-effort"; - daemonIOSchedPriority = 5; - settings = { keep-outputs = true; keep-derivations = true; - max-jobs = 42; # 64 is too much, it will explode the RAM for now. Let's keep it serious. - # in zfs we trust - fsync-metadata = lib.boolToString (!config.boot.isContainer or config.fileSystems."/".fsType != "zfs"); + use-cgroups = true; + http-connections = 0; + auto-allocate-uids = true; + cores = 64; # 128 is too much, it will explode the RAM for now. Let's keep it serious. + max-jobs = 2; # Do not build more than 2 derivations at once in the event, both of them are too big, yes this is stupid, fix it in Nix. + fsync-metadata = true; substituters = [ "https://nix-community.cachix.org" "https://tum-dse.cachix.org" @@ -64,6 +74,14 @@ in "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "tum-dse.cachix.org-1:v67rK18oLwgO0Z4b69l30SrV1yRtqxKpiHodG4YxhNM=" ]; + experimental-features = [ + "auto-allocate-uids" + "ca-derivations" + "cgroups" + "discard-references" + "fetch-closure" + "impure-derivations" + ]; }; };