0

0

Linux isolcpus 与 nohz_full 的全核隔离配置对抖动的影响对比

冷炫風刃

冷炫風刃

发布时间:2026-02-17 16:13:02

|

779人浏览过

|

来源于php中文网

原创

isolcpus 单独使用无法彻底隔离 cpu,必须配合 nohz_full、rcu_nocbs、irqbalance 禁用及 cpuset 限制等措施,才能消除周期 tick、中断、rcu 回调和内核线程干扰,实现微秒级低抖动。

linux isolcpus 与 nohz_full 的全核隔离配置对抖动的影响对比

isolcpus 单独用,隔离不干净,抖动照来

只加 isolcpus=2,3,看似把 CPU2/3 从调度器负载均衡里踢出去了,但其实很多内核干扰还在:周期性调度 tick(比如每秒 100 次的时钟中断)、RCU 回调、softirq、kworker 线程,都可能偷偷跑上去。你绑了进程,top 看 CPU 占用也低,但一测延迟,P99 抖动还是跳变——因为中断或内核线程随时可能抢占你的实时线程。

常见错误现象:perf stat -e irq:softirq_entry,irq:irq_handler_entry -C 2 能抓到大量软硬中断;/proc/interrupts 显示 CPU2 上仍有网卡、定时器等中断;cat /proc/sys/kernel/timer_migration 是 1(默认),意味着高精度定时器会跨核迁移,进一步破坏确定性。

  • isolcpus 只影响 CFS 调度器的 load balance,不关 tick,不挪 RCU,不拦中断
  • 必须配合 nohz_full 才能停掉周期 tick;配合 rcu_nocbs 才能把 RCU 回调甩出去
  • 若系统没开 CONFIG_NO_HZ_FULL=y(老内核如 3.10 默认关),nohz_full 直接无效

nohz_full 是抖动杀手,但有硬性前提

nohz_full=2,3 的核心作用是让指定 CPU 进入「全动态滴答」状态:只要上面只跑一个不可抢占任务(如 SCHED_FIFO 线程),就彻底停掉周期性调度时钟中断。这不是“减少”,而是“归零”——除了残留的 1Hz 统计 tick(已卸载到非隔离核),CPU2/3 上再无定时器唤醒。

但它很娇气,踩错一个条件就退化回普通模式:

  • 必须只有一个可运行任务:两个 SCHED_FIFO 线程在同一个隔离核上?tick 立刻回来
  • 不能用 posix-cpu-timers(比如 timer_create(CLOCK_PROCESS_CPUTIME_ID)
  • 不能用 perf 事件(perf record -C 2 会强制 tick 复活)
  • x86 平台需 TSC 稳定(rdmsr 0x10 查 MSR_IA32_TSC_DEADLINE 可用性)

实操建议:启动后立刻用 cat /sys/devices/system/clocksource/clocksource0/current_clocksource 确认是 tsc;再用 grep "NO_HZ" /proc/timer_list | grep "cpu: 2" 看是否显示 “dyntick idle” —— 不是这个,说明没生效。

irqbalance 和 cpuset 必须同步封口,否则前功尽弃

内核参数管不到用户空间中断分发和内核线程调度范围。nohz_full 再干净,如果网卡中断还往 CPU2 上砸,或者 ksoftirqd/2 自己跑上去,抖动一样爆表。

Synthesys
Synthesys

Synthesys是一家领先的AI虚拟媒体平台,用户只需点击几下鼠标就可以制作专业的AI画外音和AI视频

下载

关键配置点:

  • IRQBALANCE_BANNED_CPULIST=2,3(写进 /etc/sysconfig/irqbalance/etc/irqbalance/irqbalance.env),让 irqbalance 主动绕开隔离核
  • echo 0-1 > /sys/fs/cgroup/cpuset/cpuset.cpus(root cpuset 剔除 2,3),否则 kworker/2:x、migration/2 等默认内核线程仍可能落上去
  • echo 2-3 > /sys/fs/cgroup/cpuset/rt_app/cpuset.cpus + echo $PID > /sys/fs/cgroup/cpuset/rt_app/tasks,把业务线程锁死在隔离核,且只在此 cpuset 下运行

漏掉任意一项,ps -eLo pid,lwp,cls,pcpu,psr,args | grep -E "(kworker|ksoftirqd|migration)" 都可能看到它们出现在 CPU2 上。

验证抖动是否真降下来:别只看 top,要看 timer_list 和 perf

很多人改完参数,top 显示 CPU2 空闲就以为成功了。但抖动藏在微秒级行为里,得用更底层工具交叉验证。

三步快速验效:

  • 查 tick 是否真停:grep "jiffies:" /proc/timer_list | grep "cpu: 2" —— 如果输出里还有 “jiffies: N”,说明 tick 没关;应为 “dyntick idle” 或完全无输出
  • 查中断分布:watch -n1 'cat /proc/interrupts | grep -E "(eth|timer|resched)"',确认 CPU2 列数字长期为 0(除可能的 IPI)
  • 测真实抖动:sudo perf record -e 'sched:sched_switch' -C 2 -g -- sleep 10,然后 perf script | awk '{print $9}' | sort -n | tail -20 看上下文切换间隔分布,稳定在毫秒级以下才算过关

最容易被忽略的是:nohz_full 依赖用户线程主动声明不可抢占。哪怕你绑了核、设了 SCHED_FIFO,如果线程里调了 read()malloc() 导致睡眠,它就不再是“唯一可运行任务”,tick 会瞬间复活。所以真正低抖动场景,往往要搭配 busy-wait、mlockall、hugepage 等一整套手法——单靠内核参数,只是打地基而已。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

12

2026.02.03

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

401

2023.09.04

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

675

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1520

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

714

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

300

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

791

2023.07.05

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

462

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.3万人学习

Git 教程
Git 教程

共21课时 | 3.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号