| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 18:07:46 -05:00
										 |  |  | let | 
					
						
							|  |  |  |   cpupower = config.boot.kernelPackages.cpupower; | 
					
						
							|  |  |  |   cfg = config.powerManagement; | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  | { | 
					
						
							|  |  |  |   ###### interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							| 
									
										
										
										
											2012-08-23 12:12:25 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-20 22:44:58 +00:00
										 |  |  |     powerManagement.cpuFreqGovernor = mkOption { | 
					
						
							| 
									
										
										
										
											2013-10-30 17:37:45 +01:00
										 |  |  |       type = types.nullOr types.str; | 
					
						
							|  |  |  |       default = null; | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  |       example = "ondemand"; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         Configure the governor used to regulate the frequence of the | 
					
						
							| 
									
										
										
										
											2013-01-24 13:55:59 +01:00
										 |  |  |         available CPUs. By default, the kernel configures the | 
					
						
							| 
									
										
										
										
											2016-08-28 17:14:37 -05:00
										 |  |  |         performance governor. | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2012-08-23 12:12:25 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ###### implementation | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-16 01:11:32 +02:00
										 |  |  |   config = mkIf (!config.boot.isContainer && config.powerManagement.cpuFreqGovernor != null) { | 
					
						
							| 
									
										
										
										
											2011-12-20 22:44:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 02:35:09 +02:00
										 |  |  |     boot.kernelModules = [ "cpufreq_${cfg.cpuFreqGovernor}" ]; | 
					
						
							| 
									
										
										
										
											2013-11-26 18:17:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 18:07:46 -05:00
										 |  |  |     environment.systemPackages = [ cpupower ]; | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 18:07:46 -05:00
										 |  |  |     systemd.services.cpufreq = { | 
					
						
							|  |  |  |       description = "CPU Frequency Governor Setup"; | 
					
						
							|  |  |  |       after = [ "systemd-modules-load.service" ]; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2016-08-14 13:00:52 +03:00
										 |  |  |       path = [ cpupower pkgs.kmod ]; | 
					
						
							| 
									
										
										
										
											2014-04-16 10:36:16 +02:00
										 |  |  |       unitConfig.ConditionVirtualization = false; | 
					
						
							| 
									
										
										
										
											2014-03-17 18:07:46 -05:00
										 |  |  |       serviceConfig = { | 
					
						
							|  |  |  |         Type = "oneshot"; | 
					
						
							|  |  |  |         RemainAfterExit = "yes"; | 
					
						
							| 
									
										
										
										
											2014-04-28 19:13:04 +02:00
										 |  |  |         ExecStart = "${cpupower}/bin/cpupower frequency-set -g ${cfg.cpuFreqGovernor}"; | 
					
						
							|  |  |  |         SuccessExitStatus = "0 237"; | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2014-03-17 18:07:46 -05:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-17 18:07:46 -05:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2011-12-16 23:44:37 +00:00
										 |  |  | } |