diff --git a/nixos/modules/config/power-management.nix b/nixos/modules/config/power-management.nix index fbd7867a0953..a4a4d6e1a6af 100644 --- a/nixos/modules/config/power-management.nix +++ b/nixos/modules/config/power-management.nix @@ -69,7 +69,7 @@ in config = mkIf cfg.enable { - # FIXME: Implement powersave governor for sandy bridge or later Intel CPUs + # Leftover for old setups, should be set by nixos-generate-config now powerManagement.cpuFreqGovernor = mkDefault "ondemand"; systemd.targets.post-resume = { diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl index f1874f239778..e17c02d13745 100644 --- a/nixos/modules/installer/tools/nixos-generate-config.pl +++ b/nixos/modules/installer/tools/nixos-generate-config.pl @@ -94,6 +94,21 @@ sub hasCPUFeature { my $cpus = scalar (grep {/^processor\s*:/} (split '\n', $cpuinfo)); +# Determine CPU governor to use +if (-e "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors") { + my $governors = read_file("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"); + # ondemand governor is not available on sandy bridge or later Intel CPUs + my @desired_governors = ("ondemand", "powersave"); + my $e; + + foreach $e (@desired_governors) { + if (index($governors, $e) != -1) { + last if (push @attrs, "powerManagement.cpuFreqGovernor = \"$e\";"); + } + } +} + + # Virtualization support? push @kernelModules, "kvm-intel" if hasCPUFeature "vmx"; push @kernelModules, "kvm-amd" if hasCPUFeature "svm";