about summary refs log tree commit diff
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2017-07-06 01:59:32 +0200
committeraszlig <aszlig@redmoonstudios.org>2017-07-06 01:59:32 +0200
commita6c365df63db28eb73adb7b89250dbacb791e920 (patch)
treeeec87309402f5d905528a8f4c76144ea934a51b9
parentd1e8f105cdb6e8e9449bbef4459d9dd0fd745065 (diff)
modules: Move BFQ stuff into its dedicated module
Not everybody likes to have the latest release canidate kernel, so we
now have an option called vuizvui.system.kernel.bfq.enable, which *only*
enables the BFQ scheduler per default.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @devhell
-rw-r--r--modules/module-list.nix1
-rw-r--r--modules/system/kernel/bfq/bfq-by-default.patch (renamed from modules/user/aszlig/system/bfq-by-default.patch)0
-rw-r--r--modules/system/kernel/bfq/default.nix30
-rw-r--r--modules/user/aszlig/system/kernel.nix29
-rw-r--r--tests/default.nix3
-rw-r--r--tests/system/kernel/bfq.nix13
6 files changed, 56 insertions, 20 deletions
diff --git a/modules/module-list.nix b/modules/module-list.nix
index 6d749457..ca3172fb 100644
--- a/modules/module-list.nix
+++ b/modules/module-list.nix
@@ -14,6 +14,7 @@
   ./services/postfix
   ./services/starbound.nix
   ./system/iso.nix
+  ./system/kernel/bfq
   ./user/aszlig/profiles/base.nix
   ./user/aszlig/profiles/managed.nix
   ./user/aszlig/profiles/workstation
diff --git a/modules/user/aszlig/system/bfq-by-default.patch b/modules/system/kernel/bfq/bfq-by-default.patch
index c6ee0492..c6ee0492 100644
--- a/modules/user/aszlig/system/bfq-by-default.patch
+++ b/modules/system/kernel/bfq/bfq-by-default.patch
diff --git a/modules/system/kernel/bfq/default.nix b/modules/system/kernel/bfq/default.nix
new file mode 100644
index 00000000..064179cf
--- /dev/null
+++ b/modules/system/kernel/bfq/default.nix
@@ -0,0 +1,30 @@
+{ config, lib, ... }:
+
+{
+  options.vuizvui.system.kernel.bfq = {
+    enable = lib.mkEnableOption "Enable the BFQ scheduler by default";
+  };
+
+  config = lib.mkIf config.vuizvui.system.kernel.bfq.enable {
+    boot.kernelPatches = lib.singleton {
+      name = "bfq";
+      patch = ./bfq-by-default.patch;
+      extraConfig = ''
+        SCSI_MQ_DEFAULT y
+        DM_MQ_DEFAULT y
+        IOSCHED_BFQ y
+        BFQ_GROUP_IOSCHED y
+      '';
+    };
+
+    vuizvui.requiresTests = lib.singleton ["vuizvui" "system" "kernel" "bfq"];
+
+    assertions = lib.singleton {
+      assertion =
+        lib.versionAtLeast config.boot.kernelPackages.kernel.version "4.12";
+
+      message = "The BFQ scheduler in conjunction with blk-mq requires "
+              + "at least kernel 4.12.";
+    };
+  };
+}
diff --git a/modules/user/aszlig/system/kernel.nix b/modules/user/aszlig/system/kernel.nix
index 48b2475a..c8531e30 100644
--- a/modules/user/aszlig/system/kernel.nix
+++ b/modules/user/aszlig/system/kernel.nix
@@ -6,26 +6,15 @@
   };
 
   config = lib.mkIf config.vuizvui.user.aszlig.system.kernel.enable {
-    boot = {
-      kernelPatches = lib.singleton {
-        name = "bfq";
-        patch = ./bfq-by-default.patch;
-        extraConfig = ''
-          SCSI_MQ_DEFAULT y
-          DM_MQ_DEFAULT y
-          IOSCHED_BFQ y
-          BFQ_GROUP_IOSCHED y
-        '';
-      };
+    vuizvui.system.kernel.bfq.enable = true;
 
-      kernelPackages = let
-        inherit (lib) take splitString replaceStrings;
-        inherit (pkgs) linux_latest linux_testing;
-        dotizeVer = replaceStrings ["-"] ["."];
-        trimVer = ver: take 2 (splitString "." (dotizeVer ver));
-        tooOld = trimVer linux_latest.version == trimVer linux_testing.version;
-        kernel = if tooOld then linux_latest else linux_testing;
-      in pkgs.linuxPackagesFor kernel;
-    };
+    boot.kernelPackages = let
+      inherit (lib) take splitString replaceStrings;
+      inherit (pkgs) linux_latest linux_testing;
+      dotizeVer = replaceStrings ["-"] ["."];
+      trimVer = ver: take 2 (splitString "." (dotizeVer ver));
+      tooOld = trimVer linux_latest.version == trimVer linux_testing.version;
+      kernel = if tooOld then linux_latest else linux_testing;
+    in pkgs.linuxPackagesFor kernel;
   };
 }
diff --git a/tests/default.nix b/tests/default.nix
index 5f7ae897..d9c00a24 100644
--- a/tests/default.nix
+++ b/tests/default.nix
@@ -12,6 +12,9 @@ in {
   programs = {
     gnupg = callTest ./programs/gnupg;
   };
+  system = {
+    kernel.bfq = callTest ./system/kernel/bfq.nix;
+  };
   richi235 = {
     # Currently broken
     #multipath-vpn = callTest ./richi235/multipath-vpn.nix;
diff --git a/tests/system/kernel/bfq.nix b/tests/system/kernel/bfq.nix
new file mode 100644
index 00000000..09c163b7
--- /dev/null
+++ b/tests/system/kernel/bfq.nix
@@ -0,0 +1,13 @@
+{
+  name = "bfq-kernel";
+
+  machine = { pkgs, ... }: {
+    vuizvui.system.kernel.bfq.enable = true;
+    boot.kernelPackages = pkgs.linuxPackages_latest;
+  };
+
+  testScript = ''
+    $machine->execute('tail /sys/block/*/queue/scheduler >&2');
+    $machine->succeed('grep -HF "[bfq]" /sys/block/vda/queue/scheduler');
+  '';
+}