| 
									
										
										
										
											2015-04-01 19:55:49 +02:00
										 |  |  | { config, lib, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-05 23:39:58 +03:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2015-04-01 19:55:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-05 23:39:58 +03:00
										 |  |  | let | 
					
						
							|  |  |  |   cfg = config.hardware.ksm; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							| 
									
										
										
										
											2019-12-10 02:51:19 +01:00
										 |  |  |   imports = [ | 
					
						
							|  |  |  |     (mkRenamedOptionModule [ "hardware" "enableKSM" ] [ "hardware" "ksm" "enable" ]) | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-05 23:39:58 +03:00
										 |  |  |   options.hardware.ksm = { | 
					
						
							|  |  |  |     enable = mkEnableOption "Kernel Same-Page Merging"; | 
					
						
							|  |  |  |     sleep = mkOption { | 
					
						
							|  |  |  |       type = types.nullOr types.int; | 
					
						
							|  |  |  |       default = null; | 
					
						
							|  |  |  |       description = ''
 | 
					
						
							|  |  |  |         How many milliseconds ksmd should sleep between scans. | 
					
						
							|  |  |  |         Setting it to <literal>null</literal> uses the kernel's default time. | 
					
						
							|  |  |  |       '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = mkIf cfg.enable { | 
					
						
							| 
									
										
										
										
											2015-04-01 19:55:49 +02:00
										 |  |  |     systemd.services.enable-ksm = { | 
					
						
							|  |  |  |       description = "Enable Kernel Same-Page Merging"; | 
					
						
							|  |  |  |       wantedBy = [ "multi-user.target" ]; | 
					
						
							| 
									
										
										
										
											2021-02-26 21:37:33 +01:00
										 |  |  |       script = | 
					
						
							|  |  |  |         ''
 | 
					
						
							| 
									
										
										
										
											2015-04-01 19:55:49 +02:00
										 |  |  |           echo 1 > /sys/kernel/mm/ksm/run | 
					
						
							| 
									
										
										
										
											2021-02-26 21:37:33 +01:00
										 |  |  |         '' + optionalString (cfg.sleep != null)
 | 
					
						
							|  |  |  |         ''
 | 
					
						
							|  |  |  |           echo ${toString cfg.sleep} > /sys/kernel/mm/ksm/sleep_millisecs | 
					
						
							|  |  |  |         '';
 | 
					
						
							| 
									
										
										
										
											2015-04-01 19:55:49 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |