首页/系统/Linux 内核与性能调优速查/隔离核:isolcpus / nohz_full / rcu_nocbs
CPU 与调度60 条

隔离核:isolcpus / nohz_full / rcu_nocbs

组合内核参数把指定核从常规调度均衡、时钟滴答与 RCU 回调中隔离,供延迟敏感任务独占,需配合显式绑核使用。

核心隔离三件套

通过内核启动参数 isolcpus、nohz_full、rcu_nocbs 可以把指定核心从三类后台机制里摘出来:isolcpus 把核排除在普通调度均衡之外,nohz_full 让这些核尽量停掉时钟滴答,rcu_nocbs 把 RCU 回调处理卸载到其他核。三者通常写成同一组核号,再配合 taskset 显式绑核,为低延迟任务提供尽量安静的运行环境。配置写在引导程序内核命令行里,重启后生效。

基本信息

典型写法isolcpus=4-7 nohz_full=4-7 rcu_nocbs=4-7
生效方式写入 grub 内核命令行,重启生效
配套做法taskset -c 4-7 把任务显式绑到隔离核
中断处理需把中断排除在隔离核外(irqaffinity 或 irqbalance 策略)
查看现状cat /proc/cmdline 与 /sys/devices/system/cpu/isolated

典型使用场景

  • 交易、音视频等对抖动敏感的服务独占核心
  • 与 CPU 亲和、中断亲和组合,构建确定性运行环境
  • 评估 nohz 收益:减少时钟中断带来的额外唤醒
  • 排查「隔离核上依然有中断」的问题
  • 部署后复核实际核编号是否与规划一致

检查与使用

检查与使用
cat /proc/cmdline | tr ' ' '\n' | grep -E 'isolcpus|nohz_full|rcu_nocbs'
cat /sys/devices/system/cpu/isolated
cat /sys/devices/system/cpu/nohz_full
taskset -c 4 ./low-latency-worker        # 显式绑到隔离核
cat /proc/interrupts | head -5           # 检查中断是否仍落在隔离核
ps -eo pid,psr,comm | awk '$2>=4 && $2<=7'   # 还有哪些任务在隔离核上

参数分工

参数作用注意
isolcpus把核从调度均衡中隔离任务不会自动进入,必须显式绑定
nohz_full尽量停掉这些核的时钟滴答核上空转时仍可能保留滴答
rcu_nocbs把 RCU 回调卸载到其他核通常与 nohz_full 成对配置
irqaffinity指定中断默认处理的核不设置会把中断留在隔离核上
isolcpus 只是把核从负载均衡中排除,任务不会自动跑过去;不配合绑核等于没做隔离。
隔离核编号会随硬件、固件与超线程开关变化而漂移,部署与更换机型后必须复核实际核号,否则绑核会绑到错误的核上。

隔离后仍需配套处理

  • 中断:把网卡与定时器中断移出隔离核,否则抖动照旧
  • 内核线程与工作队列:确认没有系统线程仍被调度到隔离核上
  • 监控与采集代理:避免把它们的线程放进隔离核,以免引入额外唤醒

易错点

  • 隔离后忘记显式绑核:任务继续跑在其他核上,隔离观察不到任何收益
  • 忘记处理中断:网卡与定时器中断仍落在隔离核,抖动依旧存在
  • 核编号漂移:换机型或改 BIOS 设置后写死的核号错位,绑核结果不可预期
  • 隔离核留太多:可用并行度下降,吞吐型业务反而变慢
  • 以为改完立即生效:需要重启,且要确认引导程序改的是当前使用的内核项

数据来源与参考

  • Linux 内核 Documentation/admin-guide/kernel-parameters.txt
  • Linux 内核 Documentation/timers/no_hz.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌