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

为何调用cpuset_getaffinity查询进程可用CPU会返回全部系统CPU?

关于cpuset_getaffinity返回全CPU集合的原因及进程无法使用全部CPU的场景

你使用cpuset_getaffinity查询进程可用CPU的代码如下:

cpuset_getaffinity(CPU_LEVEL_WHICH, CPU_WHICH_PID, getpid(),
                             sizeof(*cpuset), cpuset);

查询返回系统所有CPU是默认行为:Linux系统中,新创建的进程默认没有CPU亲和性限制,其可运行的CPU集合就是系统的全部在线CPU,所以查询结果自然包含所有CPU。你的代码调用逻辑是正确的,返回的就是当前进程实际允许运行的CPU范围。

以下是进程无法使用全部CPU的常见场景:

  • 显式设置CPU亲和性:通过sched_setaffinity、cpuset_setaffinity等系统调用,或者taskset、cset等命令行工具,将进程绑定到特定的CPU子集,此时进程只能在指定CPU上运行
  • cgroup资源限制:通过cpuset类型的cgroup为进程组分配了有限的CPU集合,进程会被限制在这个集合内运行,常见于容器、虚拟化环境或资源管控场景
  • NUMA架构约束:如果进程被绑定到某一NUMA节点(比如通过numactl工具),而该节点只包含部分CPU,进程无法跨NUMA节点使用其他CPU
  • CPU隔离或离线:内核启动时通过isolcpus参数隔离了部分CPU,或者部分CPU被标记为离线状态,普通进程无法使用这些隔离/离线的CPU
  • 容器环境限制:Docker、Kubernetes等容器平台会通过配置(如--cpuset-cpus参数)限制容器内进程可使用的CPU,进程只能使用分配的核心
  • 实时进程调度限制:部分实时调度策略下,可能会将进程绑定到特定CPU以保证实时性,此时进程无法使用其他CPU

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:15:28