核心隔离三件套
通过内核启动参数 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 只是把核从负载均衡中排除,任务不会自动跑过去;不配合绑核等于没做隔离。
隔离核编号会随硬件、固件与超线程开关变化而漂移,部署与更换机型后必须复核实际核号,否则绑核会绑到错误的核上。
隔离后仍需配套处理
- 中断:把网卡与定时器中断移出隔离核,否则抖动照旧
- 内核线程与工作队列:确认没有系统线程仍被调度到隔离核上
- 监控与采集代理:避免把它们的线程放进隔离核,以免引入额外唤醒