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:
企业网站通用源码是以aspcms作为核心进行开发的asp企业网站源码。企业网站通用源码是一套界面设计非常漂亮的企业网站源码,是2016年下半年的又一力作,适合大部分的企业在制作网站是参考或使用,源码亲测完整可用,没有任何功能限制,程序内核使用的是aspcms,如果有不懂的地方或者有不会用的地方可以搜索aspcms的相关技术问题来解决。网站UI虽然不是特别细腻,但是网站整体格调非常立体,尤其是通观全
- 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 放行——很多人调了半天没效果,就卡在这里。









