| @@ -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 / kernel_params.txt
Last active 6 months ago
aquafire revised this gist 8 months ago · 2937054
No changes
aquafire revised this gist 8 months ago · 6c23426
1 file changed, 49 insertions
aquafire revised this gist 8 months ago · b1d0c50
1 file changed, 5 insertions
| @@ -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 | + | ]; | |