土法炼钢兴趣小组的算法知识备份

【操作系统百科】无滴答内核

文章导航

分类入口
os
标签入口
#nohz#tickless#no-hz-full#isolcpus#housekeeping

目录

默认 Linux 每秒产生 250-1000 次 tick 中断——更新时间、检查调度。但在低延迟场景(DPDK、交易系统),每次 tick 都是几微秒的噪声。

一、先看图

flowchart LR
    subgraph 传统 tick
        TICK[周期 tick<br/>250-1000 Hz] --> OVERHEAD[每 tick 中断<br/>~2-5μs]
    end
    subgraph NO_HZ_IDLE
        IDLE[空闲时] --> SKIP1[跳过 tick<br/>省电]
    end
    subgraph NO_HZ_FULL
        RUN[运行用户态] --> SKIP2[跳过 tick<br/>零干扰]
        SKIP2 --> HK[housekeeping CPU<br/>处理杂务]
    end

    classDef old fill:#f0883e22,stroke:#f0883e,color:#adbac7;
    classDef new fill:#3fb95022,stroke:#3fb950,color:#adbac7;
    class TICK,OVERHEAD old
    class IDLE,SKIP1,RUN,SKIP2,HK new

二、三种模式

2.1 CONFIG_HZ_PERIODIC

传统周期 tick。每 CPU 每秒 HZ 次中断。

2.2 NO_HZ_IDLE(默认)

CPU 空闲时停止 tick → 省电(C-state 进入更深层)。

有任务运行 → 恢复 tick。

2.3 NO_HZ_FULL

CPU 上只有一个可运行任务 → 停止 tick → 用户态不受 tick 干扰。

nohz_full=2-7

三、housekeeping CPU

NO_HZ_FULL CPU 不处理:

这些工作由 housekeeping CPU 承担(通常 CPU 0-1)。

四、isolcpus 与 nohz_full

isolcpus=nohz,domain,managed_irq,2-7
nohz_full=2-7
rcu_nocbs=2-7

三者配合:

五、RCU nocb

rcu_nocbs=2-7

隔离 CPU 不运行 RCU 回调 → 由 rcuog/rcuop 线程在 housekeeping CPU 运行。

避免 RCU grace period 处理干扰隔离 CPU。

六、副作用

副作用 原因
/proc/stat CPU 时间不准 无 tick 不更新统计
perf 采样不准 无 tick 触发采样
负载均衡不触发 隔离 CPU 不在调度域
IPI 仍存在 TLB shootdown、RCU 等

七、实际配置示例

# 内核启动参数
GRUB_CMDLINE_LINUX="isolcpus=nohz,domain,managed_irq,2-7 \
  nohz_full=2-7 rcu_nocbs=2-7 \
  irqaffinity=0-1 \
  nosoftlockup"
# 将应用绑定到隔离 CPU
taskset -c 2-7 ./my_app

# 或 cgroup
echo 2-7 > /sys/fs/cgroup/cpuset/isolated/cpuset.cpus

八、DPDK/SPDK 场景

DPDK 用户态网络:polling 模式 → 一个核 100% 运行 PMD 线程 → tick 是噪声。

NO_HZ_FULL → PMD 线程零内核干扰 → 稳定低延迟。

九、观察

# 检查 nohz_full 生效
cat /sys/devices/system/cpu/nohz_full
# 2-7

# tick 统计
cat /proc/interrupts | grep LOC  # Local timer
# 隔离 CPU 的 LOC 应该很低

# 残余中断
perf stat -C 2 -e irq:* sleep 10

十、小结


参考文献

工具


上一篇定时器 下一篇时钟源

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-27 · os

【操作系统百科】内存回收

Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。

2026-04-28 · os

【操作系统百科】交换

swap 还值得开吗?本文讲 swap area 基础、swap cache、zram 压缩内存、zswap 前端压缩池、swappiness 的真实含义、容器里的 swap 策略,以及为什么现代 Android 全靠 zram 不靠磁盘。

2026-05-03 · os

【操作系统百科】Slab/SLUB 分配器

buddy 只管页粒度(4K+),内核大多数对象只有几十到几百字节。slab/SLUB 在 buddy 之上做对象级缓存。本文讲 slab 历史、SLUB 接手、SLOB 退场、kmem_cache、per-CPU cache、KASAN 集成。

2026-05-07 · os

【操作系统百科】用户态分配器

glibc malloc、tcmalloc、jemalloc、mimalloc 各有哲学。本文讲 arena、thread cache、size class、madvise 返还策略、碎片与 RSS 膨胀、如何根据负载选分配器。


By .