Linux 多核 CPU 下进程是如何被调度的
发布时间 - 2026-01-29 00:00:00 点击率:次CFS基于vruntime动态调度,非平均分配;taskset仅设亲和性掩码,多线程、中断、超线程、NUMA错配等均使其失效;调高sched_migration_cost_ns可降迁移开销,但需按负载类型调整。
默认用 CFS,但“公平”不等于“平均分配”
Linux 多核下进程不是靠轮着上核来调度的,而是由 CFS(Completely Fair Scheduler)基于虚拟运行时间(vruntime)动态选择:哪个进程的 vruntime 最小,就优先在空闲 CPU 上运行。它会持续尝试把负载“拉平”,但前提是进程没被绑定、没跨 NUMA 节点、没被中断霸占——所以你常看到“2 个核跑满、2 个核几乎空闲”,往往不是 CFS 失效,而是它被现实条件卡住了。
taskset 绑核 ≠ 真正锁住 CPU,常见失效场景
用 taskset -c 0,1 ./app 只是设置 CPU 亲和性掩码,内核仍可能因以下原因绕过它:
- 进程本身是多线程(如 Java 应用),主线程绑了核,子线程默认不受限,会被 CFS 自由调度到其他核
- 未屏蔽高频率中断(
cat /proc/interrupts查看),比如网卡 IRQ 集中在 CPU 2,而你把服务绑在 0–1,结果响应延迟飙升 - 绑的是逻辑核(如超线程的 4、5 号),但它们共享 ALU 和缓存,IO 密集型任务反而更慢
- 没配合
numactl,进程在节点 0 运行,内存却从节点 1 分配,跨节点访问延迟翻倍
sched_migration_cost_ns 调高,是为了让调度器“别瞎动”
CFS 默认认为进程迁移成本很低(/proc/sys/kernel/sched_migration_cost_ns ≈ 500000 ns),于是频繁把轻量线程在核间搬来搬去——这对 Redis、ClickHouse 这类缓存敏感型服务极其不利。实测将它设为 2000000:
- AI 推理延迟下降 22%,上下文切换开销减少 30%
- FFmpeg 转码等长时任务建议设为
1000000–3000000 - 但 Web 短连接服务(如 Nginx)应保持默认,否则新请求排队变长
调整前务必确认负载类型,改错值比不调更伤性能。
NUMA 不处理,绑核就是白忙
在鲲鹏、飞腾或 4 路 x86 服务器上,跨 NUMA 节点内存访问延迟是本地的 2–3 倍。只用 taskset 绑核,numastat -p PID 却显示 numa_hit
-
numactl --cpunodebind=0 --membind=0 ./app(强制本地 CPU + 本地内存) - 避免用
--preferred=0,它只是“倾向”,不是“限定” - 若 BIOS/ACPI 限制严格,加内核启动参数
acpi_enforce_resources=lax才能真正释放 NUMA 控制权
政务云那个降 43% 跨节点延迟的案例,关键不在 numactl 命令本身,而在这步 ACPI 放行——很多人调了半天没效果,就卡在这里。
# linux
# java
# redis
# node
# nginx
# app
# mac
# ai
# ios
# bios
# cos
# red
# 线程
# 多线程
# 主线程
# clickhouse
# ffmpeg
# 设为
# 多核
# 调高
# 的是
# 超线程
# 掩码
# 平均分配
# 是由
# 很多人
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
高端企业智能建站程序:SEO优化与响应式模板定制开发
海南网站制作公司有哪些,海口网是哪家的?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
如何在万网利用已有域名快速建站?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
教学论文网站制作软件有哪些,写论文用什么软件
?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何在自有机房高效搭建专业网站?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何用花生壳三步快速搭建专属网站?
网站图片在线制作软件,怎么在图片上做链接?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
在线制作视频的网站有哪些,电脑如何制作视频短片?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何在腾讯云免费申请建站?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
简单实现Android验证码
Android仿QQ列表左滑删除操作
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
SQL查询语句优化的实用方法总结
Laravel如何实现本地化和多语言支持?(i18n教程)
如何获取PHP WAP自助建站系统源码?
青岛网站建设如何选择本地服务器?
做企业网站制作流程,企业网站制作基本流程有哪些?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
Bootstrap CSS布局之列表
如何做网站制作流程,*游戏网站怎么搭建?
Firefox Developer Edition开发者版本入口
如何在云指建站中生成FTP站点?
如何在服务器上三步完成建站并提升流量?
免费网站制作appp,免费制作app哪个平台好?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
高性能网站服务器配置指南:安全稳定与高效建站核心方案
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
如何撰写建站申请书?关键要点有哪些?
Python数据仓库与ETL构建实战_Airflow调度流程详解
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
西安专业网站制作公司有哪些,陕西省建行官方网站?
制作公司内部网站有哪些,内网如何建网站?


