Linux 多核 CPU 如何调度进程?

发布时间 - 2026-01-23 00:00:00    点击率:
CFS调度器基于vruntime选择进程:红黑树中vruntime最小者优先运行,新进程vruntime设为队列最小值避免插队;实时进程绕过CFS;多核负载均衡有延迟阈值;绑定CPU或NO_HZ_FULL会改变调度行为。

Linux 的 CFS 调度器怎么选进程运行?

CFS(Completely Fair Scheduler)是 Linux 默认的进程调度器,它不按“时间片轮转”硬切,而是基于虚拟运行时间 vruntime 做公平调度。每个可运行进程被放入红黑树,vruntime 最小的那个(即“最该被调度”的)总在树最左端,调度器每次从那里取任务。

  • vruntime 是按进程实际 CPU 使用时间加权计算的,权重由 nice 值决定:nice 越低(优先级越高),权重越大,vruntime 增长越慢,更容易被选中
  • 新进程的 vruntime 默认设为当前运行队列的最小 vruntime,避免“插队”但也不至于太滞后
  • 如果你用 chrt -f 50 启动实时进程,它会绕过 CFS,走 SCHED_FIFO 调度类,此时 CFS 完全不参与——这点常被误认为“CPU 被占满”,其实是调度类切换导致的

多核下进程为什么会“卡”在一个 CPU 上?

Linux 默认启用负载均衡,但不是每毫秒都搬进程。内核按一定周期(如 1–4 ms)检查各 CPU 的运行队列长度和 vruntime 差异,只在差异超过阈值时才迁移任务。这意味着:

  • 短时突发负载可能让某个 CPU 持续忙 10 ms,而其他核空闲——这不是 bug,是延迟优化策略
  • taskset -c 0,1 ./a.outnumactl --cpunodebind=0 会显式绑定 CPU,此时即使其他核空闲,进程也不会被迁走
  • 如果看到 top 中某进程的 %CPU 长期接近 100% 且只跑在单核,先用 ps -o pid,psr,comm -p $PID 确认是否被绑核,而不是直接怀疑调度器失灵

如何判断是不是调度延迟

导致响应变慢?

真正的调度延迟(scheduling latency)往往藏在上下文切换开销或抢占失效里,而不是“没轮到”。常用排查点:

  • 查看 /proc/sys/kernel/sched_latency_ns(默认 ~6 ms)和 /proc/sys/kernel/sched_min_granularity_ns(默认 ~0.75 ms):粒度越小,调度越频繁,但上下文切换开销越大
  • perf sched latency -s max 抓最长调度延迟事件,若出现 >5 ms 的“R → R”(就绪态到运行态)延迟,再结合 perf record -e 'sched:sched_switch' 看是否被高优先级中断或软中断阻塞
  • 注意:启用了 NO_HZ_FULL(即“无滴答”模式)的 CPU,如果跑的是独占型实时任务,内核会停掉该核的定时器,此时 sched_latency_ns 参数完全不生效

多核调度的复杂性不在算法本身,而在它必须同时应对 NUMA 内存访问代价、中断亲和性、cgroup 资源限制、以及用户空间对 CPU 绑定的隐式依赖——这些因素一旦叠加,vruntime 就只是个起点,不是全部答案。


# linux  # node  # mac  # ai  # switch  # 为什么  # 事件  # 算法  # bug  # 负载均衡  # 多核  # 绑定  # 设为  # 越大  # 的是  # 而不是  # 红黑  # 左端  # 是个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何在云主机上快速搭建多站点网站?  如何选择PHP开源工具快速搭建网站?  如何快速生成可下载的建站源码工具?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  个人网站制作流程图片大全,个人网站如何注销?  Laravel怎么为数据库表字段添加索引以优化查询  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Android 常见的图片加载框架详细介绍  深圳网站制作培训,深圳哪些招聘网站比较好?  网站建设要注意的标准 促进网站用户好感度!  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel如何实现文件上传和存储?(本地与S3配置)  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何使用withoutEvents方法临时禁用模型事件  如何用好域名打造高点击率的自主建站?  如何在阿里云服务器自主搭建网站?  如何用wdcp快速搭建高效网站?  浅谈redis在项目中的应用  Android实现代码画虚线边框背景效果  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  如何在阿里云完成域名注册与建站?  实例解析angularjs的filter过滤器  在Oracle关闭情况下如何修改spfile的参数  Python并发异常传播_错误处理解析【教程】  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何用景安虚拟主机手机版绑定域名建站?  如何破解联通资金短缺导致的基站建设难题?  如何挑选最适合建站的高性能VPS主机?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  如何用花生壳三步快速搭建专属网站?  Laravel如何处理表单验证?(Requests代码示例)  海南网站制作公司有哪些,海口网是哪家的?  制作电商网页,电商供应链怎么做?  非常酷的网站设计制作软件,酷培ai教育官方网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用