You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让make及其子进程充分利用隔离CPU进行并行构建?

让Make及其子进程充分利用隔离CPU的解决方案

你的问题核心是**taskset启动的Make进程,其子进程未正确继承CPU亲和性**,或是isolcpus隔离的CPU存在默认访问限制。以下是几种可行的解决方法:

1. 通过Shell中转强制继承亲和性

直接用taskset启动Make时,部分Make版本或环境下可能出现子进程未继承亲和性的情况。可以先启动一个绑定了目标CPU的Shell,再在Shell内执行Make,确保所有子进程(包括编译进程)都继承亲和性:

taskset -c 2-19 bash -c 'make -j 15'

2. 检查并调整Cpuset配置

如果你的CPU是通过isolcpus内核参数隔离的,系统默认的Cpuset可能限制了普通进程访问这些CPU:

  • 查看当前允许的CPU列表:
    cat /sys/fs/cgroup/cpuset/cpuset.cpus
    
  • 如果输出仅包含0-1,将隔离CPU添加到允许列表(注意:此操作会全局取消CPU隔离,仅适合需要让多个进程使用隔离CPU的场景):
    echo 0-19 > /sys/fs/cgroup/cpuset/cpuset.cpus
    
    修改后再执行taskset -c 2-19 make -j15,即可让Make及其子进程使用隔离CPU。

3. 用Numactl绑定(NUMA架构机器适用)

如果你的服务器是NUMA架构,numactl比taskset更适合处理跨节点的CPU绑定,且能确保子进程继承绑定规则:

# 先通过numactl --hardware查看NUMA节点与CPU的对应关系
numactl --cpunodebind=<隔离CPU所属NUMA节点> --localalloc make -j15

验证效果

执行命令后,可通过以下方式确认CPU利用情况:

  • 用top并按下1,查看所有CPU的使用率,确认2-19号CPU是否有负载;
  • 用ps -eo pid,cmd,psr查看Make及其子进程的运行CPU编号。

内容的提问来源于stack exchange,提问作者Sungtaek Lim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:45:25