aquafire / kernel_params.txt

Last active 6 months ago

Like 0

aquafire revised this gist 8 months ago · 2937054

No changes

aquafire revised this gist 8 months ago · 6c23426

1 file changed, 49 insertions

kernel_params.nix
@@ -2,4 +2,53 @@ boot.kernelParams = [
2 2 "tsc=reliable" # Force TSC как основной clocksource
3 3 "nohz_full=2-$(nproc)" # Tickless kernel на всех CPU кроме 0,1
4 4 "skew_tick=1" # Позволяет дрейф jiffies ±1ms
5 + ];
6 +
7 +
8 + Нет, "nohz_full=2-$(nproc)" прямо так вставить нельзя — NixOS не интерполирует bash-выражения в строках kernelParams.
9 +
10 + Правильные варианты для NixOS
11 + 1. Статическая строка (самый простой)
12 + text
13 + boot.kernelParams = [
14 + "nohz_full=2-7" # Для 8 ядер (0-7), исключая core0+1
15 + ];
16 + Как посчитать: nproc → 8 ядер = CPUs 0-7 → 2-7
17 +
18 + 2. Динамически через lib (идеально)
19 + text
20 + { lib, ... }:
21 + let
22 + cpuCount = lib.trivial.length (builtins.genList (x: x) (lib.trivial.nproc or 8)); # Фикс для Nix eval
23 + in {
24 + boot.kernelParams = [
25 + "nohz_full=2-${toString (cpuCount - 1)}"
26 + ];
27 + }
28 + Результат: nohz_full=2-7 автоматически.
29 +
30 + 3. Для HyperThreading (Ryzen/Intel рекомендуют)
31 + Исключайте пары core+HT-силблинг:
32 +
33 + text
34 + # 8T/4C → исключаем CPU0+4 (первая пара)
35 + nohz_full=1-3,5-7
36 + Проверить HT в htop: F2 → Columns → Processor → SMT
37 +
38 + Что делает nohz_full
39 + text
40 + CPU0,1 ← housekeeping (systemd, IRQ, timers)
41 + CPU2-7 ← tickless (0Hz когда idle) → +5-15% perf в Rust/async workloads
42 + Проверка после reboot:
43 +
44 + bash
45 + cat /proc/cmdline # nohz_full=2-7
46 + dmesg | grep "NOHZ" # [NOHZ] Full dynticks CPUs: 2-7
47 + perf stat -e irq_vectors # Меньше векторов на isolated CPUs
48 + Рекомендация для performance.nix
49 + text
50 + boot.kernelParams = [
51 + "nohz_full=2-${toString (lib.trivial.length (builtins.genList (x: x) 7))}"
52 + "tsc=reliable"
53 + "mitigations=off" # Уже обсуждали
5 54 ];

aquafire revised this gist 8 months ago · b1d0c50

1 file changed, 5 insertions

kernel_params.nix (file created)
@@ -0,0 +1,5 @@
1 + boot.kernelParams = [
2 + "tsc=reliable" # Force TSC как основной clocksource
3 + "nohz_full=2-$(nproc)" # Tickless kernel на всех CPU кроме 0,1
4 + "skew_tick=1" # Позволяет дрейф jiffies ±1ms
5 + ];