summary refs log tree commit diff
path: root/pkgs/os-specific/linux/kernel/zen-kernels.nix
diff options
context:
space:
mode:
authorThiago Kenji Okada <thiagokokada@gmail.com>2023-07-10 22:59:26 +0100
committerThiago Kenji Okada <thiagokokada@gmail.com>2023-07-11 20:40:51 +0100
commitbe1d7789aa82fabb1f4ce5d9420c62963eeff118 (patch)
tree6eea0677cf16d44014d726b44579456c58c210fd /pkgs/os-specific/linux/kernel/zen-kernels.nix
parent7ff753d4495c2b4cd9deba97def55507f151b87a (diff)
downloadnixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.tar
nixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.tar.gz
nixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.tar.bz2
nixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.tar.lz
nixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.tar.xz
nixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.tar.zst
nixpkgs-be1d7789aa82fabb1f4ce5d9420c62963eeff118.zip
linuxKernel.kernels.linux_{lqx,zen}: add custom extra config
This is based on the following sources:
- https://gitlab.archlinux.org/archlinux/packaging/packages/linux-zen/-/blob/main/config
- https://github.com/damentz/liquorix-package/blob/6.4/master/linux-liquorix/debian/config/kernelarch-x86/config-arch-64
- https://liquorix.net/

This is not supposed to be exhaustive, so we may not completely match
upstream here. However, we should get most of the improvements in upstream
webpage, and there is always space for further tuning in the future.

Fixes: #241986
Diffstat (limited to 'pkgs/os-specific/linux/kernel/zen-kernels.nix')
-rw-r--r--pkgs/os-specific/linux/kernel/zen-kernels.nix72
1 files changed, 71 insertions, 1 deletions
diff --git a/pkgs/os-specific/linux/kernel/zen-kernels.nix b/pkgs/os-specific/linux/kernel/zen-kernels.nix
index edc949a308b..776c0c65604 100644
--- a/pkgs/os-specific/linux/kernel/zen-kernels.nix
+++ b/pkgs/os-specific/linux/kernel/zen-kernels.nix
@@ -28,13 +28,83 @@ let
       inherit sha256;
     };
 
+    # This is based on the following sources:
+    # - zen: https://gitlab.archlinux.org/archlinux/packaging/packages/linux-zen/-/blob/main/config
+    # - lqx: https://github.com/damentz/liquorix-package/blob/6.4/master/linux-liquorix/debian/config/kernelarch-x86/config-arch-64
+    # - Liquorix features: https://liquorix.net/
+    # The list below is not exhaustive, so the kernels probably doesn't match
+    # the upstream, but should bring most of the improvements that will be
+    # expected by users
+    structuredExtraConfig = with lib.kernel; {
+      # Zen Interactive tuning
+      ZEN_INTERACTIVE = yes;
+
+      # FQ-Codel Packet Scheduling
+      NET_SCH_DEFAULT = yes;
+      DEFAULT_FQ_CODEL = yes;
+      DEFAULT_NET_SCH = freeform "fq_codel";
+
+      # Preempt (low-latency)
+      PREEMPT = lib.mkOverride 60 yes;
+      PREEMPT_VOLUNTARY = lib.mkOverride 60 no;
+
+      # Preemptible tree-based hierarchical RCU
+      TREE_RCU = yes;
+      PREEMPT_RCU = yes;
+      RCU_EXPERT = yes;
+      TREE_SRCU = yes;
+      TASKS_RCU_GENERIC = yes;
+      TASKS_RCU = yes;
+      TASKS_RUDE_RCU = yes;
+      TASKS_TRACE_RCU = yes;
+      RCU_STALL_COMMON = yes;
+      RCU_NEED_SEGCBLIST = yes;
+      RCU_FANOUT = freeform "64";
+      RCU_FANOUT_LEAF = freeform "16";
+      RCU_BOOST = yes;
+      RCU_BOOST_DELAY = freeform "500";
+      RCU_NOCB_CPU = yes;
+      RCU_LAZY = yes;
+
+      # Futex WAIT_MULTIPLE implementation for Wine / Proton Fsync.
+      FUTEX = yes;
+      FUTEX_PI = yes;
+
+      # Preemptive Full Tickless Kernel at 1000Hz
+      HZ = freeform "1000";
+      HZ_1000 = yes;
+    } // lib.optionalAttrs (isLqx) {
+      # Google's BBRv2 TCP congestion Control
+      TCP_CONG_BBR2 = yes;
+      DEFAULT_BBR2 = yes;
+      DEFAULT_TCP_CONG = freeform "bbr2";
+
+      # PDS Process Scheduler
+      SCHED_ALT = yes;
+      SCHED_PDS = yes;
+
+      # Swap storage is compressed with LZ4 using zswap
+      ZSWAP_COMPRESSOR_DEFAULT_LZ4 = yes;
+      ZSWAP_COMPRESSOR_DEFAULT = freeform "lz4";
+
+      # Fix error: unused option: XXX.
+      CFS_BANDWIDTH = lib.mkForce (option no);
+      PSI = lib.mkForce (option no);
+      RT_GROUP_SCHED = lib.mkForce (option no);
+      SCHED_AUTOGROUP = lib.mkForce (option no);
+      SCHED_CORE = lib.mkForce (option no);
+
+      # ERROR: modpost: "sched_numa_hop_mask" [drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko] undefined!
+      MLX5_CORE = no;
+    };
+
     passthru.updateScript = [ ./update-zen.py (if isLqx then "lqx" else "zen") ];
 
     extraMeta = {
       branch = lib.versions.majorMinor version + "/master";
       maintainers = with lib.maintainers; [ thiagokokada ];
       description = "Built using the best configuration and kernel sources for desktop, multimedia, and gaming workloads." +
-        lib.optionalString isLqx " (Same as linux_zen but less aggressive release schedule)";
+        lib.optionalString isLqx " (Same as linux_zen, but less aggressive release schedule and additional extra config)";
     };
 
   } // (args.argsOverride or { }));