nixos/preload: init
[NixPkgs.git] / nixos / modules / hardware / ksm.nix
blob82d94e6ab57c5c4a1a424e267f034389336e1777
1 { config, lib, ... }:
3 with lib;
5 let
6   cfg = config.hardware.ksm;
8 in {
9   imports = [
10     (mkRenamedOptionModule [ "hardware" "enableKSM" ] [ "hardware" "ksm" "enable" ])
11   ];
13   options.hardware.ksm = {
14     enable = mkEnableOption (lib.mdDoc "Kernel Same-Page Merging");
15     sleep = mkOption {
16       type = types.nullOr types.int;
17       default = null;
18       description = lib.mdDoc ''
19         How many milliseconds ksmd should sleep between scans.
20         Setting it to `null` uses the kernel's default time.
21       '';
22     };
23   };
25   config = mkIf cfg.enable {
26     systemd.services.enable-ksm = {
27       description = "Enable Kernel Same-Page Merging";
28       wantedBy = [ "multi-user.target" ];
29       script =
30         ''
31           echo 1 > /sys/kernel/mm/ksm/run
32         '' + optionalString (cfg.sleep != null)
33         ''
34           echo ${toString cfg.sleep} > /sys/kernel/mm/ksm/sleep_millisecs
35         '';
36     };
37   };