aquafire / kernel_params.txt

Last active 6 months ago

Like 0

Revision 293705468c2e2f68b970606c279f0a7676c12adf

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