首页/系统/Linux 内核与性能调优速查/taskset 绑定 CPU 亲和性
CPU 与调度60 条

taskset 绑定 CPU 亲和性

用掩码或 -c 列表把进程限制在指定 CPU 上运行,减少跨核迁移与缓存失效;systemd 服务可用 CPUAffinity 持久化。

CPU 亲和性绑定

taskset 用掩码或 -c 列表把进程限制在指定 CPU 上运行,减少跨核迁移与缓存失效。常用形式是 taskset -pc <pid> 查看亲和性、taskset -c 0-3 <命令> 指定核启动进程、taskset -pc 0-1 <pid> 修改运行中进程。systemd 服务可以用 CPUAffinity= 固化设置。绑核不是越窄越好:过窄会放大热点,过宽等于没绑。NUMA 机器上跨节点绑核会抬高内存访问延迟,应先看 numactl -H 的拓扑。

基本信息

查看taskset -pc <pid>
绑定启动taskset -c 0-3 <命令>
改运行中进程taskset -pc 0-1 <pid>
持久化systemd 的 CPUAffinity=0-3
底层接口sched_setaffinity(2)

典型使用场景

  • 减少跨核迁移带来的缓存失效
  • 把关键服务固定在指定核上运行
  • 配合 isolcpus 做核心隔离后的显式绑定
  • 排查线程在核间反复迁移造成的抖动
  • 与 NUMA 节点绑定组合规划

常用操作

常用操作
taskset -pc 12345                      # 查看进程当前亲和性
taskset -c 2,3 ./service               # 绑定到 2、3 号核启动
taskset -pc 0-1 12345                  # 修改运行中进程的亲和性
taskset -c 4 chrt -f 50 ./rt-task      # 与实时策略组合使用
systemctl set-property myservice.service CPUAffinity=0-3
lscpu | grep -E 'NUMA|CPU\(s\)'
numactl -H | head -20                  # 绑核前先确认节点拓扑

用法读法

用法含义注意
-c 列表以核列表形式指定支持 0-3 与 2,3 混合写法
-p PID作用于已运行进程不带 -c 时后面跟的是掩码
掩码形式十六进制位图核数多时手算掩码容易出错
systemd CPUAffinity服务级固化设置比重启后失效的运行时设置可靠
绑核不是越窄越好:过窄会让热点集中、并行度不足,过宽等同于没有绑定。
NUMA 机器上跨节点绑核会抬高内存延迟,绑核范围应与节点划分保持一致。

验证与回退

  • 用 taskset -pc 或 ps -eo pid,psr 确认进程实际运行在哪些核
  • 观察核间占用是否符合预期,避免全部挤在少数核上
  • 回退只需重新设置更大的核集合,不必重启进程
  • 服务化场景把绑核写进单元文件,避免重启后设置丢失
绑核后应用新建的工作线程会继承该亲和性,但由其他组件拉起的进程需要单独设置,否则整体看起来像没生效。

易错点

  • 绑得过窄:并行度不足、热点集中,吞吐下降
  • 绑得过宽:几乎覆盖全部核,等于没有绑定
  • 忽略 NUMA 拓扑:跨节点组合抵消绑核带来的收益
  • 只绑主线程:多线程服务的工作线程不受影响,效果不明显
  • 把运行时设置当长期方案:重启即失效,应写入服务单元

数据来源与参考

  • util-linux 文档 taskset(1)
  • sched_setaffinity(2) 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌