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

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

文章导航

分类入口
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-05-06 · os

【操作系统百科】内核内存调试

内核内存 bug 是最难追的:UAF、OOB、double free、leak 都可能沉默数月。本文讲 KASAN 三种模式、KFENCE 生产采样、kmemleak、SLUB_DEBUG、UBSAN/KCSAN 联动。

2026-05-08 · os

【操作系统百科】VFS 四层抽象

Linux 的一切皆文件靠 VFS 实现——superblock、inode、dentry、file 四层抽象加 ops 表。本文讲 VFS 核心数据结构、dcache、inode cache、RCU lookup,以及文件系统如何插入 VFS。

2026-04-22 · os

操作系统百科

Linux 6.x 视角下的操作系统系列索引:110 篇覆盖调度、虚拟内存、文件系统与 I/O、并发、隔离、可观测性,按主题、阅读路径与关键问题三种入口组织。

2026-05-27 · os

【操作系统百科】用户态分配器:jemalloc vs tcmalloc

jemalloc 与 tcmalloc 都想解决多线程分配器的老问题:锁争抢、碎片、RSS 膨胀与回收抖动。但两者把优化重点放在了不同位置:tcmalloc 更激进地把热路径推到 per-CPU,jemalloc 则把 arena、extent、decay 和 profiling 做成了一套更完整的内存治理工具箱。


By .