diff --git a/base/services/irqbalance.nix b/base/services/irqbalance.nix index 078e569..09f51ce 100644 --- a/base/services/irqbalance.nix +++ b/base/services/irqbalance.nix @@ -1,4 +1,22 @@ -{ ... }: +{ config, pkgs, lib, ... }: +let + cfg = config.services.irqbalance; +in { services.irqbalance.enable = true; -} \ No newline at end of file + + # irqbalance only has meaningful work to do on multi-socket machines, so + # skip starting it pointlessly everywhere else. + systemd.services.irqbalance.serviceConfig.ExecCondition = let + isMultiSocket = pkgs.writeShellApplication { + name = "irqbalance-is-multi-socket"; + runtimeInputs = [ pkgs.coreutils ]; + text = '' + sockets=$(cat /sys/devices/system/cpu/cpu*/topology/physical_package_id | sort -u | wc -l) + [ "$sockets" -gt 1 ] + ''; + }; + in lib.mkIf cfg.enable [ + (lib.getExe isMultiSocket) + ]; +}